0

嗨,我需要使用 sym 计算一些向量表达式,然后将结果转换为数字。我需要转换这个脚本的底部,以便将符号转换为数字,我不知道该怎么做,我尝试的任何事情都失败了。我总是遇到错误。我需要你的帮助。

这个脚本应该这样做:

syms  v1 v2 v3
syms v1x v1y v1z v2x v2y v2z v3x v3y v3z
syms x1 y1 z1 x2 y2 z2 x3 y3 z3
syms i j k
%%Calcul
v1x = v1 * i ;
v1y = v1 * j ;
v1z = v1 * k ;
v2x = v2 * i ;
v2y = v2 * j ;
v2z = v2 * k ;
v3x = v3 * i ;
v3y = v3 * j ;
v3z = v3 * k ;
x_n = zeros(1,3);
y_n = zeros(1,3);
z_n = zeros(1,3);
disp( 'Introduceti punctele de aplicatie, unghiurile in [grade] si coordonatele in [m]:' );
for i=1:3
    x_n(i) = input([ 'x(' ,num2str(i), ') = ' ]);
    y_n(i) = input([ 'y(' ,num2str(i), ') = ' ]);
    z_n(i) = input([ 'z(' ,num2str(i), ') = ' ]);
end
axb = dot(v1,v2);
bxc = dot(v2,v3)
cxa = dot(v3,v1)
%axb, numeric
axb = subs(axb, [v1 v2]);
disp( 'Expresia are valoarea numerica:' );
axb = subs(axb, [i,j,k]))      
%%bxc, numeric
bxc = subs(bxc, [v2 v3], [v_n(2) v_n(3)]);
disp( 'Expresia  are valoarea numerica:' );
bxc = subs(bxc, [i,j,k])
%%cxa, numeric
cxa = subs(cxa, [v3 v1], [v_n(3) v_n(1)]);
disp( 'Expresia are valoarea numerica:' );
cxa = subs(cxa, [i,j,k])
4

2 回答 2

2

subs如果您想用数值代替符号变量,您似乎没有正确使用该函数。让我们看一下您的一小段代码(当事情没有按预期工作时,简化总是很好的,它也使提问变得更容易):

syms v1 v2;
axb = dot(v1,v2); % Takes the dot product of the variable v1 with v2
axb = subs(axb, [v1 v2]); % Substitutes in v1 and v2 to produce [dot(v1,v2) dot(v2,v2)]

我不认为[ v2*conj(v1), v2*conj(v2)]您想要从上面的代码片段中得到什么,是吗?而且肯定没有办法从中得到数字结果。double不会工作。顺便说一句,当您在 Matlab 中说“数字”时,假设您指的是特定的数据类型,即数字类中的数字。见isnumeric。您可能只需要一个符号值 - 一个字符串 - 而不是包含函数和变量的符号表达式。

要获得“数字”输出,请替换值

syms v1 v2;
axb = dot(v1,v2);
V1 = [1 2 3];                       % Doubles
V2 = [sym('pi') sym('exp(1)') 1/3]; % Or you can use symbolic values
axb = subs(axb,{v1,v2},{V1,V2});    % Gives [ pi, 2*exp(1), 1]

Nou 您可以使用double(axb)(或者eval(axb)如果您真的需要)来获取浮点值或vpa(axb)获取符号数。vpa将返回任意精度的符号值。

于 2013-06-02T21:07:19.353 回答
-1

从这个页面来看,答案是你应该使用double命令: http: //www.mathworks.nl/help/symbolic/double.html

如果这不起作用,也许尝试eval.

于 2013-06-02T20:09:34.770 回答