From f12ecb67472aa2453d3b1b3fb68e4eb9521aee77 Mon Sep 17 00:00:00 2001 From: hbui <hong-phuc.bui@htwsaar.de> Date: Sun, 21 Jul 2024 13:41:27 +0200 Subject: [PATCH] gui ok --- /dev/null | 32 --- num-int/test/numint/riemann_sum_test.py | 38 ++++ num-int/src/numint/guimain.py | 58 ++++++ num-int/src/numint/mainwindow.ui | 201 ++++++++++++++++----- num-int/src/numint/ui_mainwindow.py | 161 ++++++++++++----- num-int/src/numint/riemann_sum.py | 28 ++ num-int/src/numint/main.py | 16 + 7 files changed, 391 insertions(+), 143 deletions(-) diff --git a/num-int/src/numint/guimain.py b/num-int/src/numint/guimain.py index 8ac8d68..f16cd6c 100644 --- a/num-int/src/numint/guimain.py +++ b/num-int/src/numint/guimain.py @@ -1,8 +1,22 @@ import sys +import matplotlib -from PySide6.QtWidgets import QApplication, QMainWindow +from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout +from numint.input_parser import parse_function, parse_value +from numint.riemann_sum import numint_epsilon, numint_section from numint.ui_mainwindow import Ui_MainWindow +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar +from matplotlib.figure import Figure + +matplotlib.use('QtAgg') + + +class MplCanvas(FigureCanvasQTAgg): + def __init__(self, parent=None, width=5, height=4, dpi=100): + fig = Figure(figsize=(width, height), dpi=dpi) + self.axes = fig.add_subplot(111) + super(MplCanvas, self).__init__(fig) class MainWindow(QMainWindow): @@ -10,6 +24,47 @@ super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) + self.canvas = MplCanvas(self) + self._update_plot() + + toolbar = NavigationToolbar(self.canvas, self) + layout = QVBoxLayout() + layout.addWidget(toolbar) + layout.addWidget(self.canvas) + self.ui.plotBox.setLayout(layout) + self.ui.plotBtn.clicked.connect(self._update_plot) + + def _update_plot(self): + fn_expr = self.ui.function.text() + self.fn_expr = fn_expr + start = self.ui.startValue.text() + end = self.ui.endValue.text() + epsilon = self.ui.espilon.text() + try: + f = parse_function(fn_expr) + (a, b) = (parse_value(start), parse_value(end)) + if epsilon is not None and len(epsilon.strip()) > 0: + eps = parse_value(epsilon) + print(f"plot {fn_expr}, {a}, {b}, epsilon = {eps}") + (self.x, self.y, *_) = numint_epsilon(f, a, b, eps) + self._update_plot_eps() + else: + section = self.ui.section.text() + sec = parse_value(section) + print(f"plot f(x) = {fn_expr}, {a}, {b}, section = {sec}") + (self.x, self.y, *_) = numint_section(f, a, b, sec) + self._update_plot_eps() + except Exception as ex: + print(ex) + pass + + def _update_plot_eps(self): + self.canvas.axes.cla() # Clear the canvas. + self.canvas.axes.stairs(self.y[1:], self.x, baseline=0, fill=True, alpha=0.5, label=self.fn_expr) + self.canvas.axes.stairs(self.y[0:-1], self.x, baseline=0, fill=True, alpha=0.5, label=self.fn_expr) + self.canvas.axes.plot(self.x, self.y, color="black") + self.canvas.draw() + def main(): @@ -22,4 +77,3 @@ if __name__ == "__main__": main() - diff --git a/num-int/src/numint/main.py b/num-int/src/numint/main.py index 0353729..bcfa605 100644 --- a/num-int/src/numint/main.py +++ b/num-int/src/numint/main.py @@ -1,7 +1,7 @@ import sys from matplotlib import pyplot as plt -from numint.RiemannSum import numint +from numint.riemann_sum import numint_epsilon from numint.input_parser import parse_function, parse_value @@ -10,11 +10,15 @@ (a, b) = (parse_value(start), parse_value(end)) eps = parse_value(epsilon) - (x, y, l, r, n) = numint(f, a, b, eps) - # print(l, r, n) - plt.step(x, y, label="x^3") - plt.step(x, y, where="post", label="x^3") - plt.plot(x, y, color="gray", alpha=0.3) + (x, y, l, r, n) = numint_epsilon(f, a, b, eps) + fig, ax = plt.subplots() + ax.stairs(y[1:], x, baseline=0, fill=True, alpha=1,label=function_expr) + ax.stairs(y[0:-1], x, baseline=0, fill=True, color="orange", alpha=0.5, label=function_expr) + #ax.step(x, y, label=function_expr) + #ax.step(x, y, where="post", label=function_expr) + + ax.plot(x, y, color="black") + plt.show() pass diff --git a/num-int/src/numint/mainwindow.ui b/num-int/src/numint/mainwindow.ui index 974c4a5..2909f6d 100644 --- a/num-int/src/numint/mainwindow.ui +++ b/num-int/src/numint/mainwindow.ui @@ -18,65 +18,55 @@ <item> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Funktion</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="functions"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> + <widget class="QGroupBox" name="functionInfo"> + <property name="title"> + <string>Angabe der Funktion</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_start"> <property name="text"> - <string>sin</string> + <string>Funktion f(x) = </string> </property> - </item> - <item> + </widget> + </item> + <item> + <widget class="QLineEdit" name="function"> <property name="text"> - <string>cos</string> + <string>x ** 2</string> </property> - </item> - <item> + </widget> + </item> + <item> + <widget class="QLabel" name="label_fn"> <property name="text"> - <string>x^2</string> + <string>start</string> </property> - </item> - <item> + </widget> + </item> + <item> + <widget class="QLineEdit" name="startValue"> <property name="text"> - <string>x^3</string> + <string>0</string> </property> - </item> - </widget> - </item> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>start</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="startValue"/> - </item> - <item> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>end</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="endValue"/> - </item> - </layout> + </widget> + </item> + <item> + <widget class="QLabel" name="label_end"> + <property name="text"> + <string>end</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="endValue"> + <property name="text"> + <string>4</string> + </property> + </widget> + </item> + </layout> + </widget> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> @@ -94,7 +84,7 @@ </spacer> </item> <item> - <widget class="QPushButton" name="pushButton"> + <widget class="QPushButton" name="plotBtn"> <property name="text"> <string>Ok</string> </property> @@ -102,10 +92,115 @@ </item> </layout> </item> + <item> + <widget class="QPlainTextEdit" name="plainTextEdit"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <family>Noto Mono</family> + </font> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="plainText"> + <string>Die Funktion f(x) kann eine belibige Kombination von arithmetischen Operationen und Python mathematische Funktion in Modul math sein. Einige Beispiele sind: + +x ** 2 +x ** 3 +tan(radians(x))</string> + </property> + </widget> + </item> </layout> </item> <item> - <widget class="QGroupBox" name="groupBox"> + <widget class="QGroupBox" name="breakRule"> + <property name="title"> + <string>Abbuchkriterium</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Maximum Differenz ziwschen Link- und Recht-Summe</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLineEdit" name="espilon"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Anzahl der Sektionen</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLineEdit" name="section"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>8</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="plotBox"> <property name="enabled"> <bool>true</bool> </property> diff --git a/num-int/src/numint/RiemannSum.py b/num-int/src/numint/riemann_sum.py similarity index 61% rename from num-int/src/numint/RiemannSum.py rename to num-int/src/numint/riemann_sum.py index 826ac3f..250f073 100644 --- a/num-int/src/numint/RiemannSum.py +++ b/num-int/src/numint/riemann_sum.py @@ -1,3 +1,6 @@ +from typing import Callable + + def split(iteration=8): (a, b) = (0, 8) x = [a, b] @@ -14,7 +17,7 @@ pass -def numint(f, a, b, epsilon=1e-3): +def numint_epsilon(f:Callable[[float], float], a: float, b: float, epsilon: float = 1e-3): dx = b - a x = [a, b] # debug only y = [f(a), f(b)] @@ -25,7 +28,6 @@ parts = 2 * parts dx = dx / 2 n += 1 - # print(n, " → ", parts) for i in range(1, parts, 2): x.insert(i, a + i * dx) y.insert(i, f(a + i * dx)) @@ -34,7 +36,27 @@ return x, y, s_left, s_right, n -def numint_compact(f, a, b, epsilon=1e-3): +def numint_section(f:Callable[[float], float], a: float, b: float, section_count: int = 8): + dx = b - a + x = [a, b] + y = [f(a), f(b)] + (n, parts) = (0, 1) + s_left = dx * y[0] + s_right = dx * y[1] + while parts < section_count: + parts = 2 * parts + dx = dx / 2 + n += 1 + for i in range(1, parts, 2): + x.insert(i, a + i * dx) + y.insert(i, f(a + i * dx)) + s_left = sum(y[0:-1]) * dx + s_right = sum(y[1:]) * dx + pass + return x, y, s_left, s_right, n + + +def numint_compact(f: Callable[[float], float], a: float, b: float, epsilon=1e-3): dx = b - a y_l = f(a) y_r = f(b) diff --git a/num-int/src/numint/ui_mainwindow.py b/num-int/src/numint/ui_mainwindow.py index 51296cb..ff1a693 100644 --- a/num-int/src/numint/ui_mainwindow.py +++ b/num-int/src/numint/ui_mainwindow.py @@ -15,8 +15,8 @@ QFont, QFontDatabase, QGradient, QIcon, QImage, QKeySequence, QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QApplication, QComboBox, QGroupBox, QHBoxLayout, - QLabel, QLineEdit, QMainWindow, QMenuBar, +from PySide6.QtWidgets import (QApplication, QGroupBox, QHBoxLayout, QLabel, + QLineEdit, QMainWindow, QMenuBar, QPlainTextEdit, QPushButton, QSizePolicy, QSpacerItem, QStatusBar, QVBoxLayout, QWidget) @@ -31,49 +31,42 @@ self.verticalLayout_2.setObjectName(u"verticalLayout_2") self.verticalLayout = QVBoxLayout() self.verticalLayout.setObjectName(u"verticalLayout") - self.horizontalLayout = QHBoxLayout() + self.functionInfo = QGroupBox(self.centralwidget) + self.functionInfo.setObjectName(u"functionInfo") + self.horizontalLayout = QHBoxLayout(self.functionInfo) self.horizontalLayout.setObjectName(u"horizontalLayout") - self.label_3 = QLabel(self.centralwidget) - self.label_3.setObjectName(u"label_3") + self.label_start = QLabel(self.functionInfo) + self.label_start.setObjectName(u"label_start") - self.horizontalLayout.addWidget(self.label_3) + self.horizontalLayout.addWidget(self.label_start) - self.functions = QComboBox(self.centralwidget) - self.functions.addItem("") - self.functions.addItem("") - self.functions.addItem("") - self.functions.addItem("") - self.functions.setObjectName(u"functions") - sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.functions.sizePolicy().hasHeightForWidth()) - self.functions.setSizePolicy(sizePolicy) + self.function = QLineEdit(self.functionInfo) + self.function.setObjectName(u"function") - self.horizontalLayout.addWidget(self.functions) + self.horizontalLayout.addWidget(self.function) - self.label = QLabel(self.centralwidget) - self.label.setObjectName(u"label") + self.label_fn = QLabel(self.functionInfo) + self.label_fn.setObjectName(u"label_fn") - self.horizontalLayout.addWidget(self.label) + self.horizontalLayout.addWidget(self.label_fn) - self.startValue = QLineEdit(self.centralwidget) + self.startValue = QLineEdit(self.functionInfo) self.startValue.setObjectName(u"startValue") self.horizontalLayout.addWidget(self.startValue) - self.label_2 = QLabel(self.centralwidget) - self.label_2.setObjectName(u"label_2") + self.label_end = QLabel(self.functionInfo) + self.label_end.setObjectName(u"label_end") - self.horizontalLayout.addWidget(self.label_2) + self.horizontalLayout.addWidget(self.label_end) - self.endValue = QLineEdit(self.centralwidget) + self.endValue = QLineEdit(self.functionInfo) self.endValue.setObjectName(u"endValue") self.horizontalLayout.addWidget(self.endValue) - self.verticalLayout.addLayout(self.horizontalLayout) + self.verticalLayout.addWidget(self.functionInfo) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") @@ -81,27 +74,93 @@ self.horizontalLayout_2.addItem(self.horizontalSpacer) - self.pushButton = QPushButton(self.centralwidget) - self.pushButton.setObjectName(u"pushButton") + self.plotBtn = QPushButton(self.centralwidget) + self.plotBtn.setObjectName(u"plotBtn") - self.horizontalLayout_2.addWidget(self.pushButton) + self.horizontalLayout_2.addWidget(self.plotBtn) self.verticalLayout.addLayout(self.horizontalLayout_2) + self.plainTextEdit = QPlainTextEdit(self.centralwidget) + self.plainTextEdit.setObjectName(u"plainTextEdit") + sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.plainTextEdit.sizePolicy().hasHeightForWidth()) + self.plainTextEdit.setSizePolicy(sizePolicy) + font = QFont() + font.setFamilies([u"Noto Mono"]) + self.plainTextEdit.setFont(font) + self.plainTextEdit.setReadOnly(True) + + self.verticalLayout.addWidget(self.plainTextEdit) + self.verticalLayout_2.addLayout(self.verticalLayout) - self.groupBox = QGroupBox(self.centralwidget) - self.groupBox.setObjectName(u"groupBox") - self.groupBox.setEnabled(True) - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) + self.breakRule = QGroupBox(self.centralwidget) + self.breakRule.setObjectName(u"breakRule") + self.verticalLayout_3 = QVBoxLayout(self.breakRule) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.horizontalLayout_5 = QHBoxLayout() + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.label_4 = QLabel(self.breakRule) + self.label_4.setObjectName(u"label_4") + + self.horizontalLayout_5.addWidget(self.label_4) + + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_5.addItem(self.horizontalSpacer_2) + + self.espilon = QLineEdit(self.breakRule) + self.espilon.setObjectName(u"espilon") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) - self.groupBox.setSizePolicy(sizePolicy1) + sizePolicy1.setHeightForWidth(self.espilon.sizePolicy().hasHeightForWidth()) + self.espilon.setSizePolicy(sizePolicy1) - self.verticalLayout_2.addWidget(self.groupBox) + self.horizontalLayout_5.addWidget(self.espilon) + + + self.verticalLayout_3.addLayout(self.horizontalLayout_5) + + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.label_5 = QLabel(self.breakRule) + self.label_5.setObjectName(u"label_5") + + self.horizontalLayout_3.addWidget(self.label_5) + + self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_3.addItem(self.horizontalSpacer_3) + + self.section = QLineEdit(self.breakRule) + self.section.setObjectName(u"section") + sizePolicy1.setHeightForWidth(self.section.sizePolicy().hasHeightForWidth()) + self.section.setSizePolicy(sizePolicy1) + + self.horizontalLayout_3.addWidget(self.section) + + + self.verticalLayout_3.addLayout(self.horizontalLayout_3) + + + self.verticalLayout_2.addWidget(self.breakRule) + + self.plotBox = QGroupBox(self.centralwidget) + self.plotBox.setObjectName(u"plotBox") + self.plotBox.setEnabled(True) + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.plotBox.sizePolicy().hasHeightForWidth()) + self.plotBox.setSizePolicy(sizePolicy2) + + self.verticalLayout_2.addWidget(self.plotBox) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) @@ -119,15 +178,23 @@ def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Riemann Sum", None)) - self.label_3.setText(QCoreApplication.translate("MainWindow", u"Funktion", None)) - self.functions.setItemText(0, QCoreApplication.translate("MainWindow", u"sin", None)) - self.functions.setItemText(1, QCoreApplication.translate("MainWindow", u"cos", None)) - self.functions.setItemText(2, QCoreApplication.translate("MainWindow", u"x^2", None)) - self.functions.setItemText(3, QCoreApplication.translate("MainWindow", u"x^3", None)) - - self.label.setText(QCoreApplication.translate("MainWindow", u"start", None)) - self.label_2.setText(QCoreApplication.translate("MainWindow", u"end", None)) - self.pushButton.setText(QCoreApplication.translate("MainWindow", u"Ok", None)) - self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"Plot", None)) + self.functionInfo.setTitle(QCoreApplication.translate("MainWindow", u"Angabe der Funktion", None)) + self.label_start.setText(QCoreApplication.translate("MainWindow", u"Funktion f(x) = ", None)) + self.function.setText(QCoreApplication.translate("MainWindow", u"x ** 2", None)) + self.label_fn.setText(QCoreApplication.translate("MainWindow", u"start", None)) + self.startValue.setText(QCoreApplication.translate("MainWindow", u"0", None)) + self.label_end.setText(QCoreApplication.translate("MainWindow", u"end", None)) + self.endValue.setText(QCoreApplication.translate("MainWindow", u"4", None)) + self.plotBtn.setText(QCoreApplication.translate("MainWindow", u"Ok", None)) + self.plainTextEdit.setPlainText(QCoreApplication.translate("MainWindow", u"Die Funktion f(x) kann eine belibige Kombination von arithmetischen Operationen und Python mathematische Funktion in Modul math sein. Einige Beispiele sind:\n" +"\n" +"x ** 2\n" +"x ** 3\n" +"tan(radians(x))", None)) + self.breakRule.setTitle(QCoreApplication.translate("MainWindow", u"Abbuchkriterium", None)) + self.label_4.setText(QCoreApplication.translate("MainWindow", u"Maximum Differenz ziwschen Link- und Recht-Summe", None)) + self.label_5.setText(QCoreApplication.translate("MainWindow", u"Anzahl der Sektionen", None)) + self.section.setText(QCoreApplication.translate("MainWindow", u"8", None)) + self.plotBox.setTitle(QCoreApplication.translate("MainWindow", u"Plot", None)) # retranslateUi diff --git a/num-int/test/numint/RiemannSum_test.py b/num-int/test/numint/RiemannSum_test.py deleted file mode 100644 index ec24d6f..0000000 --- a/num-int/test/numint/RiemannSum_test.py +++ /dev/null @@ -1,32 +0,0 @@ -import sys -import unittest -from numint.RiemannSum import split, numint, numint_compact - - -class RiemannSumTestCase(unittest.TestCase): - """ - TODO (Aufgabe) Schreiben Sie Kriterien in Unittest - Die Kriterien sind solche Befehlen mit self.assertXXXX - """ - def test_split_interval(self): - split(iteration=6) - - def test_numint(self): - def fn(x) : return x**2 - (a, b) = (0, 2) - (l, r, *_) = numint(fn, a, b) - # print(l, r) # print Take too much place on screen - pass - - def test_numint_compact(self): - def fn(x) : return x**2 - (a, b) = (0, 2) - (l, r) = numint_compact(fn, a, b, epsilon=1E9 * sys.float_info.epsilon) - print(l, r) - pass - - - - -if __name__ == '__main__': - unittest.main() diff --git a/num-int/test/numint/riemann_sum_test.py b/num-int/test/numint/riemann_sum_test.py new file mode 100644 index 0000000..a3233f8 --- /dev/null +++ b/num-int/test/numint/riemann_sum_test.py @@ -0,0 +1,38 @@ +import sys +import unittest +from numint.riemann_sum import split, numint_epsilon, numint_compact, numint_section + + +class RiemannSumTestCase(unittest.TestCase): + """ + TODO (Aufgabe) Schreiben Sie Kriterien in Unittest + Die Kriterien sind solche Befehlen mit self.assertXXXX + """ + def test_split_interval(self): + split(iteration=6) + + def test_numint_epsilon(self): + def fn(x) : return x**2 + (a, b) = (0, 2) + (x, y, l, r, n) = numint_epsilon(fn, a, b) + print(l, r) # print Take too much place on screen + pass + + def test_numint_section(self): + def fn(x) : return x**2 + (a, b) = (0, 2) + (x, y, l, r, n) = numint_section(fn, a, b, section_count=8) + print(l, r) + + def test_numint_compact(self): + def fn(x) : return x**2 + (a, b) = (0, 2) + (l, r) = numint_compact(fn, a, b, epsilon=1E9 * sys.float_info.epsilon) + print(l, r) + pass + + + + +if __name__ == '__main__': + unittest.main() -- Gitblit v1.10.0-SNAPSHOT