我想用矢量输入创建一个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);
使用此方法,您需要将方程式操作为字符串(这可能但不实用......),然后将其重新转换为符号表达式。
如果你查看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
。或者,您也可以使用fprintf
,look docs手动创建文件结构。