matlab符号求解器:如何在答案中包含点运算符
Posted
技术标签:
【中文标题】matlab符号求解器:如何在答案中包含点运算符【英文标题】:matlab symbolic solver: how to include the dot operator in the answer 【发布时间】: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 - 是的。我删除了我的评论。 【参考方案1】:我想你要找的是matlabFunction
:
det_ans_func=matlabFunction(det_ans)
应该给你一个接受向量输入的函数(只要它们都是正确的大小等)。你只需要检查输入的顺序。
【讨论】:
这会实现元素乘法吗?我只是好奇。我以前从未使用过matlabFunction
!
它将符号表达式转换为匿名函数,接受向量输入并进行元素操作。
酷。谢谢你的提示!我今天学了些新东西。 +1。
是的,我很高兴知道! +1【参考方案2】:
没关系,按原样评估det_ans
确实会导致元素操作。只需选择要选择的方程式(即eval(det_ans(1))
)。
【讨论】:
我不明白这如何回答这个问题?给定向量a
、b
、c
、p
和q
,这将如何评估det_ans
?
它没有回答我的问题,但解决了我的最终目标(元素操作)。 det_ans
是一个符号方程。如果您定义向量数字条目(不再是符号),您可以使用eval
来评估det_ans
,如上所示。
eval
很慢,使用matlabFunction
会快很多倍。以上是关于matlab符号求解器:如何在答案中包含点运算符的主要内容,如果未能解决你的问题,请参考以下文章
如何链接到markdown文件(目录)中包含点(。)或逗号(,)的标题?