2013-12-16 2 views
2

Я не понимаю, анонимная функции в следующем коде:Использования анонимной функции с feval

x = 0.25 * randn(3, 1); 
y = 0.25 * randn(3, 1); 
h = 0.1*randn(3, 1); 

interpolate = @(x, y, h, x_new, y_new) ... 
    feval(@(int) int(x_new, y_new), ... 
      TriScatteredInterp([-1; -1; 1; 1; x], ... 
          [-1; 1; -1; 1; y], ... 
          [0; 0; 0; 0; h])); 

У меня есть некоторое представление о анонимных функциях и функциях feval, но я искал в MatLab документы и не найти пример с использованием нескольких знаков @. Также параметр feval имеет анонимную функцию.

Можно ли дать некоторые намеки на это?

+0

Вы читали http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html? –

+1

Я не очень понимаю, как использовать feval @fucntion как параметр – user1279988

ответ

2

Итак, вы, вероятно, работал, что это создает анонимную функцию с ручкой interpolate:

interpolate = @(x, y, h, x_new, y_new)...

interpolate принимает эти пять входов и вызывает feval. Теперь здесь немного сложно, потому что feval сам содержит другую анонимную функцию.

@(int) int(x_new, y_new), означает, принимает вход int и возвращает выход int(x_new,y_new). Дополнительный вход для feval, в данном случае TriScatteredInterp, принимается за вход этой анонимной функции. Это не ссылка на встроенную функцию int (как может быть, если вы что-то видели feval(@int...).

Так что interpolate делает в основном эквивалентны делать это для любого заданного набора входов:

tsi = TriScatteredInterp([-1; -1; 1; 1; x], ... 
          [-1; 1; -1; 1; y], ... 
          [0; 0; 0; 0; h])); 

tsi(x_new,y_new) 

Вы можете проверить это, сравнивая выход tsi(x_new,y_new) с выходом interpolate(x, y, h, x_new, y_new).

+0

@ (int) int (x_new, y_new), я все еще немного смущен. я видел анонимную функцию doc и вижу этот стиль «sqr = @ (x) x.^2;», поэтому здесь @ (int) int (x_new, y_new), первым «int» должен быть параметр, последний - int "должна быть операция sometype. Осторожно, это не так. как дела? – user1279988

+0

Две ссылки 'int' одинаковы. Выполняемая операция возвращает вывод' int (x_new, y_new) ', для любого' int' ('int' может быть 2D-матрица, функция, которая принимает два значения, и т.д). Анонимные функции гибки. Если вы напишете 'f = @ (x) x (5)', то будут работать 'f (@ones)' и 'f (y)'. Первый вызывает функцию 'ones (5)', вторая возвращает пятое значение переменной 'y'. – nkjt

+0

У меня вопрос, что эффект TriScattedInterp? как TriScattedInterp установил правило функции при правиле «(x, y) to h»? Вот. – user1279988

Смежные вопросы