Как можно использовать векторные элементы с индексацией в символическом выражении MATLAB? - PullRequest
0 голосов
/ 10 апреля 2019

Я хотел бы создать функцию 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 голосов
/ 11 апреля 2019

Если вы проверите результат 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 .

...