2015-12-14 6 views
-3

У меня есть заявление в программе MATLAB:Что это делает MATLAB заявление сделать

f = @(A)DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus); 

я понял, что f определяется как функция ручки с функцией distancegauss, которая содержит список параметров/ARG, присутствующий внутри скобок ,

Что делает переменная A в @(A)? Имеет ли это значение? Во время просмотра я обнаружил, что переменные в круглых скобках после @ будут входными аргументами для анонимной функции.

Может ли кто-нибудь объяснить, что это делает A? Будет ли эта ручка работать даже без этого A после символа @? Поскольку он уже присутствует в качестве аргумента, который должен быть передан после имени функции.

+0

'A' это просто переменная, точно так, как' х 'будет, когда вы определяете обычные функции (например,' f: x -> x^2'). Ваше объявление означает, что 'f' является анонимной функцией, которая принимает вход' A' и применяет 'DistanceGauss (A, x_axis, Y_target, Y_initial, numOf, modus);' к нему. – BillBokeey

+0

Ваша программа Matlab? Тогда, конечно, вы знаете, что он делает. Если нет, кто написал код? Вы об этом спрашивали? Рассматривали ли вы, как работает анонимная функция, поскольку вы поняли, что это то, с чем вы столкнулись? –

+0

В вашем случае символ '@ (A)' означает, что при вызове 'f' только первый параметр' DistanceGauss' является переменным, а остальные сохраняются постоянными (до значений, которые они были, когда вы определили 'f') – Dan

ответ

0

анонимная функция должна быть определена таким образом, как:

sqr = @(x) x.^2; 

, в котором x показывает переменную функции и не имя для него (это называется анонимным!).

Хотя вы можете сделать что-то вроде этого:

c = 10; 
mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y)); 
[x,y] = mygrid(pi,2*pi); 

, в котором вы изменяющее существующую функцию ndgrid, чтобы сделать новую анонимную функцию.

В вашем случае также:

f = @(A)DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus); 

Это новая анонимная функция, изменяя функцию DistanceGauss, что вы можете иметь одну переменную A.

Если удалить (A) из кода, то f будет дескриптор существующей функции DistanceGauss:

f = @DistanceGauss; 

Теперь вы можете оценить функцию, просто используя ручку:

f(A,x_axis,...) 
+0

Последняя часть вашего ответа неверна. Вы должны всегда иметь() после @ в анонимной функции. f = @DistanceGauss ... просто даст ошибку. Вы можете сделать f = @() ... тогда просто вызовите f без входов или f = @ (A, x_axis, Y_target ...), если вы хотите ввести все значения. – nivag

+0

@nivag Последняя часть больше не анонимна: проверьте это: 'h = @ones; a = h() ' – NKN

+0

Да, но вы не можете делать h = @ ones (x); ч (х); что вы подразумеваете в своем ответе. h = @ те же, что и h = @(); – nivag

0

Ваш код создаст анонимную функцию f, которая принимает один вход A. В частности, f вызовет функцию DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus);, где значение A - это то, что вы вводите с f(A), а другие входы должны уже существовать в вашей рабочей области и будут переданы функции. Примечание: если другие переменные не существуют, вы должны получить сообщение об ошибке при вызове f.

Теперь разумный вопрос, почему вы хотите сделать это, вы можете просто позвонить DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus); напрямую с любыми значениями, которые вы хотите, не беспокоясь о том, существуют ли некоторые из них.

Есть две основные причины, по которым я могу думать, почему вы это сделаете (я уверен, что есть и другие). Во-первых, для простоты, когда ваши другие входы не изменяются, и вы не хотите, чтобы они повторяли их или пользователи случайно меняли их.

Другой причиной, по которой вы хотели бы это, является оптимизация/минимизация функции, например, с помощью fminsearch. Функции оптимизации Matlab будут варьироваться во всех входах. Если вы хотите изменить только некоторые из них, вы можете использовать этот вид синтаксиса для уменьшения количества входных переменных.

Что касается того, что A действительно в вашем случае это будет зависеть от того, что он делает в DistanceGauss, что не является стандартной функцией MATLAB, поэтому я предлагаю вам ознакомиться с кодом для этого.

0

"F ()" или "Р " или "Функция A" здесь имеет ручку "е"
DistanceGauss() здесь является еще одной функцией, которая была определена в другом месте ваш код.

Перед созданием функции x_axis, Y_target, Y_initial, numOf, & modus вы должны установить f. Эти аргументы останутся неизменными для функции f, даже если вы попытаетесь установить их позже. 'A' хотя, отличается. Вы не устанавливаете его перед выполнением функции. В дальнейшем вы можете использовать все значения A, например, если вы построили функцию или получили интеграл от функции. В этом случае он будет выполнять функцию DistanceGauss на каждом значении «», (хотя мы не можем видеть, что здесь DistanceGauss функция делает.)

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