『壹』 牛頓迭代法的c語言代碼
doublefunc(doublex)//函數{returnx*x*x*x-3*x*x*x+1.5*x*x-4.0;}doublefunc1(doublex)//導函數{return4*x*x*x-9*x*x+3*x;}intNewton(double*x,doubleprecision,intmaxcyc)//迭代次數{doublex1,x0;intk;x0=*x;for(k=0;k<maxcyc;k++){if(func1(x0)==0.0)//若通過初值,函數返回值為0{printf(迭代過程中導數為0! );return0;}x1=x0-func(x0)/func1(x0);//進行牛頓迭代計算if(fabs(x1-x0)<precision||fabs(func(x1))<precision)//達到結束條件{*x=x1;//返回結果return1;}else//未達到結束條件x0=x1;//准備下一次迭代}printf(迭代次數超過預期! );//迭代次數達到,仍沒有達到精度return0;}intmain(){doublex,precision;intmaxcyc;printf(輸入初始迭代值x0:);scanf(%lf,&x);printf(輸入最大迭代次數:);scanf(%d,&maxcyc);printf(迭代要求的精度:);scanf(%lf,&precision);if(Newton(&x,precision,maxcyc)==1)//若函數返回值為1printf(該值附近的根為:%lf ,x);else//若函數返回值為0printf(迭代失敗! );getch();return0;}
『貳』 C語言編程中,牛頓迭代法是什麼
牛頓迭代法是一種常用的計算方法,這個大學大三應該學過。
具體為:設r是f(x) = 0的根,選取x0作為r初始近似值,過點(x0,f(x0))做曲線y = f(x)的切線L,L的方程為y = f(x0)+f'(x0)(x-x0),求出L與x軸交點的橫坐標 x1 = x0-f(x0)/f'(x0),稱x1為r的一次近似值。過點(x1,f(x1))做曲線y = f(x)的切線,並求該切線與x軸交點的橫坐標 x2 = x1-f(x1)/f'(x1),稱x2為r的二次近似值。重復以上過程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),稱為r的n+1次近似值,上式稱為牛頓迭代公式。
你把這段文字認真仔細慢慢讀一遍,把給的方程式寫出來,然後照這個在紙上畫出圖形,就會明白牛頓迭代法的概要了。
你講的xopint?root?float?這些都是自己定義的函數。float是c語言中定義浮點型變數的寫法。
#include <iostream>
#include <math.h>
void main()
{
float f(float);
float xpoint(float,float);
float root(float,float);
float x,x1,x2,f1,f2;
do
{
printf("輸入x1,x2\n\n");
scanf("%f%f",&x1,&x2);
f1=f(x1);
f2=f(x2);
}while(f1*f2>0);
x=root(x1,x2);
printf("方程在1.5附近的根為:%f\n\n",x);
}
float f(float x)//定義一個f函數,返回值y
{
float y;
y=2*x*x*x-4*x*x+3*x-6;
return(y);
}
float xpoint(float x1,float x2)//定義一個帶返回值的函數即y,也就是求y的函數,main()中調用
{
float y;
y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return(y);
}
float root(float x1,float x2)//這也是定義一個函數,是求根的函數,利用了上面自己定義的函數
{
float x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if(y*y1>0)
{
y1=y;
x1=x;
}
else
x2=x;
}while(fabs(y)>1e-4);
return(x);
}
建議你看看c 語言教程,上面講得很詳細噢。