【问题标题】:Extracting polynomial from MuPAD to Matlab从 MuPAD 提取多项式到 Matlab
【发布时间】:2015-10-28 13:57:25
【问题描述】:

我在 MuPAD 中有 poly(一个变量,几个参数)。我想以某种方式将其提取到 Matlab。

MuPAD 中的 poly 示例:

poly((-7/(2*k^2))*X^2 + ((7*(b + k))/(2*k^2) + (7*(b + 2*k))/(2*k^2) + 4/k)*X + (- (b + k)*((7*(b + 2*k))/(2*k^2) + 4/k) + 1), [X])

我想在 Matlab 中得到它:

x*((7*(b + k))/(2*k^2) + (7*(b + 2*k))/(2*k^2) + 4/k) - (7*x^2)/(2*k^2) - (b + k)*((7*(b + 2*k))/(2*k^2) + 4/k) + 1

有什么方便的方法吗? 附: Matlab R2015a

【问题讨论】:

  • 致将其标记为不清楚的人:这个问题非常清楚 - 也许您从未使用过 MuPAD?

标签: matlab export polynomial-math mupad


【解决方案1】:

我相信您想将域DOM_POLY 的MuPAD 对象转换为一般的符号表达式。您可以为此使用expr 函数。我假设您已经在 Matlab 中工作了(在 MuPAD 中,它只是 expr(p1)):

syms b k X
p1 = feval(symengine,'poly',(-7/(2*k^2))*X^2 + ((7*(b + k))/(2*k^2) + (7*(b + 2*k))/(2*k^2) + 4/k)*X + (- (b + k)*((7*(b + 2*k))/(2*k^2) + 4/k) + 1),'[X]')
p2 = feval(symengine,'expr',p1)

返回

p2 =

X*((7*b + 7*k)/(2*k^2) + (7*b + 14*k)/(2*k^2) + 4/k) - (b + k)*((7*b + 14*k)/(2*k^2) + 4/k) - (7*X^2)/(2*k^2) + 1

您还可以使用matlabFunction 将任一形式(上面的p1p2)转换为矢量化浮点函数句柄,例如:

f = matlabFunction(p1,'Vars',{b k X})

返回

f = 

    @(b,k,X)-(b+k).*(1.0./k.^2.*(b.*7.0+k.*1.4e1).*(1.0./2.0)+4.0./k)+X.*(1.0./k.^2.*(b.*7.0+k.*7.0).*(1.0./2.0)+1.0./k.^2.*(b.*7.0+k.*1.4e1).*(1.0./2.0)+4.0./k)-X.^2.*1.0./k.^2.*(7.0./2.0)+1.0

【讨论】:

    【解决方案2】:

    您可以使用generate::MATLAB 函数为任何表达式创建 MATLAB 代码。 要打印函数调用(不带引号),您可以使用print。 一个小例子:

    p := -7*X^2 + 8*X + 1
    print(Unquoted, generate::MATLAB(p))
    

    返回

    t0 = X*8.0-X^2*7.0+1.0;
    

    这是该函数的正确 MATLAB 语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2016-02-25
      • 2019-07-05
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多