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

时间:2019-04-10 19:44:41

标签: matlab symbolic-math

我想创建带有矢量输入的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);

使用这种方法,您需要将方程式当作一个字符串来处理(这是可能的,但不实际...),然后将其重新转换为符号表达式。

1 个答案:

答案 0 :(得分: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手动创建文件结构。