mirror of https://github.com/Askill/AP-SCE.git
- added numeric differentation
This commit is contained in:
parent
f8033ef4ac
commit
723a8d3567
|
|
@ -24,27 +24,6 @@ vector<long double> DIFF::diff()
|
||||||
return xdiff;
|
return xdiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<long double> 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<long double> 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<long double> DIFF::backward_diff(vector<long double> y)
|
vector<long double> DIFF::backward_diff(vector<long double> y)
|
||||||
{
|
{
|
||||||
vector<long double> temp;
|
vector<long double> temp;
|
||||||
|
|
@ -54,7 +33,7 @@ vector<long double> DIFF::backward_diff(vector<long double> y)
|
||||||
{
|
{
|
||||||
temp.at(i) = (y.at(i + 1) - y.at(i)) / (xvalues.at(i + 1) - xvalues.at(i));
|
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;
|
return temp;
|
||||||
}
|
}
|
||||||
vector<long double> DIFF::forward_diff(vector<long double> y)
|
vector<long double> DIFF::forward_diff(vector<long double> y)
|
||||||
|
|
@ -69,6 +48,35 @@ vector<long double> DIFF::forward_diff(vector<long double> y)
|
||||||
temp.at(0) = 0;
|
temp.at(0) = 0;
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
vector<long double> DIFF::central_diff(vector<long double> y, vector<long double> x)
|
||||||
|
{
|
||||||
|
vector<long double> 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<long double> DIFF::mid_diff(vector<long double>y, vector<long double>x)
|
||||||
|
{
|
||||||
|
vector<long double> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,12 @@ public:
|
||||||
vector<long double> y1values; //y-values of 1st derivative
|
vector<long double> y1values; //y-values of 1st derivative
|
||||||
vector<long double> y2values; //y-values of 2nd derivative
|
vector<long double> y2values; //y-values of 2nd derivative
|
||||||
vector<long double> diff();
|
vector<long double> diff();
|
||||||
vector<long double> forward_diff();
|
|
||||||
vector<long double> backward_diff();
|
|
||||||
|
|
||||||
vector<long double> forward_diff(vector<long double>);
|
vector<long double> forward_diff(vector<long double>);
|
||||||
vector<long double> backward_diff(vector<long double>);
|
vector<long double> backward_diff(vector<long double>);
|
||||||
|
static vector<long double> central_diff(vector<long double>, vector<long double>);
|
||||||
|
static vector<long double> mid_diff(vector<long double>, vector<long double>);
|
||||||
|
|
||||||
|
|
||||||
DIFF();
|
DIFF();
|
||||||
|
|
|
||||||
|
|
@ -83,9 +83,17 @@ void nlgs()
|
||||||
}
|
}
|
||||||
|
|
||||||
void diff() {
|
void diff() {
|
||||||
|
//Plotter: https://www.desmos.com/calculator
|
||||||
|
|
||||||
DIFF diff;
|
DIFF diff;
|
||||||
|
vector<long double> AbfullX = {0, 5, 10, 15, 20 };
|
||||||
print_array(diff.xvalues.data(), diff.forward_diff().data(), diff.xvalues.size());
|
vector<long double> AbfullY = {1, 0.8811, 0.7366, 0.5430, 0.1698};
|
||||||
print_array(diff.xvalues.data(), diff.backward_diff(diff.forward_diff()).data(), diff.xvalues.size());
|
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());
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue