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)))。

【讨论】:

我不明白这如何回答这个问题?给定向量abcpq,这将如何评估det_ans 它没有回答我的问题,但解决了我的最终目标(元素操作)。 det_ans 是一个符号方程。如果您定义向量数字条目(不再是符号),您可以使用eval 来评估det_ans,如上所示。 eval 很慢,使用matlabFunction 会快很多倍。

以上是关于matlab符号求解器:如何在答案中包含点运算符的主要内容,如果未能解决你的问题,请参考以下文章

如何链接到markdown文件(目录)中包含点(。)或逗号(,)的标题?

MATLAB符号运算

MATLAB的符号运算变量如何创建?

MATLAB 符号变量表达式 + 方程求解

非线性方程(组):一维非线性方程插值迭代方法 [MATLAB]

背包问题怎样给出符号说明,目标函数和约束条件