【问题标题】:Matlab symbolic function conversion without dot for matrix operationMatlab符号函数转换无点矩阵运算
【发布时间】:2016-11-14 09:56:46
【问题描述】:

将符号表达式转换为matlabFunction时,表达式如

x=sym('x')
f=- x^3/6 + x
g=matlabFunction(f)

-> @(x)x-x.^3.*(1.0./6.0) 

这不是我想要的,因为 x 将是一个矩阵,而我的应用程序需要实际的矩阵乘法,例如 x^3 而不是 x.^3 的点积形式

让它工作的唯一方法是使用匿名函数,即

g=@(x) - x^3/6 + x

->@(x)-x^3/6+x

但是,匿名函数的问题是我不能使用替换,而是输入整个公式,即

g=@(x) f 

-> @(x)f  which shows that expression substitution does not work

简而言之,我需要解决其中一个技术难题:(1)如果我使用matlabFunction,如何在转换后删除所有点?或者 (2) 如果我使用匿名函数,如果我已经为表达式定义了 'f',如何绕过输入符号表达式?

我完全迷路了,希望熟悉matlab的人能给我2美分。

谢谢!

【问题讨论】:

  • 好的,我找到了方法:g=@(x) eval(f)。问题解决了!
  • 实际上,它不起作用:(我发现使用 eval(f) 将使匿名函数将任何乘法视为点积...

标签: matlab matrix matrix-multiplication symbolic-math


【解决方案1】:

计算匿名函数时可以将sym对象转为字符串:

g=@(x)eval(char(f))

或者,您可以使用以下代码

h=eval(['@(x)' char(f)])

而不是matlabFunction

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多