Matlab方程求解
符號(hào)求解和數(shù)值求解 在使用Matlab求解方程時(shí),可以采用符號(hào)求解和數(shù)值求解兩種方法。符號(hào)求解適用于不確定方程是否有符號(hào)解的情況,它不需要提供初值,并且通常能夠得到方程的所有解。對(duì)于一些簡單的超越方
符號(hào)求解和數(shù)值求解
在使用Matlab求解方程時(shí),可以采用符號(hào)求解和數(shù)值求解兩種方法。符號(hào)求解適用于不確定方程是否有符號(hào)解的情況,它不需要提供初值,并且通常能夠得到方程的所有解。對(duì)于一些簡單的超越方程,符號(hào)求解還能夠自動(dòng)調(diào)用數(shù)值計(jì)算系統(tǒng)給出一個(gè)數(shù)值解。
符號(hào)求解的調(diào)用形式為:S solve(eqn1, eqn2, ..., eqnM, var1, var2, ..., varN)
,其中eqn為符號(hào)表達(dá)式,var為指定的要求解的變量。如果不聲明要求解的變量,則Matlab自動(dòng)按默認(rèn)變量進(jìn)行求解,默認(rèn)變量可以由symvar(eq)
確定。
例如,我們要求解方程組:
x^2 x*y y 3,
x^2 - 4*x 3 0
Matlab代碼如下:
syms x y
eq1 x^2 x*y y - 3
eq2 x^2 - 4*x 3
[Sx, Sy] solve(eq1, eq2, x, y)
fzero函數(shù)
在很多情況下,符號(hào)求解無法得到方程的解析解,這時(shí)就可以采用數(shù)值法求解。數(shù)值求解法包括fzero和fsolve兩種方法。其中,fzero適用于求解一元函數(shù)零點(diǎn),而fsolve適用于求解多元函數(shù)零點(diǎn)(包括一元函數(shù))。
fzero求解一元函數(shù)零點(diǎn)時(shí),推薦優(yōu)先使用它,因?yàn)樗粌H支持提供初值的搜索,還支持在一個(gè)區(qū)間上進(jìn)行搜索。
fzero的常用形式為:x fzero(fun, x0)
,其中fun為函數(shù)句柄,x0為搜索初值。
例如,要求解方程sin(x) * cos(x)^2 0,代碼如下:
y @(x) sin(x) * cos(x).^2;
[x, fval] fzero(y, 1)
fsolve函數(shù)
與fzero類似,fsolve可以求解多元方程。fsolve的常用形式為:x fsolve(fun, x0)
,其中fun為函數(shù)句柄,x0為搜索初值。
例如,要求解方程組x*y 1,x - 11*y 5,代碼如下:
eq @(x) [x(1)*x(2) - 1; x(1) - 11*x(2) - 5];
[sol, fval] fsolve(eq, [1, 1])
vpasolve函數(shù)
最后,我們介紹一個(gè)數(shù)值解法:vpasolve。vpasolve可以求解一元或多元函數(shù)的零點(diǎn),不需要提供初值,并且能夠自動(dòng)搜索指定范圍內(nèi)的多個(gè)解。
vpasolve的調(diào)用形式有多種,其中S vpasolve(eqn)
適用于一元方程,S vpasolve(eqn, var)
適用于多元方程。
例如,對(duì)于多項(xiàng)式方程4*x^4 3*x^3 2*x^2 x 5 0,使用vpasolve可以得到所有解:
syms x
vpasolve(4*x^4 3*x^3 2*x^2 x 5 0, x)
對(duì)于非多項(xiàng)式方程sin(x^2) 1/2,vpasolve會(huì)給出它找到的第一個(gè)解:
syms x
vpasolve(sin(x^2) 1/2, x)