求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)
一、符號方程求解
? ? ? ?在MATLAB中,求解用符號表達式表示的代數方程可由函數solve實現,其調用格式為:
? ? ? ?solve(s)(求解符號表達式s的代數方程,求解變量為默認變量,當方程右端為0時,方程可以不標出等號和0,僅標出方程的左端)
? ? ? ?solve(s,v)(求解符號表達式s的代數方程,求解變量為v)
? ? ? ?solve(s1,s2,…,sn,v1,v2,…,vn)(求解符號表達式s1,s2,…,sn組成的代數方程組,求解變量分別為v1,v2,…,vn)
? ? ? ?讓我舉個栗子:
求解如下方程:
代碼:
代碼:
二、求方程f ( x ) = 0數值解的基本方法
? ? ? ?并非所有的方程 f ( x ) = 0 都能求出精確解或解析解,存在這種解的方程就需要用數值解法求出近似解,有幾種常見的數值解法:
? ? ? ?1.二分法
? ? ? ?2.迭代法:切線法、割線法(弦截法)
注:二分法簡單方便,但收斂速度慢;
? ? ? ?迭代法雖然收斂速度稍微快點,但需要判斷能否收斂;
? ? ? ?只要初值選取得當,切線法具有恒收斂且收斂速度快的優點,但需要求出函數的導數;
? ? ? ?弦截法不需要求導數,特別是前面介紹的快速弦截法,收斂速度很快,但是需要知道兩個近似的初始根值才能作出弦,要求的初始條件較多。
三、方程f(x) = 0數值解的MATLAB實現
? ? ? ?MATLAB中求方程數值解的辦法很多,有的是專用指令,有的是根據方程性質而借用其他專用指令求得的
? ? ? ?這里我們就先介紹求函數零點指令fzero吧
? ? ? ?求解方程f ( x ) = 0的實數根也就是求函數f ( x)的零點。MATLAB中設有求函數f (x)零點的指令fzero,可用它來求方程的實數根。該指令的使用格式為:fzero (fun, x0, options)
? ? ? ?①輸入參數fun為函數f (x)的字符表達式、內聯函數名或M函數文件名。
? ? ? ?②輸入參數x0為函數某個零點的大概位置(不要取零)或存在的區間[xi,xj],要求函數f (x)在x0點左右變號,即f (xi)f (xj) < 0。
? ? ? ?③輸入參數options可有多種選擇,若用optimset (‘disp’, ‘iter’)代替options 時,將輸出尋找零點的中間數據。
? ? ? ?④該指令無論對多項式函數還是超越函數都可以使用,但是每次只能求出函數的一個零點,因此在使用前需摸清函數零點數目和存在的大體范圍。為此,一般先用繪圖指令plot, fplot或ezplot畫出函數f (x)的曲線,從圖上估計出函數零點的位置。
? ? ? ?讓我再舉個栗子:
如:求方程 x^2 + 4sin(x) = 25 的實數根(-2π<x < 2π)
解:
(1)若fun為函數f (x)的字符表達式
? ? ? ?①首先要確定方程實數根存在的大致范圍。為此,先將方程變成標準形式f(x) =x2 + 4sin(x) - 25 = 0,作f(x)的曲線圖:
從曲線上可以看出,函數的零點大約在x1= - 4和x2=5附近
? ? ? ?②直接使用指令fzero求出方程在x1≈ - 4時的根
? ? ? ?若鍵入:
fzero ('x^2+4*sin(x)-25',-4, optimset('disp', 'iter'))? ? ? ?將會顯示迭代過程
? ? ? ?中間數據表明,求根過程中不斷縮小探測范圍,最后得出- 4附近滿足精度的近似根
? ? ? ?③求x2≈ 5的根:
(2) 若fun為函數f (x)的M函數文件名
將方程x2 + 4sin(x) = 25編成M函數文件(實用中在函數較為復雜、而又多次重復調用時,才這樣做),用fzero求解。
? ? ? ?①在M文件編輯調試窗中鍵入:
? ? ? ?以fan為文件名存盤,退出編輯調試窗,回到指令窗。
? ? ? ?②確定根的大體位置;
? ? ? ?③在指令窗中鍵入下述指令可求出 - 4 附近的根:
? ? ? ?鍵入下述指令可求出5附近的根:
x2= fzero ('fan',5)? ? ? ?我還要再舉個栗子:
如:求f(x)=x-10^x+2=0在x0=0.5附近的根
解:
? ? ? ?從f(x)的曲線看出曲線的零點有兩個,一個在x=-2附近,另一個在x=0.5附近
? ? ? ?①建立函數文件funx.m。(function [輸出變量列表]=函數名(輸入變量列表))
? ? ? ?②調用fzero函數求根。
z=fzero('funx',0.5)總結
以上是生活随笔為你收集整理的求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenCV 例程200篇】55. 可
- 下一篇: iOS开发里面的4个层次