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