牛頓法求高次方程的根, C語言)牛頓迭代法求方程的根

2022-03-01 23:10:32 字數 3770 閱讀 7065

1樓:丘冷萱

|x1-x0|是絕對誤差,除以x0後為相對誤差。用相對誤差的話,程式的通用性更好,比如有些題,可能根本身就是很小的數,如0.0001,這時如果你算出0.

0002,從絕對誤差角度看挺接近了,但如果看相對誤差,這個結果並不好。

希望可以幫到你,不明白可以追問,如果解決了問題,請點下面的"選為滿意回答"按鈕,謝謝。

2樓:小雪

option explicit

dim a(1 to 8) as double '係數

dim tpr as double, ppr as double '係數

private sub form_load()

a(1) = 1: a(2) = 1

a(3) = 1: a(4) = 1

a(5) = 1: a(6) = 1

a(7) = 1: a(8) = 1

tpr = 1: ppr = 1

end sub

'eps是精度,x0是初始值,x是根

private sub newton(byval x0 as double, x as double, byval eps as double)

dim y1 as double, y2 as double

doy1 = x + (a(1) + a(2) / tpr + a(3) / tpr ^ 3) * x ^ 2 + (a(4) + a(5) / tpr) * x ^ 3 + (a(5) * a(6) / tpr) * x ^ 5 + (a(7) * x ^ 3 * (1 + a(8) * x ^ 2) * exp(-a(8) * x ^ 2) / tpr ^ 3) - 0.27 * ppr / tpr

y2 = 1 + (a(1) + a(2) / tpr + a(3) / tpr ^ 3) * 2 * x + (a(4) + a(5) / tpr) * 3 * x ^ 2 + (a(5) * a(6) / tpr) * 6 * x ^ 5 + (3 * x ^ 2 + 5 * x ^ 4 * a(8)) * exp(-a(8) * x ^ 2) * a(7) / tpr ^ 3 + (-a(8)) * 2 * x * (x ^ 3 + a(8) * x ^ 5) * exp(-a(8) * x ^ 2) * a(7) / tpr ^ 3

x = x0 - y1 / y2

if abs(x - x0) < eps then exit do

x0 = x

loop

end sub

private sub command1_click()

dim root as double '初始值x0, 不是隨便選擇的

call newton(3, root, 0.001)

msgbox root

end sub

c語言程式設計——內容:用牛頓迭代法求一元三次方程的根。要求:由主函式呼叫求根子函式,謝謝各位了

3樓:匿名使用者

牛頓迭代法

牛頓迭代法又稱牛頓切線法,它採用以下方法求根:先任意設定一個與真實的根接近的值x0作為第一個近似根,由x0求出f(x0),過(x0,f(x0))點做f(x)的切線,交x軸於x1,把它作為第二次近似根,再由x1求出f(x1),再過(x1,f(x1))點做f(x)的切線,交x軸於x2,再求出f(x2),再作切線……如此繼續下去,直到足夠接近真正的x為止。

其中f'(x0)是函式在x0處的斜率,也就是在x0處的導數。

**如下:

#include

#include

float f(float a,float b,float c,float d,float x)

float f1(float a,float b,float c,float x)

float root(float a,float b,float c,float d)

while(fabs(x1-x0)>=1e-6);

return x0;

}void main()

(c語言)牛頓迭代法求方程的根

4樓:匿名使用者

#include

#include

/******start******/

double resolve( double,double,double,double );

/******end******/

int main()

/******start******/

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

double f1(double a,double b,double c,double x)

double resolve( double a,double b,double c,double d )

while( e >= 1e-5 );

return x1 ;

}/******end******/

c語言 用牛頓迭代法求方程的根,並且輸出迭代的次數

5樓:素

#include

#include

void main()

while(fabs(x1-x0)>=1e-5);

printf("the time is d%\n",i,);

printf("附近的根是:%5.2f\n",x1);

c++編寫程式用牛頓迭代法求一元方程5x^3—3x^2+2x—8=0 在x=1.1附近的根要求的精

6樓:

#include "iostream"

#include "math.h"

using namespace std;

typedef double (*func) (double);

double y(double x)

double dy(double x)

double newton(double x, func fy, func fdy)  while  (fabs(x-x0) > 1e-6);

return x0;

}int main()

用牛頓迭代法求方程x³-3x-1=0在x=2附近的實根,迭代三次

7樓:匿名使用者

public class newton

private static double d(double x)public static double root()return x;

}public static void main(string args)}

c語言程式設計中用牛頓迭代法求解方程

8樓:匿名使用者

#include

#include

int main()

while(fabs(x1-x)<=1e-5);

printf("%8.7f\n",x1); printf("%d\n",count);

return 0;

}//2x3-4x2+3x-6

改了初始值,檢視結果,表明:改變初始值得到的結果並不一樣,但是迭代的次數並沒有改變!!

9樓:匿名使用者

#includefloat solution(float x)while(fabs(y)<0.001);return x;}void main()

如何用牛頓迭代法求非線性方程組的解VB程式x

牛頓迭代法求方程的根 n 0 double x 1.2 初值 double 牛頓迭代法解方程組的解 x0為迭代的初值,n為迭代次數,jingdu為精度 牛頓迭代法求解非線性方程組 matlab 200 g inline 9 y 2 24 y 13 gy inline 18 y 24 a 2 e1 0...

c語言求方程ax2 bx c 0的根,用函式分別求當b

感覺沒錯啊,除了那個double讀入要用 lf,輸出要用 f,其他我沒發現有什麼錯 c語言 程式設計 求方程ax2 bx c 0的根,用三個函式分別求當b2 4ac大於0 等於0和小於0時的根,並輸出結果。條件語句不對,最後一個else if改為else,而且else後邊沒條件。關於判斷a是否為專0...

用C語言輸入一元二次方程的係數a,b,c,採用二分法求方程的根,精確到小數點後2位(即誤差0。01)

以下是二分法求已知區間的根,自己將其修改一下,增加一個區間確定就可以了 include include double f double a,double b,double c,double x 求函式值 int main doelse v x while fabs fm 1e 2 這裡還可以在條件中...