編寫一函式實現用牛頓迭代法求方程ax3 bx2 cx d

2022-03-04 20:34:38 字數 3541 閱讀 4921

1樓:袁怡圃

建立m檔案:

function [result ,k] = newton(fun,x0,e)

% 呼叫形式:

% [x k] = newton(fun,x0,e)

% 功能:

% 用差商求導的牛頓法求解一元非線性方程的根

% 輸入:

% -- fun 字串,f(x)的表示式,以x作為自變數,以字串形式輸入

% -- x0 標量,求解的起始點

% -- e 標量,精度要求

% 輸出:

% -- x 標量,所求得的解

% -- k 標量,求解過程的迭代次數

% 袁怡圃,2003/4/3

m = x0;

h=0.000001;

f=inline(fun,'x');

k=0;

f0=feval(f,m);

f2=feval(f,m+h);

f1=feval(f,m-h);

n=m-2*h*f0/(f2-f1);

while abs(1-m/n)>e

m=n;

f0=feval(f,m);

f2=feval(f,m+h);

f1=feval(f,m-h);

n=m-2*h*f0/(f2-f1);

k=k+1;

if k>999

break

endend

if k==1000

disp('沒找到方程的根!');

result = 'zero';

else

result = n;

end在命令視窗輸入:

fun = '2*x^3+x^2-3*x+4=0';

x0 = 1;

[result ,k] = newton(fun,x0,0.00001)

2樓:匿名使用者

用matlab,具體程式設計我忘了

c++用牛頓迭代法求根。方程為ax^3+bx^2+cx+d=0。係數a,b,c,d由主函式輸入,求x在1附近的1個實根。

3樓:匿名使用者

牛頓迭代法的基本原理是,給定一個初始x0,做一條垂線與函式f(x)相交,得到的交點為(x0,y0),過該點在f(x)上作一條切線,得到該切線與x軸的交點為(x1, 0)。之後對(x1, 0)重複上述步驟,直到與x軸的交點的橫座標xn逐漸收斂到f(x)=0的根。也就是對於第i+1次迭代(i>=0),有下列等式

再來看**,

double x=1,x0,f,f1;

do  while(fabs(x-x0)>1e-5);

其中f=((a*x0+b)*x0+c)*x0+d;

是用來求f在第i+1次迭代時的,在xi處的值,這裡f(x)是一個3次多項式,即

f1=(3*a*x0+2*b)*x0+c;

f1是用來求第i+1次迭代時,f在xi處的導數,而f在x處的導數為而迴圈結束一般是誤差在某個範圍內,就認為得到解了,所以是while(fabs(x-x0)>1e-5);

利用函式完成用牛頓迭代法求根。方程為ax3+bx2+cx+d=0,

4樓:匿名使用者

#include

#include

double value(double a,double b,double c,double d,double x)

double daovalue(double a,double b,double c,double d,double x)

int main()

printf("%lf\n",x1);

return 0;

} 你看看這個程式合你的意不?

利用函式完成用牛頓迭代法求根。方程為ax3+bx2+cx+d=0,係數a、b、c、d的值依次為1,2,3,4,

5樓:匿名使用者

同學,你的a b c是區域性變數,它的值只能在main函式裡面用

double f1(int a,int b,int c,int d,double x),同理f2。

用牛頓迭代法求ax³+bx²+cx+d=0的根。abcd依次為1234由主函式輸入。

6樓:環恢儷萄

1 #include

2 #include

3 using namespace std;

4 5 double static a,b,c,d;

6 7 double f(double x)8 11 double df(double x)12 15 int main()

16 能找根自再完善判斷迭代收斂性否根等內容

用牛頓迭代法求ax3+bx 2 +cx+d=0根

7樓:

可令f(x)=ax3+bx 2 +cx+d

可用excel列表試算,逐漸逼近方程的根。

x x^3 2x^2 3x f(x)

0 0 0 0 4

-2 -8 8 -6 -2

-1 -1 2 -3 2

-1.5 -3.375 4.5 -4.5 0.625

-1.75 -5.35938 6.125 -5.25 -0.48438

-1.625 -4.29102 5.28125 -4.875 0.115234

-1.68 -4.74163 5.6448 -5.04 -0.13683

-1.65 -4.49213 5.445 -4.95 0.002875

-1.655 -4.53309 5.47805 -4.965 -0.02004

-1.651 -4.5003 5.451602 -4.953 -0.0017

-1.6505 -4.49621 5.448301 -4.9515 0.000591

用牛頓迭代法求ax^3+bx^2 +cx+d=0的根

8樓:匿名使用者

牛頓迭代法的基本原理是,給定一個初始x0,做一條垂線與函式f(x)相交,得到的交點為(x0,y0),過該點在f(x)上作一條切線,得到該切線與x軸的交點為(x1, 0)。之後對(x1, 0)重複上述步驟,直到與x軸的交點的橫座標xn逐漸收斂到f(x)=0的根。也就是對於第i+1次迭代(i>=0),有下列等式

編寫自定義函式stringLower 實現將字串中所

這是個c語言 當然c 也可以這樣寫的。include void stringlower char int main void stringlower char s 這個是結果 望採納,謝謝。設計函式實現將一個字串中小寫字母轉化為大寫字母。c語言題目 include include void fun ...

編寫函式SUM實現求1 2 3 100的求和,結果在MAIN函式中輸出

include int main int sum include int sum return s void main printf the result is d 1 100 2 100 include intsum return sum int main void 編寫一個函式計算n!在主函式中...

編寫遞迴函式函式逆序輸出正整數,編寫一個遞迴函式函式逆序輸出一個正整數

實現指定 bai功能的遞迴函du數如下,呼叫時zhi只要使用daoreverse n 就可以得到自然專數n的逆序數輸出。屬void reverse int n void reverse int t 編寫遞迴函式將一個整數逆序輸出,求c程式 可以參考下面的 include void printdata...