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;
|
||||
}
|
||||
|
||||
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> 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(25) = 0;
|
||||
temp.at(y.size()-1) = 0;
|
||||
return temp;
|
||||
}
|
||||
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;
|
||||
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> y2values; //y-values of 2nd derivative
|
||||
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> 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();
|
||||
|
|
|
|||
|
|
@ -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<long double> AbfullX = {0, 5, 10, 15, 20 };
|
||||
vector<long double> 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());
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue