diff --git a/SCE/SCE/DIFF.cpp b/SCE/SCE/DIFF.cpp index ec72ba2..fe8ec06 100644 --- a/SCE/SCE/DIFF.cpp +++ b/SCE/SCE/DIFF.cpp @@ -24,27 +24,6 @@ vector DIFF::diff() return xdiff; } -vector DIFF::forward_diff() -{ - for(unsigned int i=0; i < xvalues.size()-1; i++) - { - y1values.at(i) = (yvalues.at(i + 1) - yvalues.at(i)) / (xvalues.at(i + 1) - xvalues.at(i)); - } - y1values.at(25) = 0; - return y1values; -} - -vector DIFF::backward_diff() -{ - - for (unsigned int i = 1; i < xvalues.size(); i++) - { - y1values.at(i) = (yvalues.at(i) - yvalues.at(i-1)) / (xvalues.at(i) - xvalues.at(i-1)); - } - y1values.at(0) = 0; - return y1values; -} - vector DIFF::backward_diff(vector y) { vector temp; @@ -54,7 +33,7 @@ vector DIFF::backward_diff(vector y) { temp.at(i) = (y.at(i + 1) - y.at(i)) / (xvalues.at(i + 1) - xvalues.at(i)); } - temp.at(25) = 0; + temp.at(y.size()-1) = 0; return temp; } vector DIFF::forward_diff(vector y) @@ -69,6 +48,35 @@ vector DIFF::forward_diff(vector y) temp.at(0) = 0; return temp; } - +vector DIFF::central_diff(vector y, vector x) +{ + vector temp; + temp.resize(y.size()); + + for (unsigned int i = 1; i < y.size() - 1; i++) + { + temp.at(i) = (y.at(i+1) - y.at(i - 1)) / (x.at(i+1) - x.at(i - 1)); + } + temp.at(0) = 0; + temp.at(y.size() - 1) = 0; + return temp; +} + +vector DIFF::mid_diff(vectory, vectorx) +{ + vector temp; + temp.resize(y.size()); + unsigned int i = 0; + + temp.at(i) = (y.at(i + 1) - y.at(i)) / (x.at(i + 1) - x.at(i)); + i++; + for (; i < y.size() - 1; i++) + { + temp.at(i) = (y.at(i + 1) - y.at(i - 1)) / (x.at(i + 1) - x.at(i - 1)); + } + temp.at(i) = (y.at(i) - y.at(i - 1)) / (x.at(i) - x.at(i - 1)); + + return temp; +} diff --git a/SCE/SCE/DIFF.h b/SCE/SCE/DIFF.h index 6e39461..1e448f6 100644 --- a/SCE/SCE/DIFF.h +++ b/SCE/SCE/DIFF.h @@ -10,11 +10,12 @@ public: vector y1values; //y-values of 1st derivative vector y2values; //y-values of 2nd derivative vector diff(); - vector forward_diff(); - vector backward_diff(); + vector forward_diff(vector); vector backward_diff(vector); + static vector central_diff(vector, vector); + static vector mid_diff(vector, vector); DIFF(); diff --git a/SCE/SCE/SCE.cpp b/SCE/SCE/SCE.cpp index 36cc688..4a3ebe4 100644 --- a/SCE/SCE/SCE.cpp +++ b/SCE/SCE/SCE.cpp @@ -83,9 +83,17 @@ void nlgs() } void diff() { + //Plotter: https://www.desmos.com/calculator + DIFF diff; - - print_array(diff.xvalues.data(), diff.forward_diff().data(), diff.xvalues.size()); - print_array(diff.xvalues.data(), diff.backward_diff(diff.forward_diff()).data(), diff.xvalues.size()); + vector AbfullX = {0, 5, 10, 15, 20 }; + vector AbfullY = {1, 0.8811, 0.7366, 0.5430, 0.1698}; + cout << "Erste Ableitung mit forward und backward" << endl; + print_array(diff.xvalues.data(), diff.forward_diff(diff.yvalues).data(), diff.xvalues.size()); + print_array(diff.xvalues.data(), diff.central_diff(diff.yvalues, diff.xvalues).data(), diff.xvalues.size()); + cout << "Zweite Ableitung mit backward" << endl; + print_array(diff.xvalues.data(), diff.backward_diff(diff.forward_diff(diff.yvalues)).data(), diff.xvalues.size()); + cout << "Erste Ableitung 6.1.2" << endl; + print_array(diff.xvalues.data(), diff.mid_diff(AbfullY, AbfullX).data(), AbfullX.size()); } \ No newline at end of file