前面有兩篇博文分別介紹了:
matlab求常微分方程的解析解
matlab求常微分方程的數值解
為了形成乙個體系,我決定把普通方程組的求解也介紹一下。
本博文也是按照matlab的官方文件展開的(推薦大家多看官方文件)
一般形式s=solve(eqns,vars,name,value)
,其中:
eqns是需要求解的方程組;
vars是需要求解的變數;
name-value對用於指定求解的屬性(一般用不到);
s是結果,對應於vars中變數;
方程:sin(x)=1
**:
syms x; %定義x是乙個未知量
eqn=sin(x)==1; % 定義方程,eqn只是乙個代號,代表sin(x)==1
solx=solve(eqn,x) % 求方程eqn中的x,放入solx中
結果:
說明:matlab定義方程用的是 == 符號,就是這樣規定的哈。
注意:細心的同學應該發現了,本例的解實際上應該是 pi/2+2k*pi ,怎麼得到呢?
新增name-value對即可解決,輸入以下**:
syms x; %定義x是乙個未知量
eqn=sin(x)==1; % 定義方程,eqn只是乙個代號,代表sin(x)==1
[solx,params,cond]=solve(eqn,x,'returnconditions',true) % 求方程eqn中x的所有解,放入solx中,params是引數,cond儲存引數性質
得到理想結果:
方程:ax²+bx+c=0
**:
syms x a b c; %定義x a b c是未知量
eqn=a*x^2+b*x+c==0;% 定義方程
solx=solve(eqn,x) % 解方程
結果:
說明:這裡就簡單的把未知引數用syms宣告就可以了。
方程:
syms u v; % 定義u v 是未知量
eqns=[2*u+v==0,u-v==1]; % 定義方程組
vars=[u,v]; % 定義求解的未知量
[solu,solv]=solve(eqns,vars) % 求解eqns中的vars未知量,分別儲存
sol=solve(eqns,vars); % 求解eqns中的vars未知量,以結構體的形式儲存到sol中
solu1=sol.u % 從sol結構體中取出變數u的解
solv1=sol.v % 從sol結構體中取出變數v的解
結果:
說明:本例中有兩個求解的變數,有兩種儲存方式,已在**中介紹。
方程:sin(x)==x²-1
**:
syms x; % 定義x是未知量
fplot(sin(x),[-2,2]); % 繪製y=sin(x)的影象
hold on;
fplot(x^2-1,[-2,2]); % 繪製y=x^2-1的影象
hold off;
eqn=sin(x)==x^2-1; % 定義方程
solx=solve(eqn,x) % 直接求解,返回其找到的第乙個數值近似解
solx1=vpasolve(eqn,x,[0,2]) % vpa求解,返回其在範圍[0,2]內找到的第乙個數值近似解
結果:
說明:此例中無法求得精確解,slove會返回求得的第乙個數值近似解,vpasolve可以返回指定範圍內第乙個近似解
方程:
syms x; % 定義x是未知量
eqn=[3*x+2==0,3*x+1==0]; % 定義函式
solx=solve(eqn,x) % 求解
結果: MATLAB 求解方程(組)
eg.解方程x 2 x 2 0 1.roots p 函式 此 matlab 函式 以列向量的形式返回 p 表示的多項式的根。輸入 p 是乙個包含 n 1 多項式係數的向量,以 xn 係數開頭。0係數表示方程中不存在的中間冪。p 1 1,2 x roots p 2.solve函式 利用solve函式求...
解方程及微分方程 MATLAB
x1,x2,x3,solve eq1 eq2 eq3 x1 x2 x3 s solve eq1 eq2 eq3 x1 x2 x3 第一種方式,對solve的括號中的x1,x2,x3的次序會有要求 與前面的一致 第二種無要求。eq都是等式,不是表示式。最好都打引號,不打引號也可以,但是一定要預先用sy...
求解方程 語言 c
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 用牛頓迭代法求方程2x 3 4x 2 3xsinx 6 0的根,要求誤差小於10的 6次方。輸入 乙個浮點數,表示起始點。輸出 乙個浮點數,為方程的根。輸入樣例 1.0輸出樣例 2.064076 include include...