Mathcad: Неверно считает определенные интегралы
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Mathcad: Неверно считает определенные интегралы

Mathcad: Неверно считает определенные интегралы

Ответ
Поиск в этой теме
Непрочитано 24.04.2011, 22:44 #1
Mathcad: Неверно считает определенные интегралы
Cyberfighter
 
Регистрация: 24.04.2011
Сообщений: 6

Всем форумчанам, доброго времени суток!
В ходе расчетов в среде Mathcad столкнулся с проблемой - программа порой неверно считает определенные интегралы.
Привожу упрощенный пример, при котором возникают такого рода ошибки (сделано для наглядности, т.к. собственно мой расчет очень сложен для восприятия):

Есть некая функция: a(x):=if(100<x<102,1,0)

т.е. функция равна "1" в диапазоне от 100 до 102 и "нулю" при всех остальных значениях Х. Получается что у функции в двух местах есть разрыв первого рода (напомню, что разрывом первого рода называется точка, для которой правосторонний и левосторонний пределы функции не равны друг другу, но при этом конечны. Если же хотя бы один из пределов бесконечен, то тогда точка называется разрывом второго рода).

Задача: Необходимо вычислить интеграл функции в диапазоне от 0 до 500. Записываю все это дело в Маткаде, программа выдает ответ, что интеграл равен "0". Как так?! Ведь должно быть "2", это очевидно!
Дальше начинаю экспериментировать, изменяю пределы интегрирования:
99-103 - выдает ответ "2". (все как и должно быть)
0-105 - тоже "2"
0-106 - верхний предел отличается всего на единицу и уже "0".
Как так и почему? Почему такая простая функция вызывает такие сложности при вычислении интеграла? Такая умная программа не справляется с элементарным вычислением?

Начинаю поиски ответа в интернете, нахожу следующую информацию:
из справки последнего Маткада Прайм 1.0:
Цитата:
"Подынтегральные выражения с острым максимумом, как и функции, чья форма не характеризуется полностью одним масштабом длин, не могут быть вычислены точно. Можно получить более точные результаты, разбив интеграл на части и отдельно проинтегрировав пик остальной части графика."
"Mathcad обычно не может интегрировать функции, имеющие сингулярности в интервале интегрирования. Ступенчатые и пилообразные функции с многими конечными разрывами могут также привести к несходимости интегралов. Если известно расположение сингулярностей в подынтегральном выражении, можно получить правильную численную оценку, разбив интеграл на сумму интегралов с этими точками в качестве пределов. Чтобы найти потенциальные сингулярности или нарушения непрерывности, постройте график интеграла."
Из всего понимаю, что есть какие-то сложности при вычислении быстроменяющихся функций и функций с разрывами. Но логичного объяснения тем фокусам, которые творились в приведенном примере не нахожу. Кроме того предложенный вариант с разбиением на участки меня не устраивает, т.к. в конечном счете предполагается сделать что-то наподобие программы: расчет должен автоматом все переделывать в зависимости от исходных данных - работать по принципу: вбил данные и получил ответ. Поэтому вручную разбивать на участки мне не подходит.

Далее нахожу инфу по методам интегрирования, использованным в Маткаде:
Цитата:
Auto Select (Автоматический выбор).

Метод интегрирования выбирается системой автоматически. Лучше, если по умолчанию будет отмечен именно этот пункт.

Romberg (Ромберга)

Весьма эффективный метод, применяемый для вычисления интегралов от функций, не имеющих особенностей. Является основным методом в Mathcad.

Adaptive (Адаптивный)

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

Наверняка кто-то сталкивался с подобной проблемой при вычислении интегралов. Подскажите что делать, как считать? Заранее блогадарен за любую помощь!
Просмотров: 21110
 
Непрочитано 25.04.2011, 19:42
#2
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


в других программах не пробовали? или через функцию хевисайда
metod вне форума  
 
Непрочитано 25.04.2011, 20:30
#3
Tyhig

Оснащение проходки горных выработок, ПОС, нормоконтроль, КР, АР
 
Блог
 
Регистрация: 30.01.2008
Ленинград
Сообщений: 19,385


Кстати, а разве можно единым интегралом интегрировать прерывистые функции ?
Я математику плохо знаю, но до сих пор представлял себе интеграл как некий плавный закон... Если что-то прерывается, то это два закона, два интеграла...
__________________
"Безвыходных ситуаций не бывает" барон Мюнхаузен
Tyhig вне форума  
 
Непрочитано 25.04.2011, 20:54
#4
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


Цитата:
Сообщение от Tyhig Посмотреть сообщение
Кстати, а разве можно единым интегралом интегрировать прерывистые функции ?
Я математику плохо знаю, но до сих пор представлял себе интеграл как некий плавный закон... Если что-то прерывается, то это два закона, два интеграла...
можно, но осторожно )) тем более здесь идет речь о численном интегрировании.
metod вне форума  
 
Непрочитано 25.04.2011, 21:30
#5
Tyhig

Оснащение проходки горных выработок, ПОС, нормоконтроль, КР, АР
 
Блог
 
Регистрация: 30.01.2008
Ленинград
Сообщений: 19,385


Цитата:
Сообщение от metod Посмотреть сообщение
можно, но осторожно
Может воспользоваться классикой, а не численными методами и разделить таки интеграл ? о_О

Cyberfighter
Выкладывай интеграл.
Может ты там чего перемудрил ?

Диссертацию пишешь ?
__________________
"Безвыходных ситуаций не бывает" барон Мюнхаузен
Tyhig вне форума  
 
Автор темы   Непрочитано 26.04.2011, 00:28
#6
Cyberfighter


 
Регистрация: 24.04.2011
Сообщений: 6


Цитата:
Сообщение от metod Посмотреть сообщение
в других программах не пробовали? или через функцию хевисайда
В других программах не пробовал, но такие мысли есть... Какую программу посоветуете? может там больше различных методов интегрирования?
Функцию Хевисайда не пробовал, т.к. слабо представляю как ее использовать(
Цитата:
Кстати, а разве можно единым интегралом интегрировать прерывистые функции ?
Если считать ручками по формуле Ньютона-Лейбница, то конечно без разбиения на участки не обойтись. В маткаде насколько я понимаю заложена более хитрая схема вычисления, должен справляться)
Цитата:
Может воспользоваться классикой, а не численными методами и разделить таки интеграл ? о_О
В данном конкретном примере это сделать довольно-таки просто, но в собственно в моем расчете затруднительно - необходимо анализировать функцию на разрывы, находить эти точки. Более того предполагается сделать не один расчет, а множество, следовательно нужно все это дело каким-то образом автоматизировать, чтобы вручную не пересчитывать каждый раз. А это все усложняет и без того громоздкий расчет(
Цитата:
Выкладывай интеграл.
Может ты там чего перемудрил ?
Выкладываю
В расчете-примере 2 функции: одна с разрывами как было сказано ранее; вторая без разрывов, но быстро изменяющаяся на участке от 100 до 102 - функция быстро возрастает до значения 100 (при х=101), затем также быстро убывает до нуля (при х=102). При интегрировании этой функции наблюдаются те же самые фокусы, что и для первой с разрывами( Так что есть над чем подумать...
Цитата:
Диссертацию пишешь ?
Угадал
P.S. to Tyhig: Тимур, ты?))
Вложения
Тип файла: rar фокусы с интегралом.rar (28.1 Кб, 197 просмотров)
Cyberfighter вне форума  
 
Непрочитано 26.04.2011, 08:15
1 | #7
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


Цитата:
Сообщение от Cyberfighter Посмотреть сообщение
В других программах не пробовал, но такие мысли есть... Какую программу посоветуете? может там больше различных методов интегрирования?
Выбор невелик - Mathematica и Maple. Удивитесь на сколько они продвинуты по сравнению с MathCad'ом.
metod вне форума  
 
Непрочитано 26.04.2011, 08:40
#8
cosc


 
Регистрация: 30.04.2009
Санкт-Петербург
Сообщений: 153


В mathcad для символьных вычислений используется то же ядро, что и в maple. ТАк что я думаю maple тут не поможет.
cosc вне форума  
 
Непрочитано 26.04.2011, 08:54
1 | #9
Denis777


 
Регистрация: 21.10.2008
Сообщений: 102


Запрограмируйте свои численные методы - трапеций, Симпсона.
Denis777 вне форума  
 
Непрочитано 26.04.2011, 09:31
#10
Tyhig

Оснащение проходки горных выработок, ПОС, нормоконтроль, КР, АР
 
Блог
 
Регистрация: 30.01.2008
Ленинград
Сообщений: 19,385


Cyberfighter
Угу...

Грамотно выложил, у меня тоже на работе ничего нет...

Я в своё время мэплом пользовался... Хорошая штука, но долго разбираться тоже...

Приложи рисунками формулы ?
__________________
"Безвыходных ситуаций не бывает" барон Мюнхаузен
Tyhig вне форума  
 
Автор темы   Непрочитано 26.04.2011, 11:09
#11
Cyberfighter


 
Регистрация: 24.04.2011
Сообщений: 6


Появилась мысль по поводу того из-за чего могла возникнуть подобная ошибка при вычислении определенного интеграла:
Я так понимаю, что маткад для решения задачи разбивает интервал интегрирования [a,b] на n одинаковых участков. Длина каждого участка будет равна h=(b-a)/n. Что если эти участки по величине больше чем участок, на котором происходит изменение функции (т.е. h>(102-100=2))? Получается, что на границах всех n участков будут нули и маткад воспринимает функцию как a(x)=0?
Скорее всего в маткаде количество участков разбиения n = const. Соответственно уменьшая диапазон интегрирования уменьшаются длины участков и функция становится различима. Поэтому мы и получали правильный ответ на меньших интервалах...
Не знаю так ли это или нет, но это единственное логическое объяснение, которое мне пришло в голову. Только не думал, что в маткаде такое малое количество участков разбиения и соответственно настолько грубое вычисление интегралов...

Цитата:
Сообщение от metod Посмотреть сообщение
Выбор невелик - Mathematica и Maple. Удивитесь на сколько они продвинуты по сравнению с MathCad'ом.
Спасибо за совет, вечерком поставлю МАПЛ, буду изучать.
Говорят, что считает правильно, сам не проверял:

Цитата:
> restart;
> a:=x->piecewise(x>100 and x<102,1,0);
> Int(a(x),x=0..500)=int(a(x),x=0..500);
> Int(a(x),x=0..102)=int(a(x),x=0..102);
> Int(a(x),x=99..103)=int(a(x),x=99..103);
> Int(a(x),x=0..105)=int(a(x),x=0..105);
> Int(a(x),x=0..106)=int(a(x),x=0..106);

Результат везде один = 2
Если не сложно, может кто-нибудь проверить приведенные 2 примера в Mathematica и Maple? Правильно считает интегралы?

Цитата:
Сообщение от cosc Посмотреть сообщение
В mathcad для символьных вычислений используется то же ядро, что и в maple. ТАк что я думаю maple тут не поможет.
В данном случае речь идет про численные вычисления
Мне тут дали совет, цитирую:

Цитата:
До 14 версии Mathcad'a в нем использовалось ядро (его часть) Maple для некоторых символьных вычислений! Mathcad изначально предназначен был для проведения числовых вычислений, а Maple - для символьных. Mathcad - просто калькулятор! Maple - это совсем другой уровень! Мой Вам совет - серьезные расчеты делайте в Maple. А если надо что-то быстренько посчитать численно - в Mathcad.
Чувствуется без Maple мне не обойтись. В этой связи возникает вопрос - есть ли какая-то интеграция маткада и мапл?

Цитата:
Сообщение от Denis777 Посмотреть сообщение
Запрограмируйте свои численные методы - трапеций, Симпсона.
Спасибо за идею, но представляется, что это довольно-таки долгий путь.. кроме того не уверен, что будет положительный результат.

Цитата:
Сообщение от Tyhig Посмотреть сообщение
Грамотно выложил, у меня тоже на работе ничего нет...
Приложи рисунками формулы ?
Выкладываю тоже самое в файле ворд (для тех, у кого нет маткада)
Вложения
Тип файла: rar вопрос по маткаду.rar (14.0 Кб, 142 просмотров)

Последний раз редактировалось Cyberfighter, 26.04.2011 в 11:18.
Cyberfighter вне форума  
 
Непрочитано 26.04.2011, 22:03
1 | #12
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


Открывать в математике
Вложения
Тип файла: rar dwg.rar (1.6 Кб, 112 просмотров)
metod вне форума  
 
Автор темы   Непрочитано 27.04.2011, 00:49
#13
Cyberfighter


 
Регистрация: 24.04.2011
Сообщений: 6


Цитата:
Сообщение от metod Посмотреть сообщение
Открывать в математике
И какие получились результаты? К сожалению не стоит данная программа, не могли бы сделать скриншоты расчетов и результатов вычисления?

Цитата:
Сообщение от Denis777 Посмотреть сообщение
Запрограмируйте свои численные методы - трапеций, Симпсона.
Кстати говоря, не такой уж и долгий оказался путь) Спасибо огромное за совет. Решил обе пример-задачки методом трапеций и получил верные ответы (см. скрины в приложении).
Становится еще более удивительно, почему с этой простой задачей не справляется стандартный оператор маткада?
Миниатюры
Нажмите на изображение для увеличения
Название: Метод трапеций.jpg
Просмотров: 558
Размер:	27.4 Кб
ID:	58365  
Cyberfighter вне форума  
 
Непрочитано 27.04.2011, 08:15
1 | #14
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


Цитата:
Сообщение от Cyberfighter Посмотреть сообщение
И какие получились результаты? К сожалению не стоит данная программа, не могли бы сделать скриншоты расчетов и результатов вычисления?
Само собой работает - и как у Вас задано через If и через функцию Хевисайда.
Интегрирование методом трапеций - это самый элементарный численный метод, имеет невысокую точность и низкую скорость. Само собой при уменьшении шага повышается точность, но и увеличивает время счета. Поэтому матпрограммы используют более продвинутые методы.
metod вне форума  
 
Автор темы   Непрочитано 27.04.2011, 11:57
#15
Cyberfighter


 
Регистрация: 24.04.2011
Сообщений: 6


Цитата:
Сообщение от metod Посмотреть сообщение
Интегрирование методом трапеций - это самый элементарный численный метод, имеет невысокую точность и низкую скорость. Само собой при уменьшении шага повышается точность, но и увеличивает время счета.
Решил начать с простого, сегодня попробую запрограммировать численный метод Симпсона. Я так понимаю у него и скорость и точность расчетов должны быть повыше, т.к. функция на участках разбиения аппроксимируется полиномом 2-й степени... Собственно говоря высокая точность для моих расчетов и не нужна, а вот скорость не помешела бы. Буду искать компромиссы

Цитата:
Сообщение от metod Посмотреть сообщение
Поэтому матпрограммы используют более продвинутые методы.
А можно поподробнее? Я читал немного про метод, используемый в маткаде с увеличением участков разбиения и сравнении с заданной точностью TOL. Но до конца так и не разобрался...
К сожалению методы в маткаде дают грубейшие ошибки, что считаю недопустимо для такой солидной программы.
Cyberfighter вне форума  
 
Непрочитано 27.04.2011, 17:46
1 | #16
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


Цитата:
Сообщение от Cyberfighter Посмотреть сообщение
А можно поподробнее? Я читал немного про метод, используемый в маткаде с увеличением участков разбиения и сравнении с заданной точностью TOL. Но до конца так и не разобрался...
К сожалению методы в маткаде дают грубейшие ошибки, что считаю недопустимо для такой солидной программы.
Если посерьёзнее - то достаточно будет хорошей книги по численным методам и справки в Математике очень полезная. Никогда не пользуюсь маткадом в силу его ограниченности и малой скорости вычислений
metod вне форума  
 
Автор темы   Непрочитано 28.04.2011, 16:05
#17
Cyberfighter


 
Регистрация: 24.04.2011
Сообщений: 6


Цитата:
Сообщение от metod Посмотреть сообщение
Если посерьёзнее - то достаточно будет хорошей книги по численным методам и справки в Математике очень полезная.
Спасибо, почитаем что-нибудь на досуге)

Ну вроде как разобрался с тем как считать в маткаде определенные интегралы. Вчера вечером записал метод Симпсона, все хорошо считает, точность немного повыше...
Но на самом деле мне нужно решить несколько другую задачку. Лучше всего разобраться на приведенном в 1-м сообщении примере:

Также есть некая функция: a(x):=if(100<x<102,1,0)

Допустим мы знаем чему равен интеграл этой функции (к примеру единице). Как найти чему равен верхний предел интегрирования при условии, что нижний предел равен нулю. Очевидно, что для данного примера верхний предел равен "101". Но каким образом это можно сделать в Маткаде с использованием запрограммированного численного метода (к примеру метода трапеций)?
Я так понимаю необходимо пользоваться оператором "find"? Вроде как все не сложно, но никак не получается, маткад все время выдает какие-то ошибки( Помогите пожалуйста!

В приложении еще раз кинул скриншот вычисления интеграла методом трапеций.
Миниатюры
Нажмите на изображение для увеличения
Название: Метод трапеций.jpg
Просмотров: 247
Размер:	27.4 Кб
ID:	58512  
Cyberfighter вне форума  
 
Непрочитано 28.04.2011, 21:55
#18
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


я маткад очень плохо знаю, если Вам хочется далее гемороиться пользуйтесь маткадом, нет - тогда выбор программ очевиден (смотри выше)
metod вне форума  
 
Непрочитано 03.05.2011, 08:20
#19
Psyakrev


 
Регистрация: 17.06.2010
Сообщений: 438


Cyberfighter,
Подход примерно такой - записываете функцию, вычисляющую интеграл, например, Ф(a,b) = интеграл от а до b по f(x). Потом ищете решение уравнения Ф(x,101)-1=0.
Psyakrev вне форума  
 
Непрочитано 03.05.2011, 20:19
#20
metod


 
Регистрация: 09.10.2007
Москва
Сообщений: 451


Цитата:
Сообщение от Psyakrev Посмотреть сообщение
Cyberfighter,
Подход примерно такой - записываете функцию, вычисляющую интеграл, например, Ф(a,b) = интеграл от а до b по f(x). Потом ищете решение уравнения Ф(x,101)-1=0.
а если значение интеграла наперед неизвестно?
metod вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Mathcad: Неверно считает определенные интегралы



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арбат считает прогибы по СП 52-101-2003 неверно? Constantin Shashkin Расчетные программы 31 27.08.2010 16:06