📄 newton迭代.cpp
字号:
#include <iostream.h>
#include <math.h>
#define n 3
float fun(float a[n],float x,float err)
{
int i,j;
float temp,f,f1,x1;
do
{
f=0;
f1=0;
x1=x;
for(i=1;i<=n;i++)
{
temp=1;
for(j=1;j<=i;j++)
{
temp=temp*x;
}
f=f+a[i]*temp;
}
f=f+a[0];
for(i=2;i<=n;i++)
{
temp=1;
for(j=1;j<=i-1;j++)
{
temp=temp*x;
}
f1=f1+a[i]*i*temp;
}
f1=f1+a[1];
x=x1-f/f1;
}while(fabs(x-x1)>err);
return x;
}
void main()
{
int i;
float a[n],x,err;
cout<<"请输入方程的系数:";
for(i=0;i<=n;i++)
{
cin>>a[i];
}
cout<<"请输入初值x:";
cin>>x;
cout<<"请输入容许误差err:";
cin>>err;
x=fun(a,x,err);
cout<<"方程解为:"<<x<<endl;
float delta,delta1=0,delta2=1.2,x1,x2,err1;
delta=(delta1+delta2)/2;
do
{
x1=fun(a,delta,err);
if(x1==0)
{
delta1=delta;
delta=(delta1+delta2)/2;
}
if(x1!=0)
{
delta2=delta;
delta=(delta1+delta2)/2;
}
x2=fun(a,delta,err);
err1=fabs(delta1-delta);
}while(((x1==0)&&(x2!=0)&&(err1<=err))==0);
cout<<"尽可能大的delta为:"<<delta1<<endl;
}
/*程序运行结果为:
请输入方程的系数:0 -1 0 0.3333333
请输入初值x:0.1
请输入容许误差err:0.0000001
方程解为:0
尽可能大的delta为:0.774597
请输入方程的系数:0 -1 0 0.3333333
请输入初值x:2.1
请输入容许误差err:0.0000001
方程解为:1.73205
尽可能大的delta为:0.774597
请输入方程的系数:0 -1 0 0.3333333
请输入初值x:-2.1
请输入容许误差err:0.0000001
方程解为:-1.73205
尽可能大的delta为:0.774597
Press any key to continue*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -