Matlab 将符号转换为数字
此代码来自MATLAB。所以,我有3个方程,我做了3个未知数,但当我试图求解未知数时,它们只是得到[1x1 sym],我尝试了很多东西,比如double或vpa,但仍然不起作用。请大家帮忙,先谢谢大家。这是我到现在为止的代码Matlab 将符号转换为数字,matlab,Matlab,此代码来自MATLAB。所以,我有3个方程,我做了3个未知数,但当我试图求解未知数时,它们只是得到[1x1 sym],我尝试了很多东西,比如double或vpa,但仍然不起作用。请大家帮忙,先谢谢大家。这是我到现在为止的代码 h=3.5; % height in meter m=20; % mass of traffic light in kg W=m*9.81; %Weight of the traffic light Bx=3
h=3.5; % height in meter
m=20; % mass of traffic light in kg
W=m*9.81; %Weight of the traffic light
Bx=3;
By=4;
Bz=(4-h);
Cx=-6;
Cy=-3;
Cz=(6-h);
Dx=4;
Dy=-3;
Dz=(4-h);
AB=[Bx By Bz]; %Position vector of AB
AC=[Cx Cy Cz]; %Position vector of AC
AD=[Dx Dy Dz]; %Position vector of AD
Mag_AB= sqrt(Bx^2+By^2+Bz^2); %Magnitude of AB
Mag_AC= sqrt(Cx^2+Cy^2+Cz^2); %Magnitude of AC
Mag_AD= sqrt(Dx^2+Dy^2+Dz^2); %Magnitude of AD
u_AB= AB/Mag_AB; %Unit vector of AB
u_AC= AC/Mag_AC; %Unit Vector of AC
u_AD= AD/Mag_AD; %Unit vector of AD
u_W=[0 0 -1];
syms B C D
eq1=(u_AB(1)*B+u_AC(1)*C+u_AD(1)*D);
eq2=(u_AB(2)*B+u_AC(2)*C+u_AD(2)*D);
eq3=(u_AB(3)*B+u_AC(3)*C+u_AD(3)*D)-u_W(1)*W;
sol=solve(eq1,eq2,eq3,B,C,D)
它给我的答案是
溶胶=
B: [1x1 sym]
C: [1x1 sym]
D: [1x1 sym]
你真的不应该用符号来解这些方程。它看起来像一组,所以当你用符号方程求解时,对于bc和D,结果是微不足道的(全部为零)。您可以使用
svd
函数获取特征值并求解齐次方程组。在你的情况下,这将是
A = [u_AB' u_AC' u_AD'];
[u, s, v] = svd(A);
B = v(1, end);
C = v(2, end);
D = v(3, end);
residuals = A * v(:, end);
不过,我会注意你是如何建立方程的。尤其是eq3
中的-u_W(1)*W
术语。你是说-u_W(3)*W
?如果是这样,您必须将该术语添加到上面的A
矩阵中。无论如何,我希望一切顺利
(u_AB(1)*B+u_AC(1)*C+u_AD(1)*D)
eq1 = (u_AB(1)*B+u_AC(1)*C+u_AD(1)*D) == 1;
现在是方程式
eq1 = (6*101^(1/2)*B)/101 - (12*205^(1/2)*C)/205 + (8*101^(1/2)*D)/101 == 1
s = solve(eq1, B,C,D)
s.B
得到这个:
ans =
101^(1/2)/6
在这里阅读更多关于此的信息它看起来不像C/C++代码,您看到的是一个
struct
表示,它将显示为您为对象显示的那样。您需要访问每个元素(B=sol.B
),现在如果显示此元素,您将看到您期望的编号disp(sol.B)
,这在solve
的文档中有说明。