Сокращение длинных выражений - PullRequest
1 голос
/ 01 февраля 2012

Я хочу создать дескриптор функции для функции:

f = @(x) (x-1)*(x-2)*...*(x-50);

Как я могу сделать это в MATLAB без ввода всех 50 терминов?

Ответы [ 2 ]

5 голосов
/ 01 февраля 2012

Вот векторизованное решение:

y = prod((x-[1:50]))

Или, если вы хотите анонимную функцию:

f = @(x) ( prod((x-[1:50])) )

Кстати, это может быть не быстрее, чем решение @Chris (что хорошо, и я проголосовал за него) из-за JIT-ускорителя Matlab.

1 голос
/ 01 февраля 2012

Вы можете обернуть это в функцию.Например,

function y = myfunc(x, n)
    y = 1.;
    for i = 1:n
        y = y*(x-i);
    end
end

Определенная вами функция в основном является произведением последовательности , которые тривиально записываются в виде for циклов.

В вашем случае выВы хотите вычислить этот результат для 50 терминов, поэтому вы можете просто использовать y = myfunc(x, 50) или, если вы хотите, чтобы это был дескриптор функции, вы можете определить

f = @(x) myfunc(x, 50);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...