matlab中的solve函式不能賦值

時間 2021-10-30 05:52:28

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 繪...