程式設計思想及範例 7 ,迭代問題

2021-06-02 01:33:19 字數 1657 閱讀 4773

在這裡主要介紹其中的非線性方程求根問題,及其兩種常用的方法。

設有非線性方程(代數方程或超越方程)

若存在數字使得,則稱為方程的根。在數學中除了極少數的簡單方程的根可以通過解析式表達外,一般方程的根都無法用簡單表示式來表示,因此必須研究求根的近似值的方法。

假設在區間連續,且。根據連續函式的性質知在內至少有乙個根,若在假設在區間單調,那麼在內有唯一的根。

ref:.txt,

二分法迭代.txt,牛頓迭代.txt,clip_image019.jpg

二分法迭代

tag:

程式設計思想及範例,迭代問題,非線性方程求根問題

text:

下面介紹二分法求方程根的演算法步驟,事先給定小的正數。

將區間分半,取中點,求,若,則取,否則作下一步。

計算,若,取;否則取,形成新的含根區間,且。

對於新的含根區間重複上述步驟,直到,取

作為的近似值。此時的計算誤差為

計算過程的圖例如下:

二分法程式簡單,方法可靠。但是要求得到較精確的結果所花費的時間比較長,一般不單獨使用,求方程根的主要方法是迭代法。

利用二分法,求方程的實根,精確到兩位小數。

為了便於計算函式值編制函式float function(float x)。在主函式中首先給出了有根區間,在程式中用[x1,x2]表示。由於不確定函式需要執行的次數,因此使用do- while迴圈,迴圈條件為區間中點的函式值小於,當函式值小於時,近似認為當前的值為方程根。

程式**如下:

#include "stdio.h"

#include "math.h"

float function(float x)

void main()

else

}while(fabs(fx0)>=1e-6);

printf("the root is %f",x0);

}

ref:.txt,

非線性方程求根問題.txt,clip_image051.jpg

牛頓迭代

tag:

程式設計思想及範例,迭代問題,非線性方程求根問題

text:

下面介紹常用的牛頓迭代法。

設是的乙個近似根,把在處作泰勒展開

求前兩項近似代替,則近似線性方程為

設,令其解為,得

此方程為的牛頓迭代格式。

此迭代格式的**如圖10-4所示。

.. 是點處的切線為

與軸的交點的橫座標。新的近似值是代替曲線的切線與軸向相交得到。繼續取點,再作切線與軸相交,又得到。由此可知,只要初始值充分靠近,就很快的收斂於方程的根。

利用牛頓迭代法,求方程的實根,精確到兩位小數。

為了方便計算函式值和函式的導數值,編制函式float function(float x)用於計算函式值,編制float derivative(float x)計算函式的一階導數值。

#include "stdio.h"

#include "math.h"

float function(float x)

float derivative(float x)

void main()

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

printf("the root is %f",x0);

}

程式設計思想及範例(2),遍歷問題,字元統計問題

在多數的字處理軟體中均提供了字元統計功能,下面給出了乙個統計字元的簡單例子。例10 4 從鍵盤讀入一段文字,統計其中的英文本母 數字 空格和除此之外的其他字元個數。定義變數nchar來儲存字元的個數,nnum儲存數字的個數,nblank儲存空格的個數,nother儲存其他字元的個數。由於不確定字元的...

程式設計思想及範例 8 ,排序問題,選擇法排序

選擇法排序 selection sort 的基本思想是 每一趟在n i 1 i 1,2,n 1 個記錄中選取最小的記錄作為有序序列中的第 個記錄。下面介紹簡單選擇排序 selection sort 一次簡單選擇排序的過程如下 通過n i次比較,在n i 1個記錄中選取最小的記錄,並與第i 個記錄交換...

折半查詢思想及實戰程式設計

1.折半查詢要求是陣列是有序為前提 如果不是有序的不能使用 2.提及查詢存在兩種情況,要麼資料存不存在要麼存在下標是多少 下面講解折半查詢的思想 首先定義乙個有序陣列 int array 10 1 10一共有10個資料,將這10個數進行編號,從0開始編號,即0 9 令left 0,right 9,m...