Matlab方程求解
符號求解和數(shù)值求解 在使用Matlab求解方程時,可以采用符號求解和數(shù)值求解兩種方法。符號求解適用于不確定方程是否有符號解的情況,它不需要提供初值,并且通常能夠得到方程的所有解。對于一些簡單的超越方
符號求解和數(shù)值求解
在使用Matlab求解方程時,可以采用符號求解和數(shù)值求解兩種方法。符號求解適用于不確定方程是否有符號解的情況,它不需要提供初值,并且通常能夠得到方程的所有解。對于一些簡單的超越方程,符號求解還能夠自動調(diào)用數(shù)值計算系統(tǒng)給出一個數(shù)值解。
符號求解的調(diào)用形式為:S solve(eqn1, eqn2, ..., eqnM, var1, var2, ..., varN),其中eqn為符號表達(dá)式,var為指定的要求解的變量。如果不聲明要求解的變量,則Matlab自動按默認(rè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ù)
在很多情況下,符號求解無法得到方程的解析解,這時就可以采用數(shù)值法求解。數(shù)值求解法包括fzero和fsolve兩種方法。其中,fzero適用于求解一元函數(shù)零點,而fsolve適用于求解多元函數(shù)零點(包括一元函數(shù))。
fzero求解一元函數(shù)零點時,推薦優(yōu)先使用它,因為它不僅支持提供初值的搜索,還支持在一個區(qū)間上進行搜索。
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ù)
最后,我們介紹一個數(shù)值解法:vpasolve。vpasolve可以求解一元或多元函數(shù)的零點,不需要提供初值,并且能夠自動搜索指定范圍內(nèi)的多個解。
vpasolve的調(diào)用形式有多種,其中S vpasolve(eqn)適用于一元方程,S vpasolve(eqn, var)適用于多元方程。
例如,對于多項式方程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)
對于非多項式方程sin(x^2) 1/2,vpasolve會給出它找到的第一個解:
syms x
vpasolve(sin(x^2) 1/2, x)