如何在MATLAB符号表达式中使用带索引的矢量元素?

问题描述 投票:0回答:1

我想用矢量输入创建一个MATLAB函数。问题是matlabFunction()创建的函数的输入只有标量输入。

x = sym('x',[2 1]);
y = sym('y',[2 1]);
f=x(1)+x(2)+y(1)+y(2);
matlabFunction(f,'file','testFunction.m');
matlabFunction(f,'file','testFunction.m','vars',[x,y]); % tried with different options but doesn't work

这是结果(使用x1,x2,y1,y2输入而不是x,y):

function f = testFunction(x1,x2,y1,y2)
%TESTFUNCTION
%    F = TESTFUNCTION(X1,X2,Y1,Y2)

%    This function was generated by the Symbolic Math Toolbox version 8.2.
%    10-Apr-2019 21:28:40

f = x1+x2+y1+y2;

在MATLAB中是否有解决此问题的方法?或者我是否需要编写一个程序打开文件作为txt并替换单词...

更新:我设法解决了这个问题。对我来说,最好的解决方案是odeToVectorField()函数。

手动将向量输入提供给matlabFunction()创建的函数更加困难。一种方法如下:

syms y;
f=str2sym('y(1)+y(2)');
matlabFunction(f,'File','fFunction','Vars',y);

使用此方法,您需要将方程式操作为字符串(这可能但不实用......),然后将其重新转换为符号表达式。

matlab symbolic-math
1个回答
0
投票

如果你查看f=x(1)+x(2)+y(1)+y(2)的结果,你会发现它也是标量。做简单的测试:

x = sym('x',[2 1]);
y = sym('y',[2 1]);
f=x(1)+x(2)+y(1)+y(2);
disp(f)

结果是x1 + x2 + y1 + y2。所以你的matlabFunction表达没有错,它只是保存你给的。如果你需要以x(1)+x(2)+y(1)+y(2)的形式存储它,你需要重写你的f表达式,这样它将以矢量形式存储,直到传递给matlabFunction。或者,您也可以使用fprintflook docs手动创建文件结构。

© www.soinside.com 2019 - 2024. All rights reserved.