(MATLAB) понять Quadl против Quadv - PullRequest
3 голосов
/ 21 февраля 2012

Я пытаюсь понять, почему такой звонок

G = const * quadv(fun,a,b,tol)

возвращает значения, отличные от

lenB = length(b)
for  1 = 1:lenB
    G(i) = const .* quadl(fun,a,b,tol)
end

а как добиться того, чтобы оба вызова возвращали одинаковые значения?

EDIT: Я хотел бы также запустить quadl быстрее для массивов. Поэтому я бы сформулировал вопрос выше:

Если это возможно, как вызвать quadl также для массивов (аналогично вызову quadv выше) и таким образом повысить производительность вычислений?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Если вы посмотрите на помощь quadl и quadv, вы увидите, что quadl использует другой алгоритм для интеграции функции.

Численный анализ почти никогда не дает идеальных результатов, поэтому вы не можете ожидать, что получите идентичные результаты.

2 голосов
/ 21 февраля 2012

Matlab's quadl использует адаптивную квадратуру Лобатто; quadv использует адаптивное правило Симпсона.

Качество получаемого ответа может зависеть от функции, которую вы принимаете. Как выглядит ваш тест fun?

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

Эти два метода различны - квадратура Гаусса отличается от правила Симпсона:

http://en.wikipedia.org/wiki/Gaussian_quadrature

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