1樓:匿名使用者
樓上回答使用eval函式行不通。
如果求解之後的表示式中都是已知量,可以使用eval,但現在的結果裡還有x1、x2等未知量,用eval會導致報錯。
可以使用subs函式:
>> subs(s.c1)
ans =
(x1*dq(1) + 800)/(dq(1) + 1000)
>> subs(s.c2)
ans =
(800*b(1) + x2*dq(2) + x1*b(1)*dq(1))/(dq(1) + dq(2) + 1000)
但這樣帶來的問題是,陣列的元素無法帶入,例如dq(1)、dq(2)等。可以進一步指定要代入的符號變數,例如
>> subs(subs(s.c1),'dq(1)',dq(1))
ans =
x1/201 + 160/201
但這種做法對於類似s.c2的表示式裡面有多個陣列元素的情況,就會非常繁瑣,關於這一點,我沒有好的辦法,希望有高手能指教。
我覺得比較可取的方法是,把求解的方程直接寫成符號表示式(而不是字串):
syms c1 c2 c3 c4 x1 x2 x3 x4
f1=(q0*c0+dq(1)*x1)/(q0+dq(1))-c1;
f2=(b(1)*c1*(q0+dq(1))+dq(2)*x2)/(q0+dq(1)+dq(2))-c2;
f3=(b(2)*c2*(q0+dq(1)+dq(2))+dq(3)*x3)/(q0+dq(1)+dq(2)+dq(3))-c3;
f4=(b(3)*c3*(q0+dq(1)+dq(2)+dq(3))+dq(4)*x4)/(q0+dq(1)+dq(2)+dq(3)+dq(4))-c4;
s=solve(f1,f2,f3,f4,'c1','c2','c3','c4')
這樣求解可以直接得到結果:
>> s.c1
ans =
x1/201 + 160/201
>> s.c2
ans =
(2*x1)/1009 + (4*x2)/1009 + 320/1009
2樓:匿名使用者
eval(s.c1)
eval(s.c2)
matlab的solve()裡不能加變數嘛?
3樓:匿名使用者
你的a,b要先定義成sym型別,再賦值,應該就可以了。
4樓:匿名使用者
因為你告訴matlab是x,y為變數阿,ab就不知道是什麼了,matlab認為是你 輸入有問題
5樓:
solve函式可以帶變數
比如:[x,y]=solve('x-3*y+b','x-y+a','x','y')
解出來就是
x = -3/2*a+1/2*b
y =-1/2*a+1/2*b
但你這裡的兩個方程次數比較高,使得方程沒有解析解,就是解不能用基本函式表達出來。
所以,如果你想要得到x,y關於a,b的表示式,是不可能的。
由於你的方程組沒有解析解,所以matlab只能用數值方法求解你的方程組,而這種方法只能在a,b全部給定的時候才能求解。
你可以用兩個for迴圈對a,b進行掃描,把對應的x,y全部求出來就行了,很遺憾,得不到解析解,只有數值解。
6樓:費馬的遺言
前面加上syms a b
matlab程式設計中solve函式不能呼叫已知變數
7樓:匿名使用者
th1 = 0;
ex1 = '36*cos(th1)+60*cos(th2)+170*cos(th3)=-10';
ex2 = '36*sin(th1)+60*sin(th2)+170*sin(th3)=170';
[th2,th3] = solve(subs(ex1),subs(ex2),'th2','th3'); % subs 才能將 th1 代入表示式
solution = eval([th2,th3])solution =
3.1320 1.4884
0.5381 2.1817
使用matlab中的solve函式求解符號方程組的問題
不知你的什麼版本,我是2011a就告訴我no explicit solution即無解析解。沒有出現你這種情況。這個方程組就是求兩圓交點,頂多有兩組解,你仔細看解出來的x第一個和x第二個是一模一樣的。後兩個也是一樣的。我以前用低版本的matlab 7.0.1 似乎得到過你這樣的解,但是現在用新版本的...
MATLAB中的DEBLANK函式
多瑙的萊茵 deblank函式是用來刪除字串中尾部空格的一個函式。在matlab中輸入help deblank就可以檢視其用法,在裡面都有詳細介紹。matlab處理字串的函式還有 strcmp 比較兩個字串是否完全相等,是,返回真,否則,返回假 strncmp 比較兩個字串前n個字元是否相等,是,返...
matlab怎麼畫複數函式,matlab 中複數如何表示?我i前面已經有 就是表示不出來 不知到為什麼
我叫王土土豆 1 雙擊matlab軟體圖示,開啟matlab軟體,可以看到matlab軟體的介面。2 建立一個陣列u u 0 0.2 6 表示從0到6,每個0.2取一個數字。3 建立一個複數v,v 0.02 i。4 使用u和v建立一個複數函式z z exp v u 5 使用函式feather z 繪...