Matlab 将符号转换为数字

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

此代码来自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;
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
    的文档中有说明。