int main() { // Wyrażenie sin( (x + 2) * x). Rozwijam w x0 = 3.5; liczę wartość w 4.0 Jet<double> x ( 5); x.set(0, 3.5); x.set(1, 1.0); Jet<double> c2 ( 5); c2.set(0, 2.0); cout<<"wynik: "<<getTaylor(sin( (x+c2) * x) , x.get(0), 4.0)<<endl; cout<<"wynik oczekiwany: "<< sin( (4.0 + 2) * 4.0) <<endl; // Wyrażenie pow( 2.0/x + 2, 2.72). Rozwijam w x0 = 3.5; liczę wartość w 4.0 cout<<"wynik: "<<getTaylor(pow( c2/x + c2, 2.72) , x.get(0), 4.0)<<endl; cout<<"wynik oczekiwany: "<< pow( 2.0/4.0 + 2.0, 2.72) <<endl; // Wyrażenie log( x/(x+2) +2 + sin(cos(x))) . Rozwijam w x0 = 3.5; liczę wartość w 4.0 cout<<"wynik: "<<getTaylor(log(x/(x+c2) +c2 + sin(cos(x))) , x.get(0), 4.0)<<endl; cout<<"wynik oczekiwany: "<< log(4.0/(4.0+2.0) +2.0 + sin(cos(4.0))) <<endl; // Wyrażenie sin(y) całuję od 0 do 2 PI. Jet<double> y ( 21); y.set(0, 0.0); y.set(1, 1.0); cout<<"wynik: "<< integrate(sin(y),y.get(0), 0.0, 2.0 * M_PI, 200, 34)<<endl; cout<<"oczekiwnany: 0"<<endl; return 0; }
Jet<Type> operator-(Jet<Type>& left, Jet<Type>& right) { if(left.length() != right.length() ) throw; // Krzycz o problemach Jet<Type> middle(left.length()); for(int i = 0; i < left.length(); i++) { middle.set(i, left.get(i) - right.get(i)); } return middle; }
Jet<Type> operator*(Jet<Type>& left, Jet<Type>& right) { if(left.length() != right.length() ) throw; // Krzycz o problemach Jet<Type> middle(left.length()); for(int i = 0; i < left.length(); i++) { Type acc = Type(); for(int j = 0; j <= i; j ++) { acc += left.get(j) * right.get(i - j); } middle.set(i, acc); } return middle; }
Type getTaylor(const Jet<Type> &jet, const Type &x0, const Type &x, int n = -1) { Type out = 0; Type powerAcc = 1; if(n == -1) n = jet.length(); for(int i = 0; i < n; i++) { out += jet.get(i) * powerAcc; powerAcc *= (x - x0); } return out; }