从MuPAD提取多项式到Matlab
Extracting polynomial from MuPAD to Matlab
我在 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
有什么方便的方法吗?
P.S。 Matlab R2015a
您可以使用 generate::MATLAB
函数为任何表达式创建 MATLAB 代码。
要打印函数调用(不带引号),您可以使用 print
。
一个小例子:
p := -7*X^2 + 8*X + 1
print(Unquoted, generate::MATLAB(p))
returns
t0 = X*8.0-X^2*7.0+1.0;
这是此函数的正确 MATLAB 语法。
我相信您想为此转换域 DOM_POLY
to a general symbolic expression. You can use the expr
函数的 MuPAD 对象。我假设您已经在此处的 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)
哪个returns
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
将任一形式(上面的 p1
或 p2
)转换为矢量化浮点函数句柄,例如:
f = matlabFunction(p1,'Vars',{b k X})
哪个returns
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
我在 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
有什么方便的方法吗? P.S。 Matlab R2015a
您可以使用 generate::MATLAB
函数为任何表达式创建 MATLAB 代码。
要打印函数调用(不带引号),您可以使用 print
。
一个小例子:
p := -7*X^2 + 8*X + 1
print(Unquoted, generate::MATLAB(p))
returns
t0 = X*8.0-X^2*7.0+1.0;
这是此函数的正确 MATLAB 语法。
我相信您想为此转换域 DOM_POLY
to a general symbolic expression. You can use the expr
函数的 MuPAD 对象。我假设您已经在此处的 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)
哪个returns
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
将任一形式(上面的 p1
或 p2
)转换为矢量化浮点函数句柄,例如:
f = matlabFunction(p1,'Vars',{b k X})
哪个returns
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