From 3a380888126198236a8491e4bddeb59a7e429e56 Mon Sep 17 00:00:00 2001 From: schrom01 Date: Sun, 25 Sep 2022 13:37:37 +0200 Subject: [PATCH] Solved Task 2 --- roman_schenk_S1_Aufg2.py | 78 ++++++++++++++++----------------- roman_schenk_S1_Aufg2_skript.py | 21 +++++++++ 2 files changed, 60 insertions(+), 39 deletions(-) create mode 100644 roman_schenk_S1_Aufg2_skript.py diff --git a/roman_schenk_S1_Aufg2.py b/roman_schenk_S1_Aufg2.py index 59945bd..ade5277 100644 --- a/roman_schenk_S1_Aufg2.py +++ b/roman_schenk_S1_Aufg2.py @@ -4,7 +4,7 @@ import matplotlib.pyplot as plt plotLegend = [] def showPlot(xmin, xmax, xsteps): - plt.xlim(-11, 11) + plt.xlim(xmin - 1, xmax + 1) plt.xticks(np.arange(xmin, xmax + xsteps, 1.0)) plt.xlabel("x") plt.ylim(-1300, 1300) @@ -14,48 +14,48 @@ def showPlot(xmin, xmax, xsteps): plt.title("Aufgabe 2") plt.show() -def polynom_function(coefficients, x): - result = 0 - for power, coefficient in enumerate(coefficients): - result += coefficient * x ** power +def polynom_function(a, x): #a = coefficients, x = values to calculate + a = np.squeeze(np.asarray(a)) + p = np.array([]) + for x_value in x: + result = 0 + for power, coefficient in enumerate(a): + result += coefficient * x_value ** power + p = np.append(p, result) + return p + +def derivative_f(a): + a = np.squeeze(np.asarray(a)) + result = np.array([]) + for i in range(1, len(a)): + result = np.append(result, a[i] * i) return result -def derivative_f(coefficients): - result = [] - for i in range(1, len(coefficients)): - result.append(coefficients[i] * i) - return result - -def integral_f(coefficients): +def integral_f(a): + a = np.squeeze(np.asarray(a)) c = 0 - result = [c] - for i in range(0, len(coefficients)): - result.append(coefficients[i] / (i+1)) + result = np.array([c]) + for i in range(0, len(a)): + result = np.append(result, a[i] / (i + 1)) return result +def plot_function(x, y, legendString): + plt.plot(x, y) + plotLegend.append(legendString) -def plot_polynom_function(coefficients, xmin, xmax, xsteps): +def is_valid_vector(vector): + shape = np.shape(vector) + if(len(shape) == 2): + return (shape[0] == 1 and shape[1] >= 1) or (shape[0] >= 1 and shape[1] == 1) + else: + return False + +def roman_schenk_Aufg2(a, xmin, xmax): + if not is_valid_vector(a): + raise Exception('Fehler! a ist kein gültiger Spalten- oder Zeilenvektor!') + xsteps = abs(xmax/100.0) x = np.arange(xmin, xmax + xsteps, xsteps) - f = np.array(polynom_function(coefficients, x)) - plt.plot(x, f) - plotLegend.append('f(x)') - -def plot_derivative_f(coefficients, xmin, xmax, xsteps): - x = np.arange(xmin, xmax + xsteps, xsteps) - f = np.array(polynom_function(derivative_f(coefficients), x)) - plt.plot(x, f) - plotLegend.append('f\'(x)') - -def plot_integral_f(coefficients, xmin, xmax, xsteps): - x = np.arange(xmin, xmax + xsteps, xsteps) - f = np.array(polynom_function(integral_f(coefficients), x)) - plt.plot(x, f) - plotLegend.append('F(x)') - -if __name__ == "__main__": - xmin, xmax, xsteps = -10, 10, 0.1 - coefficients_task_1 = [-105, 29, 110, -30, -5, 1] - plot_polynom_function(coefficients_task_1, xmin, xmax, xsteps) - plot_derivative_f(coefficients_task_1, xmin, xmax, xsteps) - plot_integral_f(coefficients_task_1, xmin, xmax, xsteps) - showPlot(xmin, xmax, xsteps) \ No newline at end of file + p = polynom_function(a, x) + dp = polynom_function(derivative_f(a), x) + pint = polynom_function(integral_f(a), x) + return(x,p,dp,pint) diff --git a/roman_schenk_S1_Aufg2_skript.py b/roman_schenk_S1_Aufg2_skript.py new file mode 100644 index 0000000..63fb499 --- /dev/null +++ b/roman_schenk_S1_Aufg2_skript.py @@ -0,0 +1,21 @@ +import numpy as np +from roman_schenk_S1_Aufg2 import roman_schenk_Aufg2, plot_function, showPlot + +if __name__ == "__main__": + #coefficients_task_1 = np.array([-105, 29, 110, -30, -5, 1]) #falsches Format + #coefficients_task_1 = np.array([[-105, 29, 110, -30, -5, 1]]) #Zeilenvektor + coefficients_task_1 = np.array([[-105], [29], [110], [-30], [-5], [1]]) #Spalten Vektor + xmin = -10 + xmax = 10 + [x,p,dp,pint] = roman_schenk_Aufg2(coefficients_task_1, xmin, xmax) + + print("x:\n", x) + print("p:\n", p) + print("dp:\n", dp) + print("pint:\n", pint) + + plot_function(x, p, 'f(x)') + plot_function(x, dp, 'f\'(x)') + plot_function(x, pint, 'F(x)') + + showPlot(xmin, xmax, abs(xmax/100.0)) \ No newline at end of file