如果求根的方程式不為多項式的形態 就不能用 roots
函數。而這類的方策’h半是非線性方程式, 其函數形態變化很大。對於解這類方程式的根,可以用
fzero函數,它其實是用來找一函數 f(x)
的 x 值代入時,會使該函數值為零 (f(x)=0);而這也就是根的特性,因此我們可以用
fzero求根。
要求任一方程式的根有三步驟:
以下分別介紹幾數個方程式,來說明如何求解它們的根。
例一、方程式為
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