我正在解决包含未知变量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循环,我将不胜感激任何其他完成我最终目标的答案。
答案 0 :(得分:2)
我认为你要找的是matlabFunction
:
det_ans_func=matlabFunction(det_ans)
应该给你一个接受矢量输入的函数(只要它们都是正确的大小等)。你只需要检查输入的顺序。
答案 1 :(得分:0)
没关系,按原样评估det_ans
会导致元素操作。只需选择要选择的等式(即eval(det_ans(1))
)。