Интеграция с Matlab - PullRequest
       4

Интеграция с Matlab

0 голосов
/ 27 июля 2010

Я хочу решить эту проблему:

альтернативный текст http://img265.imageshack.us/img265/6598/greenshot20100727091025.png

я не хочу использовать "int", я хочу использовать семейство "quad" (quad, dblquad, triplequad) но я не могу. ты можешь мне помочь?

Ответы [ 4 ]

4 голосов
/ 27 июля 2010

Я полагаю, что ваша настоящая проблема более сложна, чем эта тривиальная. Лучшее решение - просто использовать символический интеграл. Почему численное интегрирование сложно?

Численное интегрирование в ОДНОМ измерении обычно требует порядка, скажем, 100 оценок функций. (Точное число будет очень зависеть от требуемой точности, пределов и т. Д.). Это требует, чтобы двумерный интеграл обычно требовал порядка 100 ^ 2 = 10000 срабатываний функции. Таким образом, адаптивный 5-й интеграл потребует порядка 100 ^ 5 = 1e10 оценок функций. (Это только очень приблизительный порядок оценки.) Моя точка зрения, вы просто не хотите этого делать!

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

Кроме того, во многих случаях я вижу людей, желающих сделать числовую интеграцию гауссовского PDF. Убедитесь, что это легко решить, используя вызов erf или erfc в сочетании с преобразованием. Дело в том, что во многих случаях определяются специальные функции, которые значительно уменьшают сложность проблемы.

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

2 голосов
/ 27 июля 2010

Показываемый вами интеграл:

  1. Аналитически решаемо: всегда делайте аналитически то, что вы можете

  2. - равно числу: константные выражения должныбыть исключенным из численных расчетов

  3. непросто вычислить в MATLAB (или очень правильно).

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

Mathematica больше подходит для nD-интеграций, если у вас есть доступ к ней.

1 голос
/ 27 июля 2010

Matlab может сделать символическую интеграцию

>> x = sym('x'); y = sym('y'); z = sym('z'); u = sym('u'); v = sym('v'); 
>> int(int(int(int(int(x+y+z+u+v,1,5),-2,3),0,1),-1,1),0,1)

ans =

180
0 голосов
/ 27 июля 2010

Только что заметил, что вы хотите сделать числовую, а не символьную интеграцию

Если вы посмотрите на источник dblquad и triplequad

>> edit dblquad

, вы увидите, что они просто вызывают более низкие версии.для вас должно быть возможно добавить квад-квад и квинт-квад (или рекурсивно n-квад)

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