Сделать бета-сокращение в Matlab?

Как вы можете сделать бета-сокращение, как показано ниже, в Matlab?

введите здесь описание изображения

Моя цель состоит в том, чтобы избежать дублирования заданий и ленивых оценок - возможно, связанных с вопросом многошаговые анонимные функции< /а>.

По-видимому, большинство функциональных возможностей поддерживается только в Matlab2013B.


person hhh    schedule 23.10.2013    source источник
comment
Ваша ссылка о функциональном программировании относится к символическому набору инструментов, а не к стандартному матлабу. Существует некоторая ограниченная поддержка функционального программирования в самом Matlab (анонимные функции, сопоставление функций с массивами. Вам этого достаточно?   -  person Bas Swinckels    schedule 23.10.2013
comment
@hhh Не могли бы вы пояснить, почему ответ Дэна не подходит? Кажется, это нормально для вашего вопроса.   -  person Léo Léopold Hertz 준영    schedule 11.11.2013


Ответы (2)


Это то, что вы имеете в виду:

x = 3;
f = @(y)(x+x*y);

Теперь f(y) — это функция 3+3*y.

Таким образом, вы можете поместить это в цикл, например:

f = {};
for x = 1:5
   f{x} = @(y)(x+x*y);
end;

А затем найдите f(2) для каждого из этих значений x.

cellfun(@(y)y(2), f)

ans =   
    3    6    9   12   15
person Dan    schedule 23.10.2013
comment
@hhh Я не понимаю, как это связано? Пожалуйста, разместите ссылку. - person Dan; 23.10.2013
comment
@hhh Ты включил MuPAD? У вас есть символический набор инструментов? Я все еще не вижу отношения к вашему ОП - person Dan; 23.10.2013
comment
@hhh, вы можете сделать оператор if: blogs.mathworks.com/loren/category/ функциональное программирование - person Dan; 23.10.2013
comment
Вы имели в виду что-то вроде iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}(); hh=@(x)iif(x==1, x, 0); hh(1); работает, но не hh(1000)?! - person hhh; 23.10.2013
comment
@hhh Вы пытаетесь проверить, является ли число 1? Тогда вам нужно было использовать hh=@(x)iif(x==1, x, true, 0);, а true, которое я добавил, — это пункт else. Я до сих пор не понимаю, какое это имеет отношение к вашему ОП. Конечно, мой ответ отвечает на ваш реальный вопрос о том, как заставить эту лямбда-функцию? - person Dan; 24.10.2013

Чтобы повторить ответ Дэна, вот что я получаю в Октаве:

octave:1> f = @(x) @(y) x + y
f =
   @(x) @(y) x + y

octave:2> g = f (2)
g =
   @(y) x + y

octave:3> g (3)
ans =  5

Но я не знаю о Matlab...

person lukstafi    schedule 24.10.2013