迭代法就是让方程的解不断去逼近真实的解。这是一种数值计算方法。思路就是按上面的步骤,只设置两个x0,x1开始x0代表第一个值,x1代表第二值第一次迭代之后,让x0=x1,x1=新的值,这样x0代表第二个值,x1代表第三值以此类推。。。直到误差满足要求
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、虚拟主机、营销软件、网站建设、滨海新区网站维护、网站推广。
main()
{double
x1,x2;
x1=0.0;
x2=cos(x1);
while(fabs(x2-x1)le-6)//当误差大于10的负六次方循环。
{x1=x2;
x2=cos(x1);
}
printf("x=%f\n",x2);
}
牛顿迭代法,是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式
x(n+1)
=
g(x(n))
=
x(n)–f(x(n))/f‘(x(n)).然后按以下步骤执行:
(1)
选一个方程的近似根,赋给变量x1;
(2)
将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
(3)
当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。
若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就
认为是方程的根。
#include stdio.h
#include math.h
#define N 100
float f (float x,float y,float z)
{
if((1-x/y)0)
z=x/y-1;
else
z=1-x/y;
return z;
}
void main()
{
float a[N],b[N],c[N],d[N];
float m,n,p,s;
float z;
int i=0;
printf("please input data:\n");
scanf("%f,%f,%f,%f",m,n,p,s);
a[0]=m;
b[0]=n;
c[0]=p;
d[0]=s;
do{
a[i+1]=(40+30+b[i]+c[i])/4;
b[i+1]=(20+30+a[i+1]+d[i])/4;
c[i+1]=(10+15+a[i+1]+d[i])/4;
d[i+1]=(10+5+c[i+1]+b[i+1])/4;
i++;
}while(f(a[i+1],a[i],z)0.000001f(b[i+1],b[i],z)0.000001
f(c[i+1],c[i],z)0.000001f(d[i+1],d[i],z)0.000001);
printf("a[i]=%9.6f,b[i]=%9.6f,c[i]=%9.6f,d[i]=%9.6f",a[i],b[i],c[i],d[i]);
}
首先你的if关键词打错了,但这是小事。最重要的是你在最后一行不能加取地址符“”。我这个能达到你的要求。
把两个子函数都写主函数里头吧!你这样写a、b、c、d都没有传参,害我找了半天。
#includestdio.h
#includemath.h
int
a,b,c,d;
//a、b、c、d为系数
void
main()
{
int
k=0;
//计数变量
float
X0,X1,f,f1;
int
a,b,c,d;
printf("提示:函数f(x)=a*x^3+b*x^2+c*x+d\n");
printf("请输入系数:a,b,c,d的值:\n");
scanf("%d%d%d%d",a,b,c,d);
printf("请输入初始近似值X0:\n");
scanf("%f",X1);
printf("---------------\n");
printf("敛散情况:\n");
printf("k:\tXk:\n");
printf("k=%d\tX%d=%f\n",k,k,X1);
do
{
k++;
X0=X1;
f=((a*X0+b)*X0+c)*X0+d;
f1=(3*a*X0+2*b)*X0+c;
X1=X0-f/f1;
printf("k=%d\tX%d=%f\n",k,k,X1);
}
while(fabs(X1-X0)
=0.00001);
printf("--------------------------\n");
printf("迭代的次数为:%d\n",k);
}
迭代法,是一种不断用变量的旧值递推新值的过程。
fun函数设置循环,当x0-x1的绝对值小于0.000001循环结束。
#include
stdio.h
#include
math.h
float
fun()
{float
x,n=0.0,root;
while(root=0.000001||root=-0.000001)
{
x=n;
n=cos(x);
root=x-n;
}
root=n;
return
root
;
}
void
main()
{
float
f=fun();
printf("root=%f\n",f);
}
while 和do while是不同地
第二个改成
#include math.h
#include stdio.h
main()
{float x,t,c;
int a;
scanf("%d",a);
x=1;
t=x;x=(1.0/2)*(x+a/x);c=x-t;
while(fabs(c)/x1e-5)
{
t=x;x=(1.0/2)*(x+a/x);c=x-t;
}
printf("%f",x);
getch();
}
才会等价于第一个程序