8.2 非線性方程式的實根


如果求根的方程式不為多項式的形態 就不能用 roots 函數。而這類的方策’h半是非線性方程式, 其函數形態變化很大。對於解這類方程式的根,可以用 fzero函數,它其實是用來找一函數 f(x) 的 x 值代入時,會使該函數值為零 (f(x)=0);而這也就是根的特性,因此我們可以用 fzero求根。

要求任一方程式的根有三步驟:

  1. 先定義方程式。要注意必須將方程式安排成 f(x)=0 的形態,例如一方程式為sin(x)=3, 則該方程式應表示為 f(x)=sin(x)-3。可以 m-file 定義方程式。
  2. 代入適當範圍的 x, y(x) 值,將該函數的分佈圖畫出,藉以了解該方程式的「長相」。
  3. 由圖中決定y(x)在何處附近(x0)與 x 軸相交,以fzero的語法fzero('function',x0) 即可求出在 x0附近的根,其中 function 是先前已定義的函數名稱。如果從函數分佈圖看出根不只一 個,則須再代入另一個在根附近的 x0,再求出下一個根。

以下分別介紹幾數個方程式,來說明如何求解它們的根。

例一、方程式為

sin(x)=0

我們知道上式的根有 ,求根方式如下:

>> r=fzero('sin',3) % 因為sin(x)是內建函數,其名稱為sin,因此無須定義它

r = % 選擇 x=3 附近求根

3.1416

>> r=fzero('sin',6) % 選擇 x=6 附近求根

r =

6.2832

例二、方程式為先前提到的 MATLAB 內建函數 humps,我們不須要知道這個方程式的形態為何,不過我們可以將它劃出來,再找出根的位置。求根方式 如下:

>> x=linspace(-2,3);

>> y=humps(x);

>> plot(x,y), grid % 由圖中可看出在0和1附近有二個根

>> r=fzero('humps',1.2)

r =

1.2995

例三、方程式為

這個方程式其實是個多項式,我們說明除了用 roots 函數找出它的根外,也可以用這節介紹的方法求根,注意二者的解法及結果有所不同。求根方式如下:

% m-function, f_1.m

function y=f_1(x) % 定義 f_1.m 函數

y=x.^3-2*x-5;

>> x=linspace(-2,3);

>> y=f_1(x);

>> plot(x,y), grid % 由圖中可看出在2和-1附近有二個根

>> r=fzero('f_1',2); % 決定在2附近的根

r =

2.0946

>> p=[1 0 -2 -5]

>> r=roots(p) % 以求解多項式根方式驗證

r =

2.0946

-1.0473 + 1.1359i

-1.0473 - 1.1359i

例四、方程式為

求根方式如下:

% m-function, f_2.m

function y=f_2(x) % 定義 f_2.m 函數

y=x.^2.*sin(x)+cos(x);

>> x=linspace(-3,3);

>> y=f_2(x);

>> plot(x,y), grid % 由圖中可看出在-1和3附近有二個根

>> r=fzero('f_2',-1); % 決定在-1附近的根

r =

-0.8952

>> r=fzero('f_2',3); % 決定在3附近的根

r =

3.0333

例五、方程式為

求根方式如下:

% m-function, f_3.m

function y=f_3(x) % 定義 f_3.m 函數

y=2*exp(-x).*sin(2*pi*x)-0.5;

>> x=0:0.1:2; y=f_3(x);

>> plot(x,y), grid % 由圖中可看出在0,0.5和1附近有三個根

>> r=fzero('f_3',0) % 決定在0附近的根

r =

0.0420

>> r=fzero('f_3',0.5) % 決定在0.5附近的根

r =

0.4368

>> r=fzero('f_3',1) % 決定在1附近的根

r =

1.1435



上一頁 下一頁 講義大綱