[Matlab]中solve函数与subs函数的使用方法
[Matlab]中solve函數(shù)與subs函數(shù)的使用方法(解方程組與賦值)
一、solve函數(shù)用法:
1. 求解單變量方程
%-----例子1------syms xeqn=sin(x)==1;solve(eqn,x)%-----例子2------syms xeqn=sin(x)==1;[solx,params,conds]=solve(eqn,x,'ReturnConditions',true)%-----例子3---------------%如果返回empty,則表明解不存在。如果返回empty+warning,則解可能存在,但是solve找不到syms xsolve(3x+2,3x+1,x)2.求解多變量方程
%---例1-----------------%為了避免求解方程時對符號參數(shù)產(chǎn)生混亂,需要指明一個等式中需要求解的變量。%如果不指明的話,solve函數(shù)就會通過symvar選擇一個變量(認(rèn)為該變量是要求解的變量)clc,clearsyms a b c xsola=solve(ax^2+bx+c==0,a) %待求解的變量是asol=solve(ax^2+bx+c==0) %待求解的變量是x%----例子2--------------%當(dāng)求解的變量大于1個時,你聲明變量的順序就是slove返回解的順序syms a b[b,a]=solve(a+b==1,2*a-b==4,b,a)3.solve返回的解帶有:參數(shù)&條件
%為了返回一個方程的完整的解(即解中含有的參數(shù),及對參數(shù)的限制),需要指定ReturnConditions 為:true%---例子1:關(guān)于解的約束----clc,clearsyms xS=solve(sin(x)==0 ,x,'ReturnConditions',true);SS.xS.parametersS.conditions%為了找到x的數(shù)值解,以一個值(利用函數(shù)subs)代替k。用函數(shù)isAlways檢驗該值是否滿足關(guān)于k的限制%檢驗k=4是否滿足in(k, 'integer')isAlways(subs(S.conditions,S.parameters,4))%isAlways返回的是logical 1(true),這意味著:對于k而言,4是一個合法值。%利用4代替k,得到x的一個解。利用函數(shù)vpa獲得該逼近的數(shù)值解(vpa設(shè)置數(shù)值精度:保留幾位有效數(shù)字、幾位小數(shù))solx=subs(S.x,S.parameters,4)vpa(solx)%為0<x<2*pi尋找一個k的合法解,符合下面的前提:條件(S.conditions)、利用solve求解k的約束條件。替代解x中的k的值assume(S.conditions)solk=solve(S.x>0,S.x<2*pi,S.parameters)solx=subs(S.x,S.parameters,solk)4. 求解方程組(為變量分配解)
%當(dāng)求解方程組的時候,利用多個輸出項對應(yīng)求解的輸出變量。%solve返回一個符號數(shù)組(為每個相互獨(dú)立的變量)%-----例子1--------------syms a u v[sola,solu,solv]=solve(au^2+v^2==0,u-v==1,a^2+6==5a,a,u,v)solutions=[sola,solu,solv]%----例子2------------syms x y z[solx,soly,solz]=solve(35(y-x)==0,-7x-xz+28y==0,xy-3z==0,x,y,z)solutions=[solx,soly,solz]5. 返回方程組完整的解(包括:參數(shù)和約束條件)
%需要指定ReturnConditions 為:true%輸出則要多附加兩項:parameters 、conditionsclc,clearsyms x y[solx,soly,params,conditions]=solve(sin(x)==cos(2*y) , x^2==y , [x,y],'ReturnConditions',true)solutions=[solx,soly]6. 返回數(shù)值解
%解析解(analytical solution):用嚴(yán)格的公式表示的解。%數(shù)值解(numerical solution):無法用嚴(yán)格的公式表示,是采用某種計算方法(有限元、逼近、插值)得到的。%symbolic solver無法找到精確的用符號表示的解,因此在調(diào)用numeric solver之前會事先聲明(warning)。因為等式不是多項式,所以想要找到全部可能的解需要很長時間。%numeric solver不會盡力去找等式的全部numeric solution,它僅僅返回它找到的第一個解。clc,clearsyms xsolve(sin(x)==x^2-1,x)%驗證上面的等式確實有一個正值解:畫出等式的左右兩部分的曲線ezplot(sin(x),-2,2)hold onezplot(x^2-1,-2,2)hold off%也可以直接用函數(shù)vpasolve求出數(shù)值解(需要定義(尋找)解的范圍)vpasolve(sin(x)==x^2-1,x,[0 2 ])7. 求解不等式
%solve能求解滿足約束條件的不等式%需要指定ReturnConditions 為:true。這樣可以返回解中涉及到的任何參數(shù)和約束條件% x>0% y>0% x^2+y^2+xy<1clc,clearsyms x yS=solve(x^2+y^2+x*y<1,x>0,y>0 , [x,y], 'ReturnConditions',true);solx=S.xsoly=S.yparams=S.parametersconditions=S.conditions%利用subs和isAlways檢驗u=7/2和v=1/2是否滿足約束條件isAlways(subs(S.conditions,S.parameters,[7/2,1/2]))%isAlways返回loogical 1(true)表示這些值滿足約束條件。將這兩個參數(shù)的值帶入(函數(shù)subs)S.x和S.y中,找到一個x和y的解solx=subs(S.x,S.parameters,[7/2,1/2])soly=subs(S.y,S.parameters,[7/2,1/2])%用函數(shù)vpa得到解的數(shù)值形式vpa(solx)vpa(soly)8.返回實數(shù)解
clc,clearsyms xsolve(x^5==3125,x)%如果僅僅需要一個實數(shù)解,那么就把選項Real設(shè)置成truesolve(x^5==3125,x,'Real',true)9.返回一個解(主值Principal)
%不是返回一個無限多元素的周期解的集合,而是選擇其中的最為實際的3個解(實際的、實用性的be most practical)syms xsolve(sin(x)+cos(2*x)==1,x)%利用選擇PrincipalValue設(shè)置為true選擇一個解(主值)solve(sin(x)+cos(2*x)==1,x,'PrincipalValue',true)10. 應(yīng)用簡化規(guī)則來縮短結(jié)果
%solve默認(rèn)是不對解采用簡化規(guī)則的,但是這些解從數(shù)學(xué)上來講,不總是正確的。這樣以來,solve就不能symbolically求解方程了。clc,clearsyms xsolve(exp(log(x)log(3x))==4 , x)%將IgnoreAnalyticConstraints (忽略解析約束)設(shè)置為true,這樣就會應(yīng)用簡化規(guī)則,有可能讓solve找到一個結(jié)果。%簡化規(guī)則的目的就是為了找到一個解。%但是也不是任何情況下都可以應(yīng)用簡化規(guī)則,因此,應(yīng)用簡化規(guī)則后,應(yīng)該對解的正確與否進(jìn)行核實S=solve(exp(log(x)log(3x))==4 , x,'IgnoreAnalyticConstraints',true)11.忽略有關(guān)變量的假設(shè)
%sym和syms函數(shù)可以讓你對符號變量進(jìn)行假設(shè)(設(shè)置assumptions)。例如,可以聲明x為正值clc,clearsyms x positive%那么,在上述假設(shè)下,求得的解只能是符合假設(shè)的解solve(x^2+5*x-6==0,x)%如果想要得到方程全部的解,則需要將IgnoreProperties 設(shè)置為truesolve(x^2+5*x-6==0,x,'IgnoreProperties ',true)%為了后續(xù)計算,清除之前的假設(shè)syms x clear12.數(shù)值逼近符號解(that Contain RootOf)
%當(dāng)求解多項式的時候,solve可能返回包含RootOf的解。為了數(shù)值逼近這些解,可以采用vpa函數(shù)。clc,clearsyms x s=solve(x^4+x^3+1==0,x)%因為解中沒有參數(shù),所以可以采用vpa進(jìn)行數(shù)值逼近vpa(s)13. 求解高階的多項式等式
%當(dāng)求解高階的多項式方程的時候,solve可能采用 RootOf表示求得的解clc,clearsyms x asolve(x^4+x^3+a==0,x)%為了得到方程的顯式解,嘗試調(diào)用帶有參數(shù)MaxDegree的solve函數(shù)。該選項規(guī)定了多項式最大的degree,solve以此標(biāo)準(zhǔn)返回顯式解。%默認(rèn)值是3。增大該數(shù)值,就可以得到高階多項式的顯式解。s=solve(x^4+x^3+a==0,x,'MaxDegree',4)pretty(s)**二,**Matlab subs函數(shù)的用法
? matlab中subs()是符號計算函數(shù),詳細(xì)用法可以在Matlab的Command Windows輸入:help subs。subs()函數(shù)表示將符號表達(dá)式中的某些符號變量替換為指定的新的變量,常用調(diào)用方式為:
-
R = subs(S, new) 利用new的值代替符號表達(dá)式S中的默認(rèn)符號。
-
R = subs(S) 用由調(diào)用函數(shù)或Matlab工作空間中獲取的值替代了在符號表達(dá)式S中的所有當(dāng)前的變量。
-
R = subs(S, old, new) 利用new的值代替符號表達(dá)式中old的值。old為符號變量或是字符串變量名。new是一個符號貨數(shù)值變量或表達(dá)式。也就是說R = subs(S,old,new)在old=new的條件下重新計算了表達(dá)式S。這種替換第一次作為Matlab表達(dá)式被嘗試,如果所有在new中的數(shù)值是雙精度的,計算是以雙精度算術(shù)運(yùn)算進(jìn)行的。講new值轉(zhuǎn)化為符號可以驗證符號貨變量的運(yùn)算精度。
? 如果old和new是大小和類型相同的向量或是元包數(shù)組,每一個old的元素都將被相應(yīng)新的元素替換。
? 如果S和old是標(biāo)量,new是數(shù)組或元包數(shù)組,則擴(kuò)展標(biāo)量去計算一個數(shù)組結(jié)果。
?
如果new是個數(shù)值矩陣元包數(shù)組,替換講運(yùn)行為/智能元素/(i.e., subs(x*y,{x,y},{A,B}) returns A.*B when A and B are numeric)。
? 如果subs(s,old,new) 沒有改變S,則將會試行subs(s,new,old)。這將為前面的版本提供向前的兼容性,消除記憶參數(shù)順序。subs(s,old,new,0)不改變參數(shù),如果S沒有改變。
subs函數(shù)的用法:
例1:
syms a b x %注意:定義的是符號變量
f = a*sin(x)+b
(符號-符號置換)
f1 = subs(f,sin(x),‘log(y)’)
(符號-數(shù)字置換)
f2 = subs(f,a,2.89)
(替換所有變量)
f3 = subs(f,{a,b,x},{2,5,sym(‘pi/3’)})
代碼實現(xiàn)如下:
>> syms a b x %注意:定義的是符號變量f = a*sin(x)+bf =b + a*sin(x)>> f1 = subs(f,sin(x),'log(y)')f1 =b + a*log(y)>> f2 = subs(f,a,2.89)f2 =b + (289*sin(x))/100>> f3 = subs(f,{a,b,x},{2,5,sym('pi/3')})f3 =3^(1/2) + 5例2:
syms x y z %聲明三個符號變量
S = x2+y2
1、將變量x替換為數(shù)值1:
subs(S,x,1)
2、將變量x替換為變量z:
subs(S,x,z)
3、同時將變量x和y分別替換為1和z:
subs(S,{x,y},{1,z})
4、將單變量替換為數(shù)組:
subs(S,x,[1 2;3 4])
代碼實現(xiàn)如下:
>> syms x y z %聲明三個符號變量S = x^2+y^2 S =x^2 + y^2>> subs(S,x,1)ans =y^2 + 1>> subs(S,x,z)ans =y^2 + z^2>> subs(S,{x,y},{1,z})ans =z^2 + 1>> subs(S,x,[1 2;3 4])ans =[ y^2 + 1, y^2 + 4] [ y^2 + 9, y^2 + 16] >>總結(jié)
以上是生活随笔為你收集整理的[Matlab]中solve函数与subs函数的使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画反比例函数_拟合一个反比例
- 下一篇: 自己动手写cpu光盘资源