1626435587-51311eae4652e8ad616b5bdef025cbb3 (844239), страница 21
Текст из файла (страница 21)
Достичь существенного выигрыша в скорости интегрирования жёстких систем можно с использованием неявных схем, обладающих абсолютной устойчивостью.Дополнительную информацию по интегрированию ОДУ и их системможно найти в [2, гл. 8]. Достаточно подробное рассмотрение вопросов, связанных с устойчивостью решений и жёсткими системами можно найти в [A8, гл. 8]. Пяти- и шестичленные формулы Рунге — Куттыможно найти в [A1, c.
277]. Последовательное рассмотрение смежныхвопросов, важных для построения эффективной и надёжной программы для численного интегрирования ОДУ, — инициализации, контроляшага интегрирования и порядка точности метода, контроля ошибкирезультатов, проверок корректности — можно найти в [A1, гл.
9.3].Упражнения1. Построить численное решение уравнения ˙ = − с начальнымусловием (0) = 1 на отрезке 0 ≤ ≤ 3 методами Эйлера и Рунге — Кутты второго порядка точности. Исследовать зависимостьпогрешности численного решения () при фиксированном шагесетки ℎ, а также зависимость (ℎ) при = 3.2. Пушечное ядро (шар = 2 кг = 7,5 см) выпущено из рельсового ускорителя с начальной скоростью u = 2 км/с, направленнойпод углом к горизонту.
Считая, что плотность атмосферы убывает экспоненциально с высотой (ℎ0 = 10 км, 0 = 1,3 кг/м3 ),найти максимальную дальность полёта ядра как функцию . Сопротивление воздуха = 0,47 · 21 2 · 2 , = 0 exp(−ℎ/ℎ0 ).3. Найти минимальную добавку к скорости, которую необходимо107сообщить зонду на околоземной орбите, чтобы он достиг орбиты Урана, учитывая только гравитационное притяжение Солнца и Земли. Рассчитать отклонение афелия зонда, запущенногок Урану с найденной скоростью, вызванное притяжением другихпланет Солнечной системы. Для простоты считать, что движениепланет и зонда происходит строго в плоскости эклиптики. Дляопределения координат планет использовать доступные в сетиИнтернет эфемериды с открытым исходным кодом (см. ephemerissource code в Google), либо (в простейшем случае) выбрать начальные угловые координаты планет случайным образом.4.
Исследовать движение неуправляемого космического аппарата водной из точек Лагранжа системы Солнце — Земля. Через какоевремя аппарат покинет точку Лагранжа из-за возмущений, вызванных притяжением других планет и Луны? Можно ли удерживать искусственный спутник массой 0.5 т в точке Лагранжа,используя электрический ракетный двигатель с тягой 0.1 Н?5. Используя неявную схему Эйлера, решить жёсткую систему уравнений (95) на с. 103.6. Решить систему (95) на с. 103, используя явный метод Эйлера иметод Рунге — Кутты четвёртого порядка.
Сравнить время интегрирования указанными методами с временем выполнения программы в упражнении 5.7. Используя методы Рунге — Кутты второго и четвёртого порядка,исследовать колебания физического маятника ¨ + (/) sin = 0.Найти зависимость периода колебаний от амплитуды. Сравнить сизвестными выражениями для гармонических колебаний и ангармонического осциллятора и с результатом упражнения 9 на с.
69.Меняя шаг временно́й сетки, построить зависимость погрешностирезультата от затраченного машинного времени для различныхметодов интегрирования ОДУ.108Рекомендации по написанию программ1. Необходимо проверять результаты работы программы на разумность, предельные случаи, согласие с аналитическими решениямитам, где они могут быть получены. Ценность программы, котораякомпилируется и «что-то» считает, близка к нулю.2. Все константы, соответствующие физическим величинам и расчётным параметрам, должны быть объявлены в виде отдельныхпеременных (в том числе со спецификатором const) либо с помощью директивы препроцессора #define://Под MSVC используйте #define _USE_MATH_DEFINES перед//подключением <math.h> !printf("Circle length: %f\n", 3.14159*r); //ПЛОХОЙ СПОСОБprintf("Circle length: %f\n", M_PI*r);//ВЕРНОЕ РЕШЕНИЕ3. Ставьте точки при целочисленных константах, используемых привычислениях величин с плавающей точкой:const double x = 2/3;const double y = 2./3;//x будет равен нулю!//y будет равен двум третям4.
Минимизируйте повторяющийся программный код, выносите егов отдельные функции, тестируйте их работу и затем используйтеповторно. Помните: грамотно спроектированную и разбитую налогические блоки программу отлаживать значительно легче.5. Используйте форматирование кода для улучшения его читаемости — это позволит сократить число ошибок в программе [C7,гл.
1]:http://ru.wikipedia.org/wiki/Стандарт_оформления_кодаhttp://ru.wikipedia.org/wiki/Спагетти-код6. Используйте графики для анализа полученных результатов. Какправило, графическая информация воспринимается человекомгораздо легче и быстрее чисел.7. Если программа работает неправильно, и ошибку не удаётся найти внимательным чтением исходного кода, добавьте вывод отладочных сообщений (значений переменных, сеточных функций ит. п.), либо используйте пошаговое выполнение в отладчике, вручную проверяя результаты промежуточных вычислений.1098. Перед тем как вносить в программу сколько-нибудь серьёзныеизменения, а также каждый раз после получения значимого результата, обязательно сохраните резервную копию! Использование систем контроля версий (например, git) позволит не толькосэкономить время и силы на поиск внезапно возникших проблемс программой, которая «только что работала», но и упростит повторение полученных ранее результатов, необходимость чего регулярно возникает в научных исследованиях.Упражнения1.
Что напечатает следующая программа, написанная на языке Си?Введите текст программы в файл с расширением .c, скомпилируйте и запустите его:#define v putchar#define print(x) main(){v(4+v(v(52)-4));return 0;}/*#>+++++++4+[>++++++<-]>++++.----.++++.*/print(202*2);exit();#define/*>.@*/exit()2. Проверьте, что программа корректно выполняется интерпретаторами языков программирования Perl, Python, Ruby, Befunge, BF.3. Сравните стиль собственных программ с кодом из упражнения 1.110Рекомендованная литература[1]Керниган Б. У., Ритчи Д. М.Вильямс, 2012.
289 с.Язык программирования C. М.:Калиткин Н. Н. Численные методы. М.: Наука, 1978. 512 с.[3] Самарский А. А. Введение в численные методы. М.: Наука, 1987.[2]286 с.[4]Press W. H., Teukolsky S. A., Vetterling W. T., Flannery B. P.Numerical recipes The art of scientific computing. N. Y.: CambridgeUniversity Press, 2007.Дополнительная литература и Интернетресурсы[A1]Rice J. R.Numerical methods, software, and analysis. N. Y.:McGraw-Hill, 1983.[A2] Gnuplot homepage.
URL: http://www.gnuplot.info/[A3][A4]Phillips L.Ltd., 2012.Gnuplot Cookbook. Birmingham: Packt PublishingJanert P. K.Gnuplot in action: understanding data with graphs.Greenwich CT USA: Manning, 2010.[A5] 14882 ISO/IEC. C++ International standard. Geneva: ISO, 2011.[A6][A7][A8][A9]Severance C.An interview with the old man of floatingpoint. Reminiscences elicited from William Kahan, 1998. URL:http://www.cs.berkeley.edu/∼wkahan/ieee754status/754story.htmlGoldberg D. What every computer scientist should know aboutfloating-point arithmetic // ACM Computing Surveys.
1991. V. 23.N. 1. P. 5–48.Каханер Д., Моулер Д., Нэш С.Численные методы и программное обеспечение. М.: Мир, 2001. 575 с.Кнут Д. Э. Искусство программирования. Т.2: Получисленныеалгоритмы. М.: Вильямс, 2000. 828 с.111[A10]Самарский А. А., Гулин А. В. Численные методы.
М.: Наука,[A11]Форсайт Дж., Малькольм М., Моулер К.1989. 429 с.Машинные методыматематических вычислений. М.: Мир, 1980. 279 с.Литература и Интернет-ресурсы по языкамСи/Си++[C1]Керниган Б. У., Ритчи Д. М.[C2]Шилдт Г. Полный справочник по C++. М.: Вильямс, 2007. 800 с.Вильямс, 2012.
289 с.Язык программирования C. М.:[C3] Справочник по C++. URL: http://cppreference.com/[C4] Статьи, уроки и справочная информация по C/C++. URL:http://www.cplusplus.com/[C5] 14882 ISO/IEC. C++ International standard. Geneva: ISO, 2011.[C6]Страуструп Б. Язык программирования C++. М.: Бином, 2012.[C7]Керниган Б., Пайк Р.1135 с.льямс, 2004. 287 с.Практика программирования. М.: Ви-112Учебное изданиеСмирнов Сергей ВалерьевичОСНОВЫ ВЫЧИСЛИТЕЛЬНОЙ ФИЗИКИЧасть IУчебное пособиеРедактор Т. Ю. СедыченкоПодготовка к печати С. В.
ИсаковаПодписано в печать 25.09.2015Формат 60x84 1/16. Уч.-изд. л. 7. Усл. печ. л. 6,6Тираж 200 экз. Заказ №Редакционно-издательский центр НГУ630090, г. Новосибирск, ул. Пирогова, 2.