Функция Matlab Anonymous с несколькими переменными входами, встроенными в цикл - PullRequest
0 голосов
/ 17 сентября 2018

Я хотел бы создать анонимную функцию, которая принимает на вход M> 0 переменных, умножая M анонимных функций на 1 переменную, сохраненную заранее.Мне нужно сделать это итеративно в цикле for, где я не могу явно вставить «x», «y» и т. Д. В качестве входных данных функции.

Позвольте мне привести простой пример того, что я хочучтобы получить без цикла:

f = {@(z) 1;  @(z) (-z.^2+1)};
F1 = @(x,y) f{1}(x) * f{2}(y);
F2 = @(x,y) f{1}(y) * f{2}(x);
F3 = @(x,y) F1(x,y) + F2(x,y);
figure; ezmesh(F3,[-1,1,-1,1]);

Здесь мои 2 переменные x и y, и я могу явно написать, что

  • в F1, f {1} принимает x,и f {2} принимает y (F1 = -y ^ 2 + 1),
  • в F2, f {1} принимает y, а f {2} принимает x (F2 = -x ^ 2 + 1),

и т. Д. F3 (x, y) = (y ^ 2-1) + (x ^ 2-1).

Делая это с циклом и используя varargin, кажется, что порядок входной переменной как-то не "распознан".Это то, что я пытался сделать:

f = {@(z) 1;  @(z) (-z.^2+1)};
% BUILD F1
F1 = @(varargin) 1;
for i = 1:2 
    F1 = @(varargin) F1(varargin{i}) .* f{i}(varargin{i});
end
% BUILD F2
F2 = @(varargin) 1;  k = 2;
for i = 1:2 
    F2 = @(varargin) F2(varargin{i}) .* f{k}(varargin{i});
    k = k-1;
end
% BUILD F3
F3 = @(varargin) F1(varargin{1}) + F2(varargin{2});
figure; ezmesh(F3,[-1,1,-1,1]);

Кажется, что, хотя F1 построен правильно (то есть F1 (x, y) = -y ^ 2 + 1), F2 - нет.Из графика видно, что F2 - это не -x ^ 2 + 1, но опять -y ^ 2 + 1.

Есть идеи об ошибке?Ура!

...