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 這裡還可以在條件中...