matlab用了solve,結果是sym啊,怎麼看具體數值

2021-03-30 15:24:59 字數 7731 閱讀 3743

1樓:匿名使用者

執行了你的程式,存在著下列幾個問題:

1、用下列這個**求解,其t、y值是無法代入方程的。

x=solve('465*sin(x)+200=120*cos(t*1.2+pi/3)+369*sin(x-y)','x');

所以軟體會提示有關sym的資訊。

2、如要顯示x值,其該語句最後不能有分號(

)。

由於你給出的t、y值是以一組向量形式存放的,

因此要計算你的x值必須要用迴圈語句(如for。。。end語句)來求解。

需要在t、y值後面增加如下**:

n=length(t);

x=zeros(n,1);

for i=1:n

syms x1

t1=t(i);y1=y(i);

x(i)=vpasolve(465*sin(x1)+200==120*cos(t1*1.2+pi/3)+369*sin(x1-y1));

end

x

執行結果形式

matlab 用solve解方程,出現sym 10

2樓:我行我素

按上面解方程的語句,k,delta都是未知數,一個方程,2個未知數,要求出以其中一個是自變數,另一個是函式,要這樣:

>> syms k delta

>> solve(power((5*sqrt(5)*exp(131/512)/16),k)+power((13*exp(87/512)/16),k)-delta,k)

warning: cannot find explicit solution.

> in solve (line 316)

ans =

empty sym: 0-by-1

上式不能解出,可把k指定一個數,如:

solve(power((5*sqrt(5)*exp(131/512)/16),3)+power((13*exp(87/512)/16),3)-delta)

ans =

3666239720380227/2251799813685248

>> solve(power((5*sqrt(5)*exp(131/512)/16),k)+power((13*exp(87/512)/16),k)-delta,delta)

ans =

(31754343866723/35184372088832)^k + (1084224671755031/1125899906842624)^k

matlab解方程組,答案是sym沒有具體數值

3樓:

修改如下:

clear all; clc

e=2*10^5;

v=0.3;

g=e/(2*(1+v));

lambda=(v*e)/((1+v)*(1-2*v));

epsilon11=1.7833*10^-3;

epsilon22=1.6*10^-3;

syms sigma11 sigma22 epsilon33;

eq1= sigma11==2*g*epsilon11+lambda*(epsilon11+epsilon22+epsilon33);

eq2= sigma22==2*g*epsilon22+lambda*(epsilon11+epsilon22+epsilon33);

eq3= epsilon33==-v*(sigma11+sigma22)/e;

[sigma11,sigma22,epsilon33]=solve(eq1,eq2,eq3);

sigma11=vpa(sigma11,8);

sigma22=vpa(sigma22,8);

epsilon33=vpa(epsilon33,8);

val_sigma11 = double(sigma11)

val_sigma22 = double(sigma22)

val_epsilon33 = double(epsilon33)

matlab2013b下執行通過,版本太低了別怪別人。

val_sigma11 =

-0.0014

val_sigma22 =

497.4286

val_epsilon33 =

469.2286

4樓:宛丘山人

解方程組失效,可將程式改為:

clear

e=2*10^5;

v=0.3;

g=e/(2*(1+v));

lambda=(v*e)/((1+v)*(1-2*v));

epsilon11=1.7833*10^-3;

epsilon22=1.6*10^-3;

epsilon33=-2*v*(g+lambda)*(sigma11+sigma22)/(2*v+e)

sigma11=2*g*epsilon11+lambda*(epsilon11+epsilon22+epsilon33)

sigma22=2*g*epsilon22+lambda*(epsilon11+epsilon22+epsilon33)

最後執行結果是:

>> epsilon33=-2*v*(g+lambda)*(epsilon11+epsilon22)/(2*v+e)

epsilon33 =

-0.0020

>> sigma11=2*g*epsilon11+lambda*(epsilon11+epsilon22+epsilon33)

sigma11 =

439.5156

>> sigma22=2*g*epsilon22+lambda*(epsilon11+epsilon22+epsilon33)

sigma22 =

411.3156

matlab解方程出現sym 20

5樓:匿名使用者

修改如下:

clear all; clc

e=2*10^5;

v=0.3;

g=e/(2*(1+v));

lambda=(v*e)/((1+v)*(1-2*v));

epsilon11=1.7833*10^-3;

epsilon22=1.6*10^-3;

syms sigma11 sigma22 epsilon33;

eq1= sigma11==2*g*epsilon11+lambda*(epsilon11+epsilon22+epsilon33);

eq2= sigma22==2*g*epsilon22+lambda*(epsilon11+epsilon22+epsilon33);

eq3= epsilon33==-v*(sigma11+sigma22)/e;

[sigma11,sigma22,epsilon33]=solve(eq1,eq2,eq3);

sigma11=vpa(sigma11,8);

sigma22=vpa(sigma22,8);

epsilon33=vpa(epsilon33,8);

val_sigma11 = double(sigma11)

val_sigma22 = double(sigma22)

val_epsilon33 = double(epsilon33)

matlab2013b下執行通過,版本太低了別怪別人。

val_sigma11 =

-0.0014

val_sigma22 =

497.4286

val_epsilon33 =

469.2286

matlab solve解顯示root(一個方程),怎麼顯示出數值解??

6樓:嚕嚕晗寶

當solve解顯示有root形式的方程解,可以用vpa()函式命令求出方程的數值解。具體操作過程為

>> syms x

>> s=solve(det([5*x 2 1;-1 4*x 2;2 -3 10*x])==0,x)

>> s=vpa(s)

從運算結果,可以看到方程的實數解為-0.21474642157167318650910503113932

7樓:nexus科技

請參考以下matlab**。注意應用solve()函式的格式。例如solve(f(x)=0,x)可以簡寫成以下形式:solve(f(x))

執行如下matlab**:

% ***************===

syms x;

solve(det([5*x 2 1; -1 4*x 2; 2 -3 10*x]))

eval(ans)

%********************執行結果如下:

ans =

-0.2147

0.1074 + 0.4946i

0.1074 - 0.4946i

8樓:真

clear;clc;

syms x

solve(det([5*x 2 1;-1 4*x 2;2  -3 10*x])==0,x)

a=solve(det([5*x 2 1;-1 4*x 2;2  -3 10*x])==0,x, 'maxdegree', 3)

vpa(a)

double(a)

9樓:匿名使用者

用變數精度演算法(vpa)現在顯示的一個方程的根,比如

關於matlab solve的一個問題

10樓:匿名使用者

實際上 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');

eval([x1 y1])

11樓:匿名使用者

樓上的分析有道理,但加eval([x1 y1]) 還是不能解決問題

按樓主的要求,應該是加x1=eval([x1]);y1=eval([y1]);

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

12樓:

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執行結果寫入檔案

a 1,2,3,4,5,6,7,8,9 fp fopen d ztq.txt wt for i 1 9 fprintf fp,d a i endfclose fp 將陣列a匯入 到d盤中的版ztq.txt中。權 最初等的函式是fprintf 高階函式有csvwrite和dlmwrite 如何用mat...

MATLAB中如何用for迴圈將結果代入矩陣中

推薦的做法是 1.如果每次迴圈產生等長的行向量,就把每次產生的行向量作為矩陣的一行,行標就是當前迴圈數 2.如果每次迴圈產生的向量不等長,就把每次產生的行向量作為cell陣列的一個元素,下標就是當前迴圈數。錯在維數不一致,看看,f的大小是1x10,那麼w的維數也是1x10,而a,b,c的大小都是2x...

matlab迴圈並將每次迴圈的結果輸出到同一中

問題bai二 fid fopen data.txt a 新建 若不du 存在 或開啟一個名為data.txt的檔案for fprintf fid,5d d d為每 zhi次要寫入的數dao 據,專 5d 控制資料寫入的格式 endfclose fid 操作屬 完成後,關閉檔案 matlab中怎麼實現...