matlab solve命令中解的順序問題

時間 2021-10-30 05:53:29

1樓:匿名使用者

在matlab裡面solve命令主要是用來求解代數方程(即多項式)的解,但是也不是說其它方程一個也不能解,不過求解非代數方程的能力相當有限,通常只能給出很特殊的實數解。(該問題給出的方程就是典型的超越方程,非代數方程)

從計算機的程式設計實現角度講,如今的任何演算法都無法準確的給出任意非代數方程的所有解,但是我們有很多成熟的演算法來實現求解在某點附近的解。matlab也不例外,它也只能給出任意非代數方程在某點附近的解,函式有兩個:fzero和fsolve,具體用法請用help或doc命令查詢吧。

如果還是不行,你還可以將問題轉化為非線性最優化問題,求解非線性最優化問題的最優解,可以用的命令有:fminbnd, fminsearch, fmincon等等。

x1=1;x2=2;w=3;f=4; %假設它們的值是這些

g=10;

y1=f*g;

y2=-f*g;

k=solve('-y2=(-8)*x2*w^2*(sin(k)+x1/(16*x2))^2+4*x2*w^2+((x1*w)^2)/(32*x2)','k')

k=subs(k)

執行結果:

k =asin(1/16/x2*(-x1*w+(x1^2*w^2+32*y2*x2+128*x2^2*w^2)^(1/2))/w)

asin(1/16/x2*(-x1*w-(x1^2*w^2+32*y2*x2+128*x2^2*w^2)^(1/2))/w)

k =0.4569

-0.5279

2樓:叢葉

直接用s=solve(eq1,eq2,eq3,.......eq12)求解,只會得出方程解的『結構陣列』,即s(這種型別很像c語言裡面的結構體變數)。例如:

syms x y z

s=solve('y^2-x^2-z^2','y+z-1','x^2-2*x-3','x','y','z')

s.x %求解x

s.ys.z

顯然如果只需要知道某一個變數的值,而不是所有變數的值,用這個就比較方便

如果要直接顯示所有求解結果,[x1,x2,...xn]=solve('eqn1','eqn2',...,'eqnn','x1','x2',...,'xn'),前後引數一一對應

3樓:匿名使用者

syms x y; s = solve('x + y = 2','x-y = 4'); s = [s.x s.y]

syms x y; s = solve('y + x = 2','y-x = 4'); s = [s.x s.y]

4樓:日向淳正

【x1,x2,x3,....x12】=solve(eq1,eq2,eq3,.......eq12,x1,x2,x3,x4......xx12)試試

matlab中使用solve命令出現sym問題

5樓:

function y=func_nonlinear(x)

a=[0.2252 0.2453 -0.1968 -0.1834];

b=[0.1665 -0.1506 -0.1757 0.0798];

xw1=0;xw2=0;xw3=1;xw4=1;

yw1=0.6;yw2=0;yw3=0;yw4=0.6;

%s=solve('xw1*r11+yw1*r12+a(1)*xw1*r31+a(1)*yw1*r32+t1+a(1)*t3=0',...

%'xw1*r21+yw1*r22+b(1)*xw1*r31+b(1)*yw1*r32+t2+b(1)*t3=0',...

%'xw2*r11+yw2*r12+a(2)*xw2*r31+a(2)*yw2*r32+t1+a(2)*t3=0',...

%'xw2*r21+yw2*r22+b(2)*xw2*r31+b(2)*yw2*r32+t2+b(2)*t3=0',...

%'xw3*r11+yw3*r12+a(3)*xw3*r31+a(3)*yw3*r32+t1+a(3)*t3=0',...

%'xw3*r21+yw3*r22+b(3)*xw3*r31+b(3)*yw3*r32+t2+b(3)*t3=0',...

%'xw4*r11+yw4*r12+a(4)*xw4*r31+a(4)*yw4*r32+t1+a(4)*t3=0',...

%'xw4*r21+yw4*r22+b(4)*xw4*r31+b(4)*yw4*r32+t2+b(4)*t3=0',...

%'r11^2+r21^2+r31^2=1',...

%'r21^2+r22^2+r32^2=1',...

%'r11*r12+r21*r22+r31*r32=0');

%r11 r12 r21 r22 r31 r32 t1 t2 t3

%分別為x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9)

y(1)=xw1*x(1)+yw1*x(2)+a(1)*xw1*x(5)+a(1)*yw1*x(6)+x(7)+a(1)*x(9);

y(2)=xw1*x(3)+yw1*x(4)+b(1)*xw1*x(5)+b(1)*yw1*x(6)+x(8)+b(1)*x(9);

y(3)=xw2*x(1)+yw2*x(2)+a(2)*xw2*x(5)+a(2)*yw2*x(6)+x(7)+a(2)*x(9);

y(4)=xw2*x(3)+yw2*x(4)+b(2)*xw2*x(5)+b(2)*yw2*x(6)+x(8)+b(2)*x(9);

y(5)=xw3*x(1)+yw3*x(2)+a(3)*xw3*x(5)+a(3)*yw3*x(6)+x(7)+a(3)*x(9);

y(6)=xw3*x(3)+yw3*x(4)+b(3)*xw3*x(5)+b(3)*yw3*x(6)+x(8)+b(3)*x(9);

y(7)=xw4*x(1)+yw4*x(2)+a(4)*xw4*x(5)+a(4)*yw4*x(6)+x(7)+a(4)*x(9);

y(8)=xw4*x(3)+yw4*x(4)+b(4)*xw4*x(5)+b(4)*yw4*x(6)+x(8)+b(4)*x(9);

y(9)=x(1)^2+x(3)^2+x(5)^2-1;

y(10)=x(3)^2+x(4)^2+x(6)^2-1;

y(11)=x(1)*x(2)+x(3)*x(4)+x(5)*x(6);

將該函式儲存成m檔案,檔名為func_nonlinear.m

在命令視窗中輸入:

x0=[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5];

fsolve(@func_nonlinear,x0)

顯示結果為

ans =

columns 1 through 8

0.8617 -0.0013 0.

1270 -0.9599 0.4908 0.

2509 -0.4245 0.2616

column 9

1.7325

這就是9個變數的迭代數值解。

我的matlab版本是7.1的,不知道是否適合其他版本,呵呵

matlab中solve函式的問題

6樓:4終

1、首先開啟matlab,直接在命令列輸入solve函式,裡面加上方程式,如下圖所示,這裡是一個二元一次方程。

2、接著直接回車就可以得到結果了,如下圖所示。

3、然後solve函式中還可以寫兩個方程式,如下圖所示。

4、回車後會得到兩個未知數的解,如下圖所示。

5、還可以先宣告變數,然後編寫方程式,並在solve中填入變數和方程式。

6、最後直接用點的方式得到答案即可,如下圖所示。

7樓:寇開汲祺

這是由於matlab裡面有個關於預設自變數規定問題

一般情況下預設自變數為表示式中距離x最近的字母

你可以用這種方法來求解

[x0]=solve('2600*(z0+15)=(z0-24985)*x1')

[z0]=solve('2600*(z0+15)=(z0-24985)*x1')

由於上兩行行中只有x1與z0兩個變數,而且x1與x較近,所以是求解x1

為了求解z0,可以用

[z0]=solve('2600*(z0+15)=(z0-24985)*x1','z0')

這樣的話就沒問題了

建議你指定代求變數

相關函式

findsym

查詢自變數,比較有用

8樓:匿名使用者

實際上 solve 函式預設的都把變數當作sym來運算計算出來的結果都是sym物件。

為什麼呢? 追去更高的準確度。

譬如solve('x=32/3')計算出來的是32/3 而不是小數sym物件計算出來的是一個表示式, 而不是數值。

如果您想要得到數值結果的話,再用一個函式eval即可[x1,y1]=solve('(x-nodee(1,1))^2+(y-nodee(2,1))^2=distance(1)^2','(x-nodee(1,2))^2+(y-nodee(2,2))^2=distance(2)^2','x,y');

x1=eval([x1]);

y1=eval([y1]);

9樓:匿名使用者

用solve函式解方程所得到的解都是符號解。

那執行結果前加上一個double如何?

10樓:用新首熹

function

[x0,y0]=sss(a,b,c)

ifnargin

<1a=0.26;

b=0.02;

c=0.15;

endsyms

x;syms

y;temp1=(x-a)^2+(y-b)^2-c^2;

temp2=1+y^1.5-x;

[x0,y0]=solve(temp1,temp2);

x0=eval(x0);

y0=eval(y0);

11樓:簡葦唐雅愛

這樣用肯定是不行的

可以這樣用

symsab

t=a+b

[ab]=solve(t-4,'a-b=0')注意t-4沒有引號

cad命令中返回上命令快捷鍵,cad命令中返回上一個命令快捷鍵

杭德肥倩 lp,layerp 沒有快捷鍵可以自己編輯一個。開啟acad 記事本,複製上面的格式,編輯一個快捷鍵命令,儲存好,重新開啟cad就可以使用這個快捷鍵了。 亥蘭英閉己 ctrl z 常用ctrl快捷鍵 ctrl b 柵格捕捉模式控制 f9 ctrl c 將選擇的物件複製到剪下板上 ctrl ...

命令格式中這些符號,命令格式中這些符號 都是什麼意思

以attrib命令為例來說明 attrib r r a a s s h h i i drive path filename s d l 除了attrib沒有框在中括號中,其它的所有引數都在中括號中,這點資訊就告訴了我,attrib可以光桿使用。中的資訊都是可選的引數,可選引數 就是可以有,也可以沒有...

命令提示符中這個命令的含義

啟動 windows 命令直譯器的一個新例項cmd a u q d e on e off f on f off v on v off s c k string c 執行字串指定的命令然後終止 k 執行字串指定的命令但保留 s 修改 c 或 k 之後的字串處理 見下 q 關閉回顯 d 禁止從登錄檔執行...