迭代法就是讓方程的解不斷去逼近真實(shí)的解。這是一種數(shù)值計(jì)算方法。思路就是按上面的步驟,只設(shè)置兩個(gè)x0,x1開始x0代表第一個(gè)值,x1代表第二值第一次迭代之后,讓x0=x1,x1=新的值,這樣x0代表第二個(gè)值,x1代表第三值以此類推。。。直到誤差滿足要求
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、濱海新區(qū)網(wǎng)站維護(hù)、網(wǎng)站推廣。
main()
{double
x1,x2;
x1=0.0;
x2=cos(x1);
while(fabs(x2-x1)le-6)//當(dāng)誤差大于10的負(fù)六次方循環(huán)。
{x1=x2;
x2=cos(x1);
}
printf("x=%f\n",x2);
}
牛頓迭代法,是用于求方程或方程組近似根的一種常用的算法設(shè)計(jì)方法。設(shè)方程為f(x)=0,用某種數(shù)學(xué)方法導(dǎo)出等價(jià)的形式
x(n+1)
=
g(x(n))
=
x(n)–f(x(n))/f‘(x(n)).然后按以下步驟執(zhí)行:
(1)
選一個(gè)方程的近似根,賦給變量x1;
(2)
將x0的值保存于變量x1,然后計(jì)算g(x1),并將結(jié)果存于變量x0;
(3)
當(dāng)x0與x1的差的絕對值還小于指定的精度要求時(shí),重復(fù)步驟(2)的計(jì)算。
若方程有根,并且用上述方法計(jì)算出來的近似根序列收斂,則按上述方法求得的x0就
認(rèn)為是方程的根。
#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關(guān)鍵詞打錯了,但這是小事。最重要的是你在最后一行不能加取地址符“”。我這個(gè)能達(dá)到你的要求。
把兩個(gè)子函數(shù)都寫主函數(shù)里頭吧!你這樣寫a、b、c、d都沒有傳參,害我找了半天。
#includestdio.h
#includemath.h
int
a,b,c,d;
//a、b、c、d為系數(shù)
void
main()
{
int
k=0;
//計(jì)數(shù)變量
float
X0,X1,f,f1;
int
a,b,c,d;
printf("提示:函數(shù)f(x)=a*x^3+b*x^2+c*x+d\n");
printf("請輸入系數(shù):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("迭代的次數(shù)為:%d\n",k);
}
迭代法,是一種不斷用變量的舊值遞推新值的過程。
fun函數(shù)設(shè)置循環(huán),當(dāng)x0-x1的絕對值小于0.000001循環(huán)結(jié)束。
#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是不同地
第二個(gè)改成
#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();
}
才會等價(jià)于第一個(gè)程序