2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論