04.03.2019, 09:55 | #11 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Прежде всего — НИКАКИХ ОШИБОК В КОДЕ НЕТ! И идёт Ваш препод, извините, лесом... Теперь давайте разбираться. Как я писал выше, формула Симпсона есть (t/3)*(Y0 + 4*Y1 + 2*Y2 + 4*Y3 + ... + Y2N) Давайте для простоты предположим, что интервал (a, b) мы разбили на шесть отрезков (повторяю, число отрезков должно быть ЧЁТНЫМ). Таким образом, по оси X мы имеем 7 точек: X0, X1, X2, X3, X4, X5 и X6. Соответственно, по оси Y имеем 7 значений: Y0, Y1, Y2, Y3, Y4, Y5 и Y6, равных f(X0), f(X1), f(X2), f(X3), f(X4), f(X5) и f(X6), причем X0=a, Y0=f(X0)=f(a) и X6=b, Y6=f(X6)=f(b), где f — подынтегральная функция. Величина t есть (b-a)/6. Теперь давайте искать сумму. 1. Определяем вклад концевых точек. Он есть t/3*(Y0+Y6)=t/3*(f(a)+f(b)). 2. Добавляем вклад от точек X1, X3 и X5. Соответствующие им значения Y1, Y3 и Y5 идут с коэффициентом 4. Поэтому добавляем к сумме величину t/3*(4Y1+4Y3+4Y5)=t/3*(4f(X1)+4f(X3)+4f(X5)) 3. И, наконец, добавляем вклад от точек X2 и X4. Соответствующие им значения Y2 и Y4 идут с коэффициентом 2. Поэтому добавляем к сумме величину t/3*(2Y2+2Y4)=t/3*(2f(X2)+2f(X4)). Всё! Теперь построим алгоритм перебора индексов при нахождении указанных сумм. Заметим, что X1=X0+t=a+t X2=X0+2t=a+2t X3=X0+3t=a+3t X4=X0+4t=a+4t X5=X0+5t=a+5t X6=X0+6t=a+6t=b Таким образом, для X1, X3 и X5 имеем X(2i-1)=a+t*(2i-1), i меняется от 1 до 3 (слева в скобках — индекс). Для X2 и X4 имеем X(2i-2)=a+t*(2i-2), i меняется от 2 до 3. Вот, собственно, всё это и проделано в строках от 1 до 7 и от 11 до 17. И, ещё раз повторяю, НИКАКИХ ОШИБОК ТАМ НЕТ!!! Дальше там организован цикл мельчения разбивки до достижения требуемой точности. ВСЁ! P.S. Возможно, Ваш высокоучёный препод не заметил, что в строке 6 цикл берется в пределах от 2 до N. Можно, конечно, взять пределы от 1 до N-1, тогда "-2" в строке 7 нужно убрать. Но это — исключительно дело вкуса, на результат не повлияет. Советую Вам ткнуть этого ученого мужа носом в шестую строку, чтобы осознал значения поставленных пределов и не вякал про "ошибки". Хех, да да... |
04.03.2019, 09:55 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Суть содержания этой темы схожа с этими темами Си, функция Turbo Pascal, метод Симпсона Функция DEP? Функция |
04.03.2019, 23:37 | #12 (permalink) |
Member
Регистрация: 27.02.2019
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Благодарю! Вроде потихоньку вникаю)
Еще вопросики.. В прошлом разъяснении вы сказали, что h=(b-a)/(2N), а в коде у вас, да и в моей методичке h уже известен - 0,2, насчет t, должно быть это коэффициент перед "скобкой" в формуле Симпсона, раз он равен (b-a)/6, а в самом коде вы присваиваете ему (p-a)/(2*N), почему? И я так понял переменную b вы не ввели и почему вы не учли кол-во частей разбивки - 36? |
05.03.2019, 08:43 | #13 (permalink) | ||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Отвечаю в порядке поступления.
Цитата:
Цитата:
|
||
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|