C语言代码编辑
double func(double x) //函数
{
return x*x*x*x-3*x*x*x+1.5*x*x-4.0;
}
double func1(double x) //导函数
{
return 4*x*x*x-9*x*x+3*x;
}
int Newton(double *x,double precision,int maxcyc) //迭代次数
{
double x1,x0;
int k;
x0=*x;
for(k=0;k<maxcyc;k++)
{
if(func1(x0)==0.0)//若通过初值,函数返回值为0
{
printf("迭代过程中导数为0!\n");
return 0;
}
x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算
if(fabs(x1-x0)<precision || fabs(func(x1))<precision)//达到结束条件
{
*x=x1; //返回结果
return 1;
}
else //未达到结束条件
{
x0=x1; //准备下一次迭代
}
}
printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度
return 0;
}
int main()
{
double x,precision;
int maxcyc;
printf("输入初始迭代值x0:");
scanf("%lf",&x);
printf("输入最大迭代次数:");
scanf("%d",&maxcyc);
printf("迭代要求的精度:");
scanf("%lf",&precision);
if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1
{
printf("该值附近的根为:%lf\n",x);
}
else //若函数返回值为0
{
printf("迭代失败!\n");
}
return 0;
}
C++代码编辑
//此函数是用来求一元3次方程ax^3+bx^2+cx+d=0的解
//比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double diedai(double a,double b,double c,double d,double x);
double a,b,c,d;
double x=10000.0;
cout<<"请依次输入方程四个系数:";
cin>>a>>b>>c>>d;
x=diedai(a,b,c,d,x);
cout<<x<<endl;
return 0;
}
double diedai(double a,double b,double c,double d,double x)
{
while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)
{
x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);
}
return x;
}
可以得到一元3次方程3个解的程序(原创,超优化):
#include<iostream>
#include<vector>
using namespace std;
vector<double >v;//stl vector链型数组
vector<double >::iterator it;//vector迭代器
int x0=5;
double a,b,c,d;
double abs(double y){ while(y<0) y=-y; return y;}
double f(double x){ return a*x*x*x+b*x*x+c*x+d;}
double fd(double x){ return 3*a*x*x+2*b*x+c;}
bool u;//用来判断是否重复
void newton(int a1,int b1,int c1,int d1)
{
for(x0=-5000;x0<=5000;x0++)//在一个大区域中逐个点用牛顿法,可找出大多数3次方程所有根
{
double x1=x0;
while(abs(f(x1))>0.001)
{
double x=x1;
x1=x-f(x)/fd(x);
}
for( it=v.begin();it!=v.end();it++)
{
if(abs((*it-x1))<0.01) {u=1; break;}
}
if(u!=1&&x1<1000000000)
{
cout<<x1<<" ";
v.push_back(x1);//把已得到的解添加到vector,用于防止重复
}
u=0;
}
}
int main(){
cin>>a>>b>>c>>d;
newton(a,b,c,d);
}
matlab代码编辑
定义函数
function y=f(x)
y=f(x);%函数f(x)的表达式
end
function z=h(x)
z=h(x);%函数h(x)的表达式
end
主程序
x=X;%迭代初值
i=0;%迭代次数计算
while i<= 100%迭代次数
x0=X-f(X)/h(X);%牛顿迭代格式
if abs(x0-X)>0.01;%收敛判断
X=x0;
else break
end
i=i+1;
end
fprintf('\n%s%.4f\t%s%d','X=',X,'i=',i) %输出结果
Python代码编辑
Python代码以实例展示求解f(x) = (x-3)**3,f(x) = 0 的根。
def f(x):
return (x-3)**3 ’''定义f(x) = (x-3)**3'''
def fd(x):
return 3*((x-3)**2) ’''定义f'(x) = 3*((x-3)**2)
def newtonMethod(n,assum):
time = n
x = assum
Next = 0
A = f(x)
B = fd(x)
print('A = ' + str(A) + ',B = ' + str(B) + ',time = ' + str(time))
if f(x) == 0.0:
return time,x
else:
Next = x - A/B
print('Next x = '+ str(Next))
if A == f(Next): print('Meet f(x) = 0,x = ' + str(Next)) ’''设置迭代跳出条件,同时输出满足f(x) = 0的x值'''
else:
returnnewtonMethod(n+1,Next)
newtonMethod(0,4.0) ’''设置从0开始计数,x0 = 4.0''' |