Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include<iostream>
- #include<cmath>
- #include<iomanip>
- #include<windows.h>
- using namespace std;
- double f(double l, int a) //f(x)
- {
- double x;
- switch(a)
- {
- case 1:
- x=((l-4.67)*pow(l+7.36,3))*1.0; //funkcja z zajec
- break;
- case 2:
- x=(2+cos(M_PI/2)*l-2*l)*1.0; //zadana funkcja niealgebraiczna
- break;
- case 3:
- x=(32*pow(l,3)-pow(l,2)+1)*1.0; //funkcja algebraiczna 3st.
- break;
- }
- return x;
- }
- double fp(double l, int a) //f'(x)
- {
- double x;
- switch(a)
- {
- case 1:
- x=(pow(l+7.36,3)+3*(l-4.67)*pow(l+7.36,2))*1.0;
- break;
- case 2:
- x=-2;
- break;
- case 3:
- x=(96*pow(l,2)-2*l)*1.0;
- break;
- }
- return x;
- }
- double wd(double l, int a) //wartosc dokladna f(x)
- {
- double x;
- switch(a)
- {
- case 1:
- if(l>-8 && l<-6)
- {x=-7.3600000000000000000000;}
- else
- {x=4.6700000000000000000000;}
- break;
- case 2:
- x=1.00000000000000000000;
- break;
- case 3:
- x=-0.30490049685893966003;
- break;
- }
- return x;
- }
- double u(double l, int a) //u(x)
- {
- return (f(l,a)/fp(l,a));
- }
- void info(int a) //info o testowanej funkcji
- {
- switch(a)
- {
- case 1:
- cout<<"Testowana funkcja: f(x)=(x-4.67)*(x+7.36)^3"<<endl;
- break;
- case 2:
- cout<<"Testowana funkcja: f(x)=2+cos(pi/2)x-2x"<<endl;
- break;
- case 3:
- cout<<"Testowana funkcja: f(x)=32x^3-x^2+1"<<endl;
- break;
- }
- }
- int main()
- {
- bool work=true;
- char key;
- double e,x,w,h,l,p;
- int licznik,a;
- cout<<setprecision(20);
- cout<<"Wybierz testowana funkcje:"<<endl<<" *f(x)=(x-4.67)*(x+7.36)^3 -> [1]"<<endl<<" *f(x)=2+cos(pi/2)x-2x -> [2]"<<endl<<" *f(x)=32x^3-x^2+1 -> [3]"<<endl<<">";
- cin>>a;
- system("cls");
- while(work==true)
- {
- licznik=0;
- cout<<endl<<"Podaj liczbe poczatkowa x: "; cin>>l;
- cout<<"Podaj liczbe tolerancji e: "; cin>>e;
- cout<<endl<<"Metoda Newtona: "<<endl;
- x=l;
- do
- {
- h=-1.0*(f(x,a)/fp(x,a));
- x+=h*1.0;
- w=fabs(h/x)*1.0;
- licznik++;
- }
- while(w>=e);
- cout<<endl;
- info(a);
- cout<<" *Liczba poczatkowa x: "<<l<<endl;
- cout<<" *Liczba tolerancji e: "<<e<<endl;
- cout<<" *Wynik: "<<x<<endl<<" *Ilosc iteracji: "<<licznik<<endl;
- if(wd!=0)
- {
- cout<<" *Blad wzgledny: "<<fabs(x-wd(x,a))/fabs(wd(x,a))<<endl;
- }
- else
- {
- cout<<" *Blad bezwzgledny: "<<fabs(x-wd(x,a))<<endl;
- }
- cout<<endl<<"----------------------------------------------"<<endl;
- licznik=0;
- x=l;
- p=(1/2.0)*(1-sqrt(5));
- cout<<endl<<"Metoda wielopunktowa: "<<endl;
- do
- {
- h=-(1.0/(p*p))*(f(x+p*u(x,a),a)/fp(x,a));
- x+=h*1.0;
- w=fabs(h/x)*1.0;
- licznik++;
- }
- while(w>=e);
- cout<<endl;
- info(a);
- cout<<" *Liczba poczatkowa x: "<<l<<endl;
- cout<<" *Liczba tolerancji e: "<<e<<endl;
- cout<<" *Wynik: "<<x<<endl<<" *Ilosc iteracji: "<<licznik<<endl;
- if(wd!=0)
- {
- cout<<" *Blad wzgledny: "<<fabs(x-wd(x,a))/fabs(wd(x,a))<<endl;
- }
- else
- {
- cout<<" *Blad bezwzgledny: "<<fabs(x-wd(x,a))<<endl;
- }
- cout<<endl<<endl<<"Uruchomic ponownie?[t/n]: "; cin>>key;
- if(key!='t' && key!='T') {work=false;}
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement