matlab符号求解器:如何在答案中包含点运算符

时间:2014-11-19 01:16:17

标签: matlab

我正在解决包含未知变量d的矩阵的det。变量 a b c p q B C是我已知的变量,其中lower / uppercase对应于距离/角度。在其代码下面:

syms a b c p q B C positive;
d = sym('d','positive');
det_eqn = det([...              %cayley_menger_mat
    0    a^2  p^2  d^2  1;...
    a^2  0    b^2  q^2  1;...
    p^2  b^2  0    c^2  1;...
    d^2  q^2  c^2  0    1;...
    1    1    1    1    0]);
det_ans = solve(det_eqn,d,'Real',true);

解决后,matlab返回:

det_ans =
    ((((a + b + p)*(b + c + q)*(a + b - p)*(a - b + p)*(b - a + p)*(b + c - q)*(b - c + q)*(c - b + q))^(1/2) - b^4 + a^2*b^2 + a^2*c^2 + b^2*c^2 - a^2*q^2 + b^2*p^2 + b^2*q^2 - c^2*p^2 + p^2*q^2)/(2*b^2))^(1/2)
    ((a^2*b^2 - b^4 - ((a + b + p)*(b + c + q)*(a + b - p)*(a - b + p)*(b - a + p)*(b + c - q)*(b - c + q)*(c - b + q))^(1/2) + a^2*c^2 + b^2*c^2 - a^2*q^2 + b^2*p^2 + b^2*q^2 - c^2*p^2 + p^2*q^2)/(2*b^2))^(1/2)

我的问题是:是否有一个选项让matlab在其答案中输出点运算符,所以它看起来像这样?

((((a + b + p).*(b + c + q).*(a + b - p).*(a - b + p).*(b - a + p).*(b + c - q).*(b - c + q).*(c - b + q)).^(1/2) - b.^4 + a.^2.*b.^2 + a.^2.*c.^2 + b.^2.*c.^2 - a.^2.*q.^2 + b.^2.*p.^2 + b.^2.*q.^2 - c.^2.*p.^2 + p.^2.*q.^2)./(2.*b.^2)).^(1/2)

我的初始符号表达式实际上是数字列向量,所以我的想法是在eval上使用det_ans并让它输出正确的列向量(逐个元素地执行所有操作)。如果不使用for循环,我将不胜感激任何其他完成我最终目标的答案。

2 个答案:

答案 0 :(得分:2)

我认为你要找的是matlabFunction

det_ans_func=matlabFunction(det_ans)

应该给你一个接受矢量输入的函数(只要它们都是正确的大小等)。你只需要检查输入的顺序。

答案 1 :(得分:0)

没关系,按原样评估det_ans会导致元素操作。只需选择要选择的等式(即eval(det_ans(1)))。