版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 非線性方程根的數(shù)值求法(二)</p><p><b> 摘要</b></p><p> 在科學(xué)研究和工程設(shè)計中, 經(jīng)常會遇到的一大類問題是非線性方程</p><p> f(x)=0 </p><p> 的求根問題,其中f(x)為非線性函數(shù)。方程f
2、(x)=0的根, 亦稱為函數(shù)f(x)的零點。</p><p> 如果f(x)可以分解成 ,其中m為正整數(shù)且 ,則稱x*是f(x)的m重零點,或稱方程f(x)=0的m重根。當(dāng)m=1時稱x*為單根。若f(x)存在m階導(dǎo)數(shù),則是方程f(x)的m重根(m>1)當(dāng)且僅當(dāng)。</p><p> 當(dāng)f(x)不是x的線性函數(shù)時,稱對應(yīng)的函數(shù)方程為非線性方程。如果f(x)是多項式函數(shù),則稱為代
3、數(shù)方程,否則稱為超越方程(三角方程,指數(shù)、對數(shù)方程等)。一般稱n次多項式構(gòu)成的方程為n次代數(shù)方程,當(dāng)n>1時,方程顯然是非線性的。一般稍微復(fù)雜的3次以上的代數(shù)方程或超越方程,很難甚至無法求得精確解。此論文將介紹常用的求解非線性方程的近似根的幾種數(shù)值解法 。</p><p> 關(guān)鍵詞:非線性方程;數(shù)值解法;近似根 </p><p> THE NUMERICAL METHOD OF NON
4、LINEAR EQUATION (TWO)</p><p><b> ABSTRACT</b></p><p> In scientific research and engineering design, a large class of problems often encountered is a nonlinear equation</p>
5、<p><b> F (x) =0</b></p><p> The root problem, where f (x) is a nonlinear function.The equation f (x) =0 root, also known as a function of F (x) zero.</p><p> If f (x) can be
6、 decomposed into, where m is a positive integer and, then x* is called f (x) m zeros, or equation f (x) m =0. When m=1 x* is called single. If f (x) m derivative, is the equation f (x) m roots (m>1) if and only if.<
7、;/p><p> When f (x) is not a linear function of X, function equation is a nonlinear equation. If f (x) is a polynomial function, is called algebraic equations, otherwise known as the transcendental equation (t
8、rigonometric equation, exponential, logarithmic equation). The general said the N polynomial equation for n algebraic equation, when n > 1, the equation is nonlinear. Generally slightly complicated algebraic equation
9、3 times above or beyond the equation, it is difficult or even impossible to obtain </p><p> Key words: nonlinear equation; numerical solution; approximate root</p><p><b> 目 錄</b>&
10、lt;/p><p> 1 題目內(nèi)容………………..………………………………………………………………….1</p><p> 1.1 題目的復(fù)述……………………………………………………………………………1</p><p> 問題分析…………………………………………………………………………………...2</p><p> 2.1問題的分析…
11、……………..…………………………………………………………. .2</p><p> 3 算法描述…………………………………………………….…………………..………....3</p><p> 3.1 簡單迭代法……………………………………………………………………….…...3</p><p> 3.1.1 簡單迭代法的原理……………………………………………
12、……..………….3</p><p> 3.1.2 簡單迭代法的幾何解析………………………………………………………...3</p><p> 3.1.3 簡單迭代法的收斂依據(jù)………………………………………………………...3</p><p> 3.1.4 簡單迭代法收斂的條件………………………………………………………...3</p><p&
13、gt; 3.1.5 簡單迭代法的局部收斂性……………………………………………………..4</p><p> 3.1.6 簡單迭代法的收斂階…………………………………………………………...4</p><p> 3.2 牛頓迭代法……………………………………………………………………………4</p><p> 3.2.1 牛頓迭代法原理…………………………………
14、……………………………...4</p><p> 3.2.2 牛頓迭代法的幾何解析………………………………………………………...5</p><p> 3.2.3 牛頓迭代法的收斂性…………………………………………………………...5</p><p> 3.2.4 牛頓迭代法的收斂速度………………………………………………………..5</p>&l
15、t;p> 3.2.5 迭代過程的加速………………………………………………………………..6</p><p> 3.3 弦割法…………………………………………………………………………………6</p><p> 4 簡短源程序及有關(guān)運行結(jié)果……………………………………………………………...8</p><p> 參考文獻……………………………………………
16、………………………………….……..16</p><p> 附錄…………………………………………………………………………….……………..17</p><p><b> 1 題目內(nèi)容</b></p><p><b> 1.1 題目的復(fù)述</b></p><p> ?。?)用簡單迭代法求下列方程
17、的根,要求有6位有效數(shù)字, 改變初值的選取,對出現(xiàn)的情況進行總結(jié)分析;構(gòu)造收斂速度盡可能高的迭代法,并求根。</p><p> (2)用牛頓法求下列方程的根,要求有6位有效數(shù)字,</p><p><b> x=ctgx;</b></p><p> 改變初值的選取,對出現(xiàn)的情況進行總結(jié)分析;若要求方程的最小正根和在 附近的根,初值應(yīng)如何選
18、??? 并討論初值的變化對收斂的影響。</p><p> ?。?)探討用其它方法來求(1)和(2)中的非線性方程的根(如二分法、弦割法、拋物線法等)。</p><p> (4)上面計算結(jié)果精度可達10位以上有效數(shù)字嗎?說明實現(xiàn)過程,并舉例。</p><p><b> 問題分析</b></p><p><b>
19、 2.1問題的分析</b></p><p> 我們都會解一元一次方程和一元二次方程,三次以上方程就不會解了。事實上,三次和四次方程的求根公式很復(fù)雜,五次以上代數(shù)方程一般無求根公式,超越方程也只能求近似解。考察形式如下的方程:</p><p> 該方程是隱式的,也不能直接得出它的根,只能通過迭代法求出它的近似解。如果給出根的某個猜測值x0,將它代入方程式中,即可求得 。然后
20、又可以取 為猜測值,代入方程式中,如此反復(fù)迭代。如果按以下公式:</p><p> ,k=0,1,2,…</p><p> 確定的數(shù)列 有極限 = ,則稱方程迭代過程收斂。這時迭代值 顯然是方程的根。</p><p> 本次課題是用迭代法求非線性方程根。首先我們要理解迭代法求解非線性方程根的基本算法,確定迭代格式,如(1)中方程,構(gòu)造迭代格式為: 。然后按題目
21、要求,將相關(guān)求非線性方程迭代算法用c++語言實現(xiàn)編程,在程序運行中輸入初始值,求出方程根。最后用多種迭代法分別用不同的初始值進行求方程根,對得到的收斂速度和求根結(jié)果進行總結(jié)分析。</p><p><b> 3 算法描述</b></p><p><b> 3.1簡單迭代法</b></p><p> 3.1.1 簡單迭
22、代法的原理</p><p> 簡單迭代法的基本思想是:</p><p><b> 設(shè)方程</b></p><p><b> …(1)</b></p><p> 有解,把方程改寫為等價形式</p><p><b> …(2)</b></p&
23、gt;<p> 選定的初始值x0進行迭代:</p><p><b> …(3)</b></p><p> 得迭代序列。當(dāng)k 足夠大時,用xk作為f(x) = 0的近似解。這樣求解方程f(x)=0根近似值的方法稱為簡單迭代函數(shù),g(x)稱為迭代函數(shù);(3)式稱為迭代格式。</p><p> 3.1.2 簡單迭代法的幾何解析
24、</p><p> 求方程的根,在幾何上就是求直線y=x與曲線y=g(x)交點的橫坐標。</p><p> 3.1.3簡單迭代法的收斂依據(jù)</p><p> 定理 若 ,則 (設(shè)連續(xù))(即根)。</p><p> 3.1.4 簡單迭代法收斂的條件</p><p> 定理1(充分條件)若g (x)滿足如下條件
25、</p><p> x1, x2I, q (0, 1) 使得| g (x2)–g (x1)| q |x2 –x1| (Lipschitz條件);</p><p><b> ,</b></p><p> 則(1)存在唯一點使;(2),由(3)式得{xk}且。(3)。</p><p> 注(1)條件(1)可改為,;&
26、lt;/p><p> ?。?)可以近似代替。</p><p> 3.1.5 簡單迭代法的局部收斂性</p><p> 若,使對都收斂,則稱上迭代是局部收斂的。</p><p> 定理2 若在根的某個鄰域內(nèi)有連續(xù)導(dǎo)數(shù),且,則上迭代有局部收斂性。</p><p> 3.1.6 簡單迭代法的收斂階</p>
27、<p> 定義 設(shè)某迭代有局部收斂性,記ek=s–xk0, k=0, 1, …, 如果存在正實數(shù)r和c使成立,則稱該迭代是r階收斂的。r=1時又稱有線性收斂速度;r=2稱平方收斂。</p><p> 定理3 設(shè)I = [a, b],,,,s = g(s) I,g (k) (s)=0, k=1, 2,…, m–1, g (m) (s) 0,則對任何x0 I (x0 s),由迭代法產(chǎn)生的序列{x
28、k}以m階斂速收斂于s。</p><p><b> 3.2牛頓迭代法</b></p><p> 3.2.1牛頓迭代法原理</p><p> 設(shè)已知方程的近似根,則在附近可用一階泰勒多項式近似代替.因此, 方程可近似地表示為.用表示的根,它與的根差異不大.</p><p><b> 設(shè),由于滿足解得<
29、;/b></p><p> 重復(fù)這一過程,得到迭代格式</p><p> 這就是著名的牛頓迭代公式,它相應(yīng)的不動點方程為</p><p><b> .</b></p><p> 3.2.2牛頓迭代法的幾何解析</p><p> 在處作曲線的切線,切線方程為。令,可得切線與軸的交點坐
30、標,這就是牛頓法的迭代公式。因此,牛頓法又稱“切線法”。</p><p> 3.2.3牛頓迭代法的收斂性</p><p> 計算可得,設(shè)是的單根,有,則</p><p><b> ,</b></p><p> 故在附近,有.根據(jù)不動點原理知牛頓迭代法收斂.</p><p> 3.2.4牛
31、頓迭代法的收斂速度</p><p> 定理(牛頓法收斂定理) 設(shè)在區(qū)間上有二階連續(xù)導(dǎo)數(shù),且滿足,在上不變號, 在上不等于0,令</p><p> 有.則對任意,牛頓迭代格式收斂于在中的唯一實根,并且:</p><p><b> (1) </b></p><p><b> (2)</b>&l
32、t;/p><p> (3) ,牛頓迭代法為2階收斂.</p><p> 3.2.5迭代過程的加速</p><p> 對不動點方程,它導(dǎo)出的迭代過程有可能發(fā)散,也可能收斂得非常緩慢.這時,我們有沒有辦法改進不動點方程,讓迭代過程收斂得快一些呢?</p><p> (1)一個簡單的方法 注意到和都是不動點方程,他們的加權(quán)平均</p&g
33、t;<p> 也是不動點方程,而且與有完全相同的不動點.適當(dāng)選取的值,可以使發(fā)散的迭代過程變得收斂,使收斂慢的迭代過程變得收斂迅速.</p><p> (2)加速的原因 在下面的實驗中我們可以看到,在不動點附近的導(dǎo)數(shù)值在很大程度上決定了迭代過程的收斂性.的絕對值越小,收斂性越好.因此,選擇使得.計算得到理想的值為,相應(yīng)可計算出.</p><p> (3) 的選取
34、于理想的值為,當(dāng)變換不大時可以取近似計算.</p><p> (4)回到牛頓迭代法的討論 為求解方程,可以使用不動點方程,相應(yīng)的迭代函數(shù)為.對進行加速</p><p><b> ,</b></p><p> 所以,牛頓迭代法是對基本迭代格式進行加速的結(jié)果.</p><p><b> 3.3 弦割法&
35、lt;/b></p><p> 為了避免計算導(dǎo)數(shù),在牛頓迭代公式中,用差商 代替導(dǎo)數(shù) ,得: (n=0,1,2,…)該迭代格式被稱為弦割法。</p><p> 從幾何上看,式 實際上是由曲線上兩點( )和( )確定割線,該割線與 x 軸交點的橫坐標即為 ,故弦割法又稱為割線法。</p><p> 弦割法和牛頓迭代法都是線性化方法 , 牛頓迭代法在計算 時
36、只用到前一步的值 ,而弦割法用到前面兩步的結(jié)果 和 ,因此使用弦割法必須先給出兩個初始值 , 。</p><p> 4 簡短源程序及有關(guān)運行結(jié)果</p><p> ?。?)用簡單迭代法求下列方程的根,要求有6位有效數(shù)字,</p><p> 改變初值的選取,對出現(xiàn)的情況進行總結(jié)分析;構(gòu)造收斂速度盡可能高的迭代法,并求根。</p><p>
37、 該題的相關(guān)簡短源程序如下:</p><p> int main()</p><p><b> {</b></p><p> double x,y,m;</p><p> static int k=1;</p><p> cout<<"-----使用簡單迭代法求解
38、方程根-----"<<endl;</p><p> cout<<"請輸入x的初始值:";</p><p><b> cin>>x;</b></p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p>
39、<p><b> do{</b></p><p> y=pow(3.0*x,1.0/3.0);</p><p> m=fabs(y-x);</p><p><b> x=y;</b></p><p> cout<<k++<<" "&
40、lt;<setprecision(15)<<x<<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<&quo
41、t;最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> 當(dāng)用戶輸入初始值x:1.7時,運行結(jié)果如下:</p>
42、<p> -----使用簡單迭代法求解方程根-----</p><p> 請輸入x的初始值:1.7</p><p> 迭代過程及次數(shù)如下:</p><p> 1 1.72130062072632</p><p> 2 1.7284599726899</p><p> 3 1.7308530
43、3449863</p><p> 4 1.73165145780992</p><p> 5 1.73191768075058</p><p> 6 1.73200643082582</p><p> 7 1.73203601519486</p><p> 8 1.7320458767635<
44、/p><p> 9 1.73204916396553</p><p> 10 1.73205025970092</p><p> 11 1.73205062494621</p><p> 方程迭代次數(shù)為:11</p><p> 最后方程的根為(保六位有效數(shù)字):1.73205</p><
45、p> 當(dāng)用戶輸入初始值x:0.5時,運行結(jié)果如下:</p><p> -----使用簡單迭代法求解方程根-----</p><p> 請輸入x的初始值:0.5</p><p> 迭代過程及次數(shù)如下:</p><p> 1 1.14471424255333</p><p> 2 1.50871119
46、766953</p><p> 3 1.65415342871819</p><p> 4 1.70568572459999</p><p> 5 1.72321747379912</p><p> 6 1.72910134326378</p><p> 7 1.73106709420906<
47、/p><p> 8 1.73172284101854</p><p> 9 1.7319414784846</p><p> 10 1.73201436377398</p><p> 11 1.73203865955204</p><p> 12 1.73204675822047</p>
48、<p> 13 1.73204945778502</p><p> 14 1.73205035764081</p><p> 方程迭代次數(shù)為:14</p><p> 最后方程的根為(保六位有效數(shù)字):1.73205</p><p> 分析總結(jié):由以上的1.7和0.5的初始值改變選取,得知改變初始值的選取,簡單迭代法求得
49、方程的根是一樣的。但是不同初始值的選取,迭代次數(shù)是有區(qū)別的,初始值取1.7要比初始值0.5的迭代次數(shù)要少,也就是收斂迭代要快些??梢?,迭代收斂速度對初值極為敏感,我應(yīng)注意對初值的選取,這對我們的迭代結(jié)果非常重要。</p><p> 為了加快迭代收斂速度,我們構(gòu)造收斂速度更快些的牛頓迭代法,相應(yīng)的簡短源程序如下:</p><p> int main()</p><p&
50、gt;<b> {</b></p><p> double x,y,m;</p><p> static int k=1;</p><p> cout<<"-----從簡單迭代改用牛頓迭代-----"<<endl;</p><p> cout<<"
51、;請輸入x的初始值:";</p><p><b> cin>>x;</b></p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> y=(x*x+3)/
52、(2*x);</p><p> m=fabs(y-x);</p><p><b> x=y;</b></p><p> cout<<k++<<" "<<setprecision(15)<<x<<endl;</p><p> }whi
53、le(m>1e-6);</p><p><b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x<<endl;&l
54、t;/p><p><b> return 0;</b></p><p><b> }</b></p><p> 當(dāng)用戶輸入初始值x:1.7時,運行結(jié)果如下:</p><p> -----從簡單迭代改用牛頓迭代-----</p><p> 請輸入x的初始值:1.7<
55、/p><p> 迭代過程及次數(shù)如下:</p><p> 1 1.73235294117647</p><p> 2 1.73205083391591</p><p> 3 1.73205080756888</p><p><b> 方程迭代次數(shù)為:3</b></p>&l
56、t;p> 最后方程的根為(保六位有效數(shù)字):1.73205</p><p> 當(dāng)用戶輸入初始值x:0.5時,運行結(jié)果如下:</p><p> -----從簡單迭代改用牛頓迭代-----</p><p> 請輸入x的初始值:0.5</p><p> 迭代過程及次數(shù)如下:</p><p><b>
57、 1 3.25</b></p><p> 2 2.08653846153846</p><p> 3 1.76216323998582</p><p> 4 1.73230809320663</p><p> 5 1.73205082667515</p><p> 6 1.73205
58、080756888</p><p><b> 方程迭代次數(shù)為:6</b></p><p> 最后方程的根為(保六位有效數(shù)字):1.73205</p><p> ?。?)用牛頓法求下列方程的根,要求有6位有效數(shù)字,</p><p><b> x=ctgx;</b></p><
59、;p> 改變初值的選取,對出現(xiàn)的情況進行總結(jié)分析;若要求方程的最小正根和在附近的根,初值應(yīng)如何選取? 并討論初值的變化對收斂的影響。</p><p> 該題的相關(guān)簡短源程序如下:</p><p> int main()</p><p><b> {</b></p><p> double x,y,m;&l
60、t;/p><p> static int k=1;</p><p> cout<<"-----牛頓迭代法-----"<<endl;</p><p> cout<<"請輸入x的初始值:";</p><p><b> cin>>x;</b&
61、gt;</p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> y=x-(x-1/tan(x))/(1+1/(sin(x)*sin(x)));</p><p> m=fabs(y-x);</
62、p><p><b> x=y;</b></p><p> cout<<k++<<" "<<setprecision(15)<<x<<endl;</p><p> }while(m>1e-6);</p><p><b>
63、--k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x<<endl;</p><p><b> return 0;</b&
64、gt;</p><p><b> }</b></p><p> 當(dāng)用戶輸入初始值x:2時,運行結(jié)果如下:</p><p> -----牛頓迭代法-----</p><p> 請輸入x的初始值:2</p><p> 迭代過程及次數(shù)如下:</p><p> 1 0
65、.887661151780719</p><p> 2 0.859941013374919</p><p> 3 0.860333504769894</p><p> 4 0.860333589019376</p><p><b> 方程迭代次數(shù)為:4</b></p><p> 最
66、后方程的根為(保六位有效數(shù)字):0.860334</p><p> 當(dāng)用戶輸入初始值x:99.999時,運行結(jié)果如下:</p><p> -----牛頓迭代法-----</p><p> 請輸入x的初始值:99.999</p><p> 迭代過程及次數(shù)如下:</p><p> 1 79.1883027503
67、099</p><p> 2 58.3749244190408</p><p> 3 30.0237656123831</p><p> 4 15.1638341163974</p><p> 5 11.6096938847769</p><p> 6 6.67811105713815</p&
68、gt;<p> 7 6.12638040581188</p><p> 8 5.8299585028425</p><p> 9 4.56168884653664</p><p> 10 2.38190182843893</p><p> 11 1.27691613638826</p><
69、p> 12 0.811111992399693</p><p> 13 0.85891642747991</p><p> 14 0.860332489549806</p><p> 15 0.860333589018719</p><p> 16 0.86033358901938</p><p&
70、gt; 方程迭代次數(shù)為:16</p><p> 最后方程的根為(保六位有效數(shù)字):0.860334</p><p> 當(dāng)用戶輸入初始值x:100時,運行結(jié)果如下:</p><p> -----牛頓迭代法-----</p><p> 請輸入x的初始值:100</p><p> 迭代過程及次數(shù)如下:</p
71、><p> 1 79.2445582673355</p><p> 2 56.165706716695</p><p> 3 48.9800993652613</p><p> 4 25.3601509609488</p><p> 5 24.3424771997469</p><p
72、> 6 15.8436061568687</p><p> 7 15.6906651318703</p><p> 8 15.6686824443753</p><p> 9 15.6053755658504</p><p> 10 15.3426025940274</p><p> 11
73、 13.3098511082317</p><p> 12 9.46971919055242</p><p> 13 9.495434776578</p><p> 14 9.5184160855492</p><p> 15 9.5282074460852</p><p> 16 9.529322
74、42946151</p><p> 17 9.52933440400997</p><p> 18 9.52933440536196</p><p> 方程迭代次數(shù)為:18</p><p> 最后方程的根為(保六位有效數(shù)字):9.52933</p><p> 當(dāng)用戶輸入初始值x:100.01時,運行結(jié)果如
75、下:</p><p> -----牛頓迭代法-----</p><p> 請輸入x的初始值:100.01</p><p> 迭代過程及次數(shù)如下:</p><p> 1 79.8080591795689</p><p> 2 41.9064566158694</p><p> 3
76、 23.9708169682737</p><p> 4 12.815882172519</p><p> 5 12.3048791629691</p><p> 6 11.2999328246923</p><p> 7 5.76592826020625</p><p> 8 4.28766607
77、950277</p><p> 9 2.5478767918594</p><p> 10 1.58736115121188</p><p> 11 0.785507437581892</p><p> 12 0.85694252263101</p><p> 13 0.86032727627411
78、6</p><p> 14 0.860333588997607</p><p> 15 0.86033358901938</p><p> 方程迭代次數(shù)為:15</p><p> 最后方程的根為(保六位有效數(shù)字):0.860334</p><p> 分析總結(jié):通過對初始值的改變選取,我們可以得到方程的多個
79、根,如上,我們?nèi)×顺跏贾捣謩e為2、99.999、100和100.01,可得到方程的兩個根:0.860334和9.52933。同時,由不同初始值的選取得到的結(jié)果說明,初始值的選取不同,不但能得到不同的方程根,而且還影響了迭代收斂速度的快慢。經(jīng)過多次的初始值選取,得出方程最小的正根為:0.860334,x=100附近的根為:9.52933。由上我們同時也得出,如果初始值越接近方程根,則方程的迭代速度越快。所以選取初始值時,我們可以先猜測方程
80、根的大概值作為初始值,這樣的初始值更接近方程根,可以使方程迭代收斂速度更快。當(dāng)然由式子可得到除了x=0之外的初始值,都可使方程迭代收斂。</p><p> (3)探討用其它方法來求(1)和(2)中的非線性方程的根(如二分法、弦割法、拋物線法等)。</p><p> 該題的相關(guān)簡短源程序如下:</p><p> int main()</p><
81、;p><b> {</b></p><p> double y,m,g1,g2,x0,x1;</p><p> static int k=1;</p><p> cout<<"-----用弦割法求解(1)中的方程根-----"<<endl;</p><p> c
82、out<<"請輸入兩個初始值x0和x1:";</p><p> cin>>x0>>x1;</p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p>
83、; g1=x0*x0-3;</p><p> g2=x1*x1-3;</p><p> y=x1-g2*(x1-x0)/(g2-g1);</p><p> m=fabs(y-x0);</p><p><b> x0=x1;</b></p><p><b> x1=y;<
84、/b></p><p> cout<<k++<<" "<<setprecision(15)<<x1<<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p><p>
85、; cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x1<<endl;</p><p><b> return 0;</b></p><p><b>
86、 }</b></p><p> 當(dāng)用戶輸入初始值x0和x1:1.7 1.8時,運行結(jié)果如下:</p><p> -----用弦割法求解(1)中的方程根-----</p><p> 請輸入兩個初始值x0和x1:1.7 1.8</p><p> 迭代過程及次數(shù)如下:</p><p> 1 1.7
87、3142857142857</p><p> 2 1.73203883495146</p><p> 3 1.73205080971984</p><p> 4 1.73205080756887</p><p> 5 1.73205080756888</p><p><b> 方程迭代次數(shù)為
88、:5</b></p><p> 最后方程的根為(保六位有效數(shù)字):1.73205</p><p> int main()</p><p><b> {</b></p><p> double y,m,g1,g2,x0,x1;</p><p> static int k=1;&
89、lt;/p><p> cout<<"-----用弦割法求解(2)中的方程根-----"<<endl;</p><p> cout<<"請輸入兩個初始值x0和x1:";</p><p> cin>>x0>>x1;</p><p> cout&
90、lt;<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> g1=x0-1/tan(x0);</p><p> g2=x1-1/tan(x1);</p><p> y=x1-g2*(x1-x0)/(g2-g1);</p&g
91、t;<p> m=fabs(y-x0);</p><p><b> x0=x1;</b></p><p><b> x1=y;</b></p><p> cout<<k++<<" "<<setprecision(15)<<x1<
92、;<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<se
93、tprecision(6)<<x1<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p> 當(dāng)用戶輸入初始值x0和x1:15 33時,運行結(jié)果如下:</p><p> -----用弦割法求解(2)中
94、的方程根-----</p><p> 請輸入兩個初始值x0和x1:15 33</p><p> 迭代過程及次數(shù)如下:</p><p> 1 -2.27678413398647</p><p> 2 0.777607459297928</p><p> 3 1.0291377069573</p>
95、;<p> 4 0.867591220494422</p><p> 5 0.859741008533605</p><p> 6 0.860335927837928</p><p> 7 0.860333589776919</p><p> 8 0.860333589019379</p>&l
96、t;p> 9 0.86033358901938</p><p><b> 方程迭代次數(shù)為:9</b></p><p> 最后方程的根為(保六位有效數(shù)字):0.860334</p><p> (4)上面計算結(jié)果精度可達10位以上有效數(shù)字嗎?說明實現(xiàn)過程,并舉例。</p><p> 可以,我們隨便改變?nèi)我活}
97、中的代碼最后輸出行中setprecision(6)函數(shù),只要將其中的數(shù)字6改成數(shù)字10,即可輸出10位有效數(shù)字的結(jié)果。我們將(1)題中的代碼改成十位有效數(shù)字輸出結(jié)果,如下:</p><p> int main()</p><p><b> {</b></p><p> double x,y,m;</p><p>
98、 static int k=1;</p><p> cout<<"-----使用簡單迭代法求解方程根-----"<<endl;</p><p> cout<<"請輸入x的初始值:";</p><p><b> cin>>x;</b></p>
99、<p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> y=pow(3.0*x,1.0/3.0);</p><p> m=fabs(y-x);</p><p><b> x=y;
100、</b></p><p> cout<<k++<<" "<<setprecision(15)<<x<<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p><p
101、> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保十位有效數(shù)字):"<<setprecision(10)<<x<<endl;</p><p><b> return 0;</b></p><p><b&
102、gt; }</b></p><p> 當(dāng)用戶輸入初始值x:1.7時,運行結(jié)果如下:</p><p> -----使用簡單迭代法求解方程根-----</p><p> 請輸入x的初始值:1.7</p><p> 迭代過程及次數(shù)如下:</p><p> 1 1.72130062072632<
103、/p><p> 2 1.7284599726899</p><p> 3 1.73085303449863</p><p> 4 1.73165145780992</p><p> 5 1.73191768075058</p><p> 6 1.73200643082582</p><
104、;p> 7 1.73203601519486</p><p> 8 1.7320458767635</p><p> 9 1.73204916396553</p><p> 10 1.73205025970092</p><p> 11 1.73205062494621</p><p> 方
105、程迭代次數(shù)為:11</p><p> 最后方程的根為(保十位有效數(shù)字):1.732050625</p><p><b> 參考文獻</b></p><p> [1] 嚴蔚敏 吳偉民.?dāng)?shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997.4</p><p> [2] 李慶揚,王能超,易大義.數(shù)值分析[M].武
106、漢.華中科技大學(xué)出版社,2006.7.</p><p> [3] 清華大學(xué)、北京大學(xué)計算方法編寫組。計算方法[M]。北京??茖W(xué)出版社,1980</p><p> [4] 孫淑霞,肖陽春,魏琴等.C/C++程序設(shè)計教程(第2版)。北京:電子工業(yè)出版社,2007.03</p><p> [5] 譚浩強。C++程序設(shè)計。北京:清華大學(xué)出版社,2004,06</
107、p><p><b> 附件</b></p><p> 源程序及有關(guān)運行結(jié)果:</p><p><b> ?。?)</b></p><p><b> 簡單迭代源程序:</b></p><p> #include<iostream></
108、p><p> #include<cmath></p><p> #include <iomanip></p><p> using namespace std;</p><p> int main()</p><p><b> {</b></p><
109、;p> double x,y,m;</p><p> static int k=1;</p><p> cout<<"-----使用簡單迭代法求解方程根-----"<<endl;</p><p> cout<<"請輸入x的初始值:";</p><p>&
110、lt;b> cin>>x;</b></p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> y=pow(3.0*x,1.0/3.0);</p><p> m=fab
111、s(y-x);</p><p><b> x=y;</b></p><p> cout<<k++<<" "<<setprecision(15)<<x<<endl;</p><p> }while(m>1e-6);</p><p>
112、;<b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x<<endl;</p><p><b> retu
113、rn 0;</b></p><p><b> }</b></p><p> 改用牛頓迭代源程序:</p><p> #include<iostream></p><p> #include<cmath></p><p> #include <io
114、manip></p><p> using namespace std;</p><p> int main()</p><p><b> {</b></p><p> double x,y,m;</p><p> static int k=1;</p><p&
115、gt; cout<<"-----從簡單迭代改用牛頓迭代-----"<<endl;</p><p> cout<<"請輸入x的初始值:";</p><p><b> cin>>x;</b></p><p> cout<<"迭代過程
116、及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> y=(x*x+3)/(2*x);</p><p> m=fabs(y-x);</p><p><b> x=y;</b></p><p> cout<
117、;<k++<<" "<<setprecision(15)<<x<<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"&l
118、t;<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p><
119、b> ?。?)</b></p><p> #include<iostream></p><p> #include<cmath></p><p> #include <iomanip></p><p> using namespace std;</p><p&g
120、t; int main()</p><p><b> {</b></p><p> double x,y,m;</p><p> static int k=1;</p><p> cout<<"-----牛頓迭代法-----"<<endl;</p>&l
121、t;p> cout<<"請輸入x的初始值:";</p><p><b> cin>>x;</b></p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p&
122、gt;<p> y=x-(x-1/tan(x))/(1+1/(sin(x)*sin(x)));</p><p> m=fabs(y-x);</p><p><b> x=y;</b></p><p> cout<<k++<<" "<<setprecision(15)
123、<<x<<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):&quo
124、t;<<setprecision(6)<<x<<endl;</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> ?。?)</b></p><p> 弦割法求(1)的源程序
125、:</p><p> #include<iostream></p><p> #include<cmath></p><p> #include <iomanip></p><p> using namespace std;</p><p> int main()</
126、p><p><b> {</b></p><p> double y,m,g1,g2,x0,x1;</p><p> static int k=1;</p><p> cout<<"-----用弦割法求解(1)中的方程根-----"<<endl;</p>&l
127、t;p> cout<<"請輸入兩個初始值x0和x1:";</p><p> cin>>x0>>x1;</p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p>
128、<p> g1=x0*x0-3;</p><p> g2=x1*x1-3;</p><p> y=x1-g2*(x1-x0)/(g2-g1);</p><p> m=fabs(y-x0);</p><p><b> x0=x1;</b></p><p><b>
129、 x1=y;</b></p><p> cout<<k++<<" "<<setprecision(15)<<x1<<endl;</p><p> }while(m>1e-6);</p><p><b> --k;</b></p>
130、<p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x1<<endl;</p><p><b> return 0;</b></p><p>
131、;<b> }</b></p><p> 弦割法求(2)的源程序:</p><p> #include<iostream></p><p> #include<cmath></p><p> #include <iomanip></p><p> u
132、sing namespace std;</p><p> int main()</p><p><b> {</b></p><p> double y,m,g1,g2,x0,x1;</p><p> static int k=1;</p><p> cout<<"
133、-----用弦割法求解(2)中的方程根-----"<<endl;</p><p> cout<<"請輸入兩個初始值x0和x1:";</p><p> cin>>x0>>x1;</p><p> cout<<"迭代過程及次數(shù)如下:"<<end
134、l;</p><p><b> do{</b></p><p> g1=x0-1/tan(x0);</p><p> g2=x1-1/tan(x1);</p><p> y=x1-g2*(x1-x0)/(g2-g1);</p><p> m=fabs(y-x0);</p>
135、<p><b> x0=x1;</b></p><p><b> x1=y;</b></p><p> cout<<k++<<" "<<setprecision(15)<<x1<<endl;</p><p> }while(
136、m>1e-6);</p><p><b> --k;</b></p><p> cout<<"方程迭代次數(shù)為:"<<k<<endl<<"最后方程的根為(保六位有效數(shù)字):"<<setprecision(6)<<x1<<endl;<
137、/p><p><b> return 0;</b></p><p><b> }</b></p><p><b> (4)</b></p><p> #include<iostream></p><p> #include<cma
138、th></p><p> #include <iomanip></p><p> using namespace std;</p><p> int main()</p><p><b> {</b></p><p> double x,y,m;</p>
139、<p> static int k=1;</p><p> cout<<"-----使用簡單迭代法求解方程根-----"<<endl;</p><p> cout<<"請輸入x的初始值:";</p><p><b> cin>>x;</b>
140、</p><p> cout<<"迭代過程及次數(shù)如下:"<<endl;</p><p><b> do{</b></p><p> y=pow(3.0*x,1.0/3.0);</p><p> m=fabs(y-x);</p><p><b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 非線性方程的求解-畢業(yè)論文
- 畢業(yè)論文---非線性方程的求解
- 非線性方程數(shù)值方法
- 非線性方程求解的方法
- 非線性算子及非線性方程的若干討論.pdf
- 若干非線性算子與非線性方程的討論.pdf
- 畢業(yè)論文---非線性方程求解算法的程序
- 非線性方程的加速求根算法
- 非線性方程迭代解法的研究.pdf
- 非線性方程求解方法的研究.pdf
- 某些非線性方程的精確解.pdf
- 解非線性方程的幾類優(yōu)化迭代
- 非線性方程組求解.doc
- 非線性方程組求解.doc
- 若干非線性方程的求解研究.pdf
- 變系數(shù)非線性方程的求解.pdf
- 40713.非線性方程求解的方法
- 非線性方程組求解.doc
- 非線性方程的newton解法[文獻綜述]
- 求解非線性方程迭代方法研究.pdf
評論
0/150
提交評論