我想创建带有矢量输入的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);
使用这种方法,您需要将方程式当作一个字符串来处理(这是可能的,但不实际...),然后将其重新转换为符号表达式。
答案 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
。或者,您也可以使用fprintf
,look docs手动创建文件结构。