導航:首頁 > 計算方法 > 數值計算方法牛頓法解方程例題

數值計算方法牛頓法解方程例題

發布時間:2022-07-02 22:23:49

Ⅰ 數學牛頓迭代法的例子

牛頓迭代公式編輯
設r是

的根,選取

作為r的初始近似值,過點

做曲線

的切線L,L的方程為

,求出L與x軸交點的橫坐標

,稱x1為r的一次近似值。過點

做曲線

的切線,並求該切線與x軸交點的橫坐標

,稱

為r的二次近似值。重復以上過程,得r的近似值序列,其中,

稱為r的

次近似值,上式稱為牛頓迭代公式。
用牛頓迭代法解非線性方程,是把非線性方程

線性化的一種近似方法。把

在點

的某鄰域內展開成泰勒級數

,取其線性部分(即泰勒展開的前兩項),並令其等於0,即

,以此作為非線性方程

的近似方程,若

,則其解為

, 這樣,得到牛頓迭代法的一個迭代關系式:


已經證明,如果是連續的,並且待求的零點是孤立的,那麼在零點周圍存在一個區域,只要初始值位於這個鄰近區域內,那麼牛頓法必定收斂。 並且,如果不為0, 那麼牛頓法將具有平方收斂的性能. 粗略的說,這意味著每迭代一次,牛頓法結果的有效數字將增加一倍。[1]
軍人在進攻時常採用交替掩護進攻的方式,若在數軸上的點表示A,B兩人的位置,規定在前面的數大於後面的數,則是A>B,B>A交替出現。但現在假設軍中有一個膽小鬼,同時大家又都很照顧他,每次沖鋒都是讓他跟在後面,每當前面的人占據一個新的位置,就把位置交給他,然後其他人再往前佔領新的位置。也就是A始終在B的前面,A向前邁進,B跟上,A把自己的位置交給B(即執行B = A),然後A 再前進佔領新的位置,B再跟上,直到佔領所有的陣地,前進結束。像這種兩個數一前一後逐步向某個位置逼近的方法稱為迭代法。
迭代法也稱輾轉法,是一種不斷用變數的舊值遞推新值的過程,跟迭代法相對應的是直接法(或者稱為一次解法),即一次性解決問題。迭代演算法是用計算機解決問題的一種基本方法。它利用計算機運算速度快、適合做重復性操作的特點,讓計算機對一組指令(或一定步驟)重復執行,在每次執行這組指令(或這些步驟)時,都從變數的原值推出它的一個新值。
利用迭代演算法解決問題,需要做好以下三個方面的工作:
一、確定迭代變數
在可以用迭代演算法解決的問題中,至少存在一個可直接或間接地不斷由舊值遞推出新值的變數,這個變數就是迭代變數。
二、建立迭代關系式
所謂迭代關系式,指如何從變數的前一個值推出其下一個值的公式(或關系)。迭代關系式的建立是解決迭代問題的關鍵,通常可以使用遞推或倒推的方法來完成。
三、對迭代過程進行控制
什麼時候結束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地執行下去。迭代過程的控制通常可分為兩種情況:一種是所需的迭代次數是個確定的值,可以計算出來;另一種是所需的迭代次數無法確定。對於前一種情況,可以構建一個固定次數的循環來實現對迭代過程的控制;對於後一種情況,需要進一步分析得出可用來結束迭代過程的條件。

Ⅱ 數值計算方法上機題編程,,,用c語言編程序,用牛頓迭代法求18的倒數,精度為0.0005,求大神解

用牛頓迭代法求方程(2*(X-4)+3)X-6=0的根。
其迭代公式為X2=X1-F(X1)/F'(X1)
F'(X1)為對方程求導。本題中P'(X1)=(6*x1-8)*x1-3;
編譯顯示正確,但一運行就死機,我已經死了3次了。(一開始還以為電腦的問題)
#include<iostream.h>
#include<math.h>
void main(void)
{float x1,x2=100;
do
{x1=x2;
x2=(float)x1-(((2*x1-4)*x1+3)*x1-6)/((6*x1-8)*x1-3);
}while(fabs(x2-x1)>pow(10,-5));
cout<<x2;
}

Ⅲ 牛頓法解方程

如果尋找方程f(x)=0的零點t,假定f二階可導,那麼在t附近的點u有
0=f(t)=f(u)+f'(u)(t-u)+f''(x)(t-u)^2
略去二階小量得
f(u)+f'(u)(t-u)=0
於是
t=u-f(u)/f'(u)

但是實際上因為f不一定是線性的,不可以忽略略去二階小量的影響,所以上述過程就要迭代地進行
f(x_{n+1})=x_n-f(x_n)/f'(x_n)
並且這個迭代具有(局部)二次收斂性。

就寫這些,教材上一般都會有的,你自己去看看。

Ⅳ 用牛頓法求下列方程,要求精度為10∧-5

這個沒有解析解,只能用數值方法解。
令f(x)=X^5+X^4+X^3+X^2+X-1,則f(0)=-10,可見在(0,1)中有一解,取中點0.5,f(0.5)=-0.03,如果滿足精度要求的話取x=0.5即可,否則繼續二分。在(0.5,1)中有一解,取中點0.75,f(0.75)>0,繼續去(0.5,0.75)的。

Ⅳ 用牛頓迭代法解方程X^5-2X^4+X-3=0,,結果保留兩位小數

先根據函數f(x)判斷根所在的區間
f(x)=x^5-2x^4+x-3
f'(x)=5x^4-8x^3+1
設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的一次近似值,如果|f(x1)-0|小於指定的精度,那麼繼續過點(x1,f(x1))做曲線y=f(x)的切線,並求該切線與x軸的橫坐標
x2=x1-f(x1)/f'(x1)稱x2為r的二次近似值,重復以上過程。得r的近似值序列{Xn},其中Xn
1=Xn-f(Xn)/f'(Xn),稱為r的n
1次近似值。

Ⅵ 求解一道matlab題,選了數值分析,結果悲慘的發現自己不會用matlab

clear,clc
%% 求ln(x+sinx)=0的根。初值x0分別取0.1, 1,1.5, 2, 4進行計算
eq1 = @(x) log(x+sin(x));
x10 = [.1,1.5,2,4];
[x1,val1,flag1] = arrayfun(@(i)newton(eq1,x10(i)),1:length(x10));%未加速
[x1s,val1s,flag1s] = arrayfun(@(i)newton(eq1,x10(i),1),1:length(x10));%加速

%% 求sinx=0的根。初值x0分別取1,1.4,1.6, 1.8,3進行計算
eq2 = @(x) sin(x);
x20 = [1,1.4,1.6,1.8,3];
[x2,val2,flag2] = arrayfun(@(i)newton(eq2,x20(i)),1:length(x20));%未加速
[x2s,val2s,flag2s] = arrayfun(@(i)newton(eq2,x20(i),1),1:length(x20));%加速

以上程序要用到的newton函數如下,已經幫你集成了Steffensen加速法,具體用法函數里邊寫得很清楚,自己復制粘貼到m文件保存,m文件命名為newton.m,放在同一路徑下方可使用
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [x,val,exitflag] = newton(eq,x0,steff,tol,mindx,maxiter)
%牛頓法解方程
%[x,val,exitflag] = newton(eq,x0,steff,tol,mindx,maxiter)
%x為方程的解;
%val為上述x帶入eq的值;
%exitflag為1,求解成功;exitflag為0,達到最大迭代次數未收斂;
%exitflag為-1,步長達到最小未收斂;
%eq:函數句柄;
%x0:初值,默認為0到1隨機;
%steff為加速參數,非負則加速。默認不加速;
%tol:容差,默認1e-10;
%mindx:最小迭代步長,默認1e-8;
%maxiter:最大迭代數目,默認1e4;
%例如 x = newton(@(x)log(x+sin(x)),1) 得到 x = 0.5110;
%14-Nov-2011 11:39:48,by JJBNJZ

if ~isa(eq,'function_handle')
error('我擦,要我說幾遍你才知道要用函數句柄啊')
end

if nargin < 6
maxiter = 1e4;
if nargin < 5
mindx= 1e-8;
if nargin < 4
tol= 1e-10;
if nargin < 3
steff = -1;
if nargin < 2
warning('初值都沒給,那從0到1之間隨便選了啊')
x0 = rand;
end
end
end
end
end

x = x0;
val = eq(x0);
exitflag = 1;
eval(['df =@(x)' char(diff(eq(sym('x')))),';']);

if abs(val) <= tol
disp('你給的初值就是解,還算個毛啊,再見')
return
end

if steff <= 0
for iter = 1 : maxiter
val = eq(x);
dval = df(x);
xnew = x - val/dval;
val = eq(xnew);
if abs(val) < tol
x = xnew;
return
end
if abs(x-xnew) < mindx
exitflag = -1;
disp(['迭代步長已經小於設定的最小步長(默認1e-8),',...
'而表達式的值沒有小於給定容差(默認1e-10)'])
x = xnew;
return
end
x = xnew;
end
else
st=@(x)x - eq(x)/df(x);
for iter = 1 : maxiter
xnew = x - (st(x)-x)^2 / (st(st(x)) -2*st(x) + x);
val = eq(xnew);
if abs(val) < tol
x = xnew;
return
end
if abs(x-xnew) < mindx
exitflag = -1;
disp(['迭代步長已經小於設定的最小步長(默認1e-8),',...
'而表達式的值沒有小於給定容差(默認1e-10)'])
x = xnew;
return
end
x = xnew;
end
end
disp('因達到最大迭代次數而終止,求解失敗;解決方法,要麼增大容差(精度下降),要麼增大迭代次數(變慢)')
exitflag = 0;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
問題分析什麼的就自己寫吧,無非是些:「解方程,初值是關鍵」,「自從我用了Steffensen的加速方法後,嘿,還別說,還真對得起咱這張臉,從前不收臉的也收臉了,收臉的速度的也快了」,「牛頓法求解方程得到的解和初值間的距離居然和初值的導數值有關,導數值越小的初值解出來離初值越遠,怎麼回事呢?自己看書吧」,「不管怎麼說,steffensen還是收斂的比較好的,相比沒有他,我們離初值更近了╮(╯_╰)╭」

Ⅶ 牛頓迭代法解高次方程詳細過程誰能舉一個簡單易懂的例子啊

設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次近似值,上式稱為牛頓迭代公式。

解非線性方程f(x)=0的牛頓法是把非線性方程線性化的一種近似方法。把f(x)在x0點附近展開成泰勒級數 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其線性部分,作為非線性方程f(x) = 0的近似方程,即泰勒展開的前兩項,則有f(x0)+f'(x0)(x-x0)=f(x)=0 設f'(x0)≠0則其解為x1=x0-f(x0)/f'(x0) 這樣,得到牛頓法的一個迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。

Ⅷ 牛頓法解方程如何選初值,看一下這道題

hbj

Ⅸ 牛頓法求方程的根,牛頓法求x的3次方-2x-5=0在[0,3]的根

先粗略畫一下f(x)=x的3次方-2x-5的圖像,其與x軸的交點在x=2附近.

然後用牛頓法逼近,請看下面,點擊放大:

Ⅹ 如何用牛頓迭代法求解方程

牛頓迭代法(Newton's method)又稱為牛頓-拉夫遜方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和復數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函數f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) = 0的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復根。另外該方法廣泛用於計算機編程中。

設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次近似值,上式稱為牛頓迭代公式。

解非線性方程f(x)=0的牛頓法是把非線性方程線性化的一種近似方法。把f(x)在x0點附近展開成泰勒級數 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其線性部分,作為非線性方程f(x) = 0的近似方程,即泰勒展開的前兩項,則有f(x0)+f'(x0)(x-x0)=f(x)=0 設f'(x0)≠0則其解為x1=x0-f(x0)/f'(x0) 這樣,得到牛頓法的一個迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。

閱讀全文

與數值計算方法牛頓法解方程例題相關的資料

熱點內容
馬原中歸納的方法有什麼局限性 瀏覽:509
燈具遙控安裝方法 瀏覽:985
在家地震預警有哪些方法論 瀏覽:399
氣缸圓柱度的檢測方法 瀏覽:215
東風制動燈故障原因和解決方法 瀏覽:309
簡諧運動研究方法 瀏覽:124
幼兒異物吸入的搶救方法有哪些 瀏覽:211
開衫毛衣尺寸的經典計算方法 瀏覽:356
廣電有線連接方法 瀏覽:828
局解血管的檢查常用方法 瀏覽:988
瑜伽的技巧和方法 瀏覽:835
寫出五種植物的傳播方法 瀏覽:100
治療脾氣差的最佳方法 瀏覽:814
花卉滿天星的種植方法 瀏覽:968
風控未通檢測方法 瀏覽:767
根管治療術的步驟和方法 瀏覽:180
去腳臭的簡單的方法 瀏覽:934
二年級語文教學方法和教學手段 瀏覽:69
學前教育研究方法課題 瀏覽:867
瑜伽胳膊鍛煉方法 瀏覽:124