【发布时间】:2014-11-19 01:16:16
【问题描述】:
我正在求解包含未知变量d 的矩阵的det。变量
a b c p q B C 是我已知的变量,其中小写/大写对应于距离/角度。在其代码下方:
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)
我的初始符号表达式实际上是数值列向量,所以我的想法是在det_ans 上使用eval 并让它输出正确的列向量(逐个元素地执行所有操作)。如果不使用 for 循环也能实现我的最终目标,我将不胜感激。
【问题讨论】:
-
@rayryeng 我认为他的意思是元素乘法的点运算符。
-
@David - 是的。我删除了我的评论。
标签: matlab