Cell Array и функциональная ручка
Посмотрите на приведенный ниже код:
for i=1:2
if i == 1
F{i}= @(x) x(i)+x(i+1);
else
F{i}= @(x) x(i-1)-x(i)+2;
end
end
Я хотел сохранить в F что-то вроде F={@(x) x(1)+x(2);@(x) x(1)-x(2)+2;}
, Как мне отредактировать мой код, чтобы добиться этого? Может кто-нибудь мне помочь?
1 ответ
Решение
Я думаю, что это проблема отображения, а не функциональная проблема.
Делая это:
for i = 1:2
if i == 1
F{i}= @(x) x(i)+x(i+1);
else
F{i}= @(x) x(i-1)-x(i)+2;
end
end
на самом деле дает правильные результаты:
>> F{1}([1 2 3 4])
ans =
3 % == x(1)+x(2), i==1
>> F{2}([1 2 3 4])
ans =
1 % == x(1)-x(2)+2, i==2
Но функции отображаются "неправильно":
>> F
F =
@(x)x(i)+x(i+1) @(x)x(i-1)-x(i)+2
Если вы хотите, чтобы они также отображались правильно, вам придется запутаться:
for i=1:2
if i == 1
F{i} = str2func(['@(x)x(' num2str(i) ')+x(' num2str(i+1) ')']);
else
F{i} = str2func(['@(x)x(' num2str(i-1) ')-x(' num2str(i) ')+2']);
end
end
Результаты:
>> F
F =
@(x)x(1)+x(2) @(x)x(1)-x(2)+2