MATLAB интеграция анонимной функции - PullRequest
1 голос
/ 29 января 2011

Я хотел спросить, как я могу написать это в MATLAB.

Я хочу интегрировать fp(z) с z(0,x).Я попробовал это:

fpz=@(z) f1x(z) ./ quadl(f1x(z),0,1);

sol=int(fpz,0,x)  --> i also tried sol=quadl(fpz,0,x)
y=solve('y=sol',x)

xf=@ (y) y ;   -->this is the function i want

, где f1x=@ (x) 1 ./(x.^2+1) и fpx = @(x) f1x(x) ./ quadl(f1x,0,1);

, но это не работает.


Здравствуйте, спасибо за помощь.Проблема в том, что я хочу аналитическое решение и не могу его получить.Я хочу, чтобы f1x дал мне "1 / x ^ 2 + 1", fpx "4 / pi * (1 + x ^ 2) и fpz" 4ArcTan (x) / pi "вместо того, чтобы давать мне" f1x = @ 1./ (x ^ 2 + 1) ".. С кодом, который вы отправляете мне, все та же проблема. Мне удалось войти в это:

f1x = @ (x) 1 ./(x.^2+1) fpx = @ (x) f1x (x) ./ quadl (f1x, 0,1) f2z = @ (z) 1 ./(z.^2+1); fpz = @ (z) fpx (z) ./ quadl (f2z, 0,1) sol = int (fpz (z), z, 0, x) y = решить (подпункты ('y = sol'), x) xf = @ (y) y

«sol» и «y =» дают мне аналитический ответ, но это неправильно, потому что я предполагаю, что f1x и fpx, fpz не возвращается в аналитически выражениях.

1 Ответ

0 голосов
/ 06 февраля 2011

0 Ваше определение fpz не имеет никакого смысла; как уже сказал Марчин, вы пытаетесь интегрировать что-то, что не является функцией. Это не должно быть проблемой для вашей альтернативной версии с f2z. Я думаю, что код в исходном вопросе должен был иметь только f1x, а не f1x (z) в первой строке.

1 Ваша исправленная версия с f2z имеет другую проблему: теперь в fpz вы фактически не предоставляете функцию с аргументом.

Следующий код кажется вам тем, о чем вы думали, и он прекрасно работает для меня (в MATLAB R2008a, как это бывает, но в других версиях это не должно отличаться):

f1x = @(x) 1 ./ (x.^2+1);
fpx = @(x) f1x(x) ./ quadl(f1x,0,1);
fpz = @(z) fpx(z) ./ quadl(fpx,0,1);

Теперь при вычислении fpz (3), например, вращается примерно полсекунды (на моем старом медленном ноутбуке) и возвращает 0,1273.

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

У вас есть дополнительные вопросы о функциях «solve» и «int» в Symbolic Math Toolbox. Вы должны принять следующее с небольшим количеством соли, потому что у меня нет этого набора инструментов, и я полагаюсь на онлайн-документацию для него.

3 Вы вводите имена функций, которые вы определили в MATLAB, в функции Symbolic Math Toolbox. Я не думаю, что это должно работать; «int» и «solve» ожидают явных алгебраических выражений, а не функций MATLAB. (И, кроме того, все ваши функции используют числовое интегрирование - quad, quadl и т. Д. - и нет никакой возможности, чтобы символические функции могли сделать что-нибудь полезное с этим.)

Наконец: когда вы задаете вопросы такого рода, полезно, если вместо того, чтобы "это не работает", вы говорите как это не работает. Например, ваш последний комментарий гораздо более полезен («он дает мне ...», за которым следует фактический вывод, который вы получаете из MATLAB).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...