c++ 牛頓迭代法求根原始碼(c++函式有多個不同型別返回值的處理方法)
阿新 • • 發佈:2018-12-20
#include <iostream>
#include<cmath>
using namespace std;
struct result
{
double x;
int iter;
};
double f(double x) //原函式
{
return pow(x,4) - 6.4*pow(x,3) + 6.45*pow(x,2) + 20.538*x - 31.752;
}
double diff(double x,double h=0.05)//原函式的導數,h的設定影響很大,決定導數的一個步長
{
return (f(x+h)-f(x) )/h;
}
result newtoniteration(double x,int iter=0,double tol=1.0e-4)//牛頓迭代法求根
{
result ret;
while(1)
{
double dx=-f(x)/diff(x);
x+=dx;
iter+=1;
if(abs(dx)<tol){
break;
}
cout<<x<<" "<<iter<<endl;
}
ret. x=x;
ret.iter=iter;
return ret; //這裡利用返回值有多個的時候,利用struct 結構體,自定義一個result 結構體
}
int main()
{
result r1=newtoniteration(2);
cout<<"迭代次數:"<<r1.iter<<endl;
cout<<"根:"<<r1.x<<endl;
return 0;
}