問題. 牛頓迭代法求ax^3+bx^2+cx+d=0在1附近的根。(系數由用戶自己輸入)
因為此方法本身是數學問題這里不做討論也無須討論。進入我們編程的主題。
記住此法核心的公式:x = x0-f(x0)/f'(x0). 我們令x1=f(x0),x2=f'(x0),這樣寫起來簡潔明了。
步驟: (1 ) 在1附近任意找一個實數作為x0的初始值,如此題,我們取x=1,讓x0=x,即x0=1.
(2) 用初始值x0帶入方程計算出f(x0)和f'(x0).即求出x1和x2;
(3) 帶入上述核心公式計算出x = x0-f(x0)/f'(x0)的值。
(4) 用新產生的x替換原來的x0,為下一次迭代做準備。
(5) 若|x-x0|>=1e-5;則繼續上述迭代,否則轉(6).
(6) 所得x即為多遠方程ax^3+bx^2+cx+d=0的根,輸出。
代碼如下:(經過VS2008測驗無誤 測驗輸入1,2,3,4 輸出:-1.65)
#include<stdio.h>
#include<math.h>
double getRes(double a,double b,double c,double d){
doublex=1,x0,x1,x2;
do{
x0=x;
x1=a*x*x*x+b*x*x+c*x+d;
x2=3*a*x*x+2*b*x+c;
x=x0-x1/x2;
}while(fabs(x-x0)>=1e-5);
return x;
}
int main(){
doublea,b,c,d;
scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);
printf("x=%.2lf\n",getRes(a,b,c,d));
return 0;
}
uj5u.com熱心網友回復:
百度搜相關關鍵字。uj5u.com熱心網友回復:
應該會有四個解吧uj5u.com熱心網友回復:
<br />三個,說錯了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/60214.html
標籤:C語言
