Invest-currency.ru

Как обезопасить себя в кризис?
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программирование дифференциальных уравнений

решение дифференциальных уравнений

Как написать программу решения дифференциального уравнения… ( C++ , C# )

Для численного решения обыкновенных дифференциальных уравнений различают задачи с начальными условиями (ЗНУ) и граничными условиями (ЗГУ).

Дело в том, что для полного определения искомой функции одного уравнения недостаточно. При определении первообразной из производной функции мы получим множество решений, отличающихся друг от друга свободным членом (константой С).

Поэтому, для однозначного определения данной константы С, у искомой функции должны задаваться еще граничные условия, указывающие, что делается на концах исследуемого интервала, и/или начальные условия, описывающие значение функции
в начальный момент (t = 0). Совокупность граничных и начальных условий называется краевыми условиями.

Для численного решения обыкновенных дифференциальных уравнений применяют метод Рунге-Кутта, с наиболее часто используемым 4-ым порядком точности. Давайте рассмотрим программную реализацию данного метода Рунге-Кутта, и Вы увидите, что написать программу для решения дифференциального уравнения не составляет особого труда.

Вариант решения задачи рассмотрю на следующем примере:

Условия задачи:
Пусть выстрел из орудия произведен с начальной скоростью V, под углом к горизонту α, с высоты Н расположения орудия, т.к. в реальности огонь может вестись с холма или из капонира (т.е. ниже уровня земли).
Считаем, что снаряд имеет форму шара с радиусом r, изготовлен из материала, имеющего определенную плотность ρ.
Построить траекторию полета снаряда Y(x) ,
указать максимальную высоту полета Hk , дальность падения снаряда Xk и время полета tk , построить график скорости V(t) на отрезке [0,tk].

Таким образом, исходные данные, которые пользователь может задать на форме:
Начальная скорость V, м/с2
Начальная высота H, м
Угол выстрела α, ° (град)
Плотность материала ρ, кг/м3
Радиус r, м

При построении математической модели условимся, что ось Оx системы координат направлена горизонтально в направлении выстрела, а ось Oy — вертикально вверх. Вектор скорости снаряда V(t) за время полета будет изменяться как по величине, так и по направлению, поэтому в модели рассматриваем его проекции на координатные оси. Горизонтальную составляющую скорости в момент времени t обозначим Vx(t), а вертикальную – Vy(t).

Пусть поверхность Земли плоская. Согласно законам механики, при сделанных предположениях движения тела в горизонтальном направлении является почти равномерным, а в вертикальном – равнозамедленным или равноускоренным с ускорением свободного падения g.

Если с силой тяжести FT все достаточно просто (она свой вектор не меняет ни по величине, ни по направлению), то сила лобового сопротивления FC , действующая на снаряд, пропорциональна квадрату скорости движения тела. Обозначим через FX и FY горизонтальную и вертикальную проекции вектора силы лобового сопротивления,
причем FX/F= VX/V, FY/F= VY/V.

Значение силы лобового сопротивления F= -b·V² (пропорционально квадрату скорости тела). Коэффициент b=0.5·C·S·ρ, где C – коэффициент лобового сопротивления (для многих задач баллистики C≈0.15), S – площадь поперечного сечения (S=πr²), ρ — плотность воздуха (ρ=1,29 кг/м3).

Решение поставленной задачи можно свести к решению системы дифференциальных уравнений

Метод Рунге-Кутта предполагает многократное вычисление значения производной искомой функции по имеющейся формуле (из уравнения), поэтому имеет смысл выделить их в отдельные подпрограммы …

Код функций будет выглядеть так:

// функция Нахождение горизонтальной проекции скорости
//по первому уравнению системы
double Form1::fvx( double vy, double vx )
<
return -b*vx*sqrt(vx*vx+vy*vy) / m;
>

// функция Нахождение вертикальной проекции скорости
//по второму уравнению системы
double Form1::fvy( double vy, double vx )
<
return -b*vy*sqrt(vx*vx+vy*vy) / m — g;
>

Шаг интегрирования у меня задается на форме.
Сейчас нам предстоит вычислить значения нескольких функций (Vx, Vy, V ) в точках заданного интервала с заданным шагом. В моем примере у интервала задано начало х=0, а конечная точка интервала будет определена в процессе вычисления ( по условию: высота полета ядра стала Void Form1::Runge_Kutta(void)
<
double k1,k2,k3,k4, l1,l2,l3,l4;

pY[0]=H; pX[0]=0; pt[0]=0; //массивы-координаты: высота, дальность и время
pVx[0]=Vx; pVy[0]=Vy; pV[0]=V; //массивы- скорости: проекции на
//горизонталь и вертикаль и полная скорость (величина вектора)
bool vzbool=true;//взлет
int i=1;

//расчет по модели и заполнение массивов
while( (pY[i-1]>-0.00001 || vzbool) && i pY[i-1]) iMax=i; //сохранение номера узла с максимальной высотой
else vzbool=false;//падение

i++;
>
n=i-1; //количество реальных шагов
>

где:
int iMax; //узел с макс.высотой полета

double b; //коэф.пропорциональности Силы лобового сопротивления
double m; //масса ядра
double H; //уровень расположения орудия в момент выстрела
double V,Vx,Vy; //начальная скорость и ее проекции на оси

В результате работы этой подпрограммы произойдет численное решение задачи Коши для системы обыкновенных дифференциальных уравнений и будут получены значения функций Vx(ti), Vy(ti) в точках ti=i·h, i=1,2. ; h – шаг метода.

Как видим, после получения нового значения скорости Vx(ti)
рассчитывается координата X(ti)=X(ti-1)+h·Vx(ti), где h= ti-ti-1 = const.
Кроме того, параллельно рассчитывается значение высоты Y(ti)=Y(ti-1)+h·Vy(ti),
где h= ti-ti-1 = const по найденным значениям Vy(ti).
Когда будет получено значение Y(ti)

Решение обыкновенных дифференциальных уравнений и систем

9.5 Функции для решения дифференциальных уравнений

Наиболее часто используемыми в Octave функциями для решения дифференциальных уравнений являются:

  • — функции решений обыкновенных нежёстких дифференциальных уравнений (или систем) методом Рунге-Кутта 2-3-го и 4-5-го порядка точности соответственно;
  • —функции решений обыкновенных жёстких дифференциальных уравнений (или систем).
Читать еще:  Язык программирования паскаль для чайников

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

  • — вектор-функция для вычисления правой части дифференциального уравнения или системы 1 При обращении к функциям odeXX используется указатель @f на функцию. (Прим. редактора). ;
  • — массив из двух чисел, определяющий интервал интегрирования дифференциального уравнения или системы;
  • — вектор начальных условий системы дифференциальных систем;
  • — параметры управления ходом решения дифференциального уравнения или системы.

Для определения параметров управления ходом решения дифференциальных уравнений используется функция odeset следующей структуры:

  • — имя i-го параметра;
  • — значение i-го параметра.

При решении дифференциальных уравнений необходимо определить следующие параметры:

  • — относительная точность решения, значение по умолчанию ;
  • — абсолютная точность решения, значение по умолчанию ;
  • — начальное значение шага изменения независимой переменной, значение по умолчанию 0.025;
  • — максимальное значение шага изменения независимой переменной, значение по умолчанию 0.025.

Все функции возвращают:

  • массив — координат узлов сетки, в которых ищется решение;
  • матрицу -й столбец которой является значением вектор-функции решения в узле .

Решим задачу 9.1 с использованием функций . Текст программы с комментариями представлен в листинге 9.8.

На рис. 9.5 представлено решение, найденное с помощью функции с точностью 1E-5 и точное решение. На рис. 9.6 представлено решение, найденное с помощью функции с точностью 1E-4 и точное решение.

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

Рассмотрим пример решения жёсткой системы дифференциальных уравнений. Напомним читателю определение жёсткой системы дифференциальных уравнений. Система дифференциальных уравнений -го порядка

называется жёсткой [2], если выполнены следующие условия:

  • ействительные части всех собственных чисел матрицы B(n) отрицательны
  • величина

Пример 9.2. Решить задачу Коши для жёсткой системы дифференциальных уравнений:

Решение задачи с комментариями представлено в листинге 9.9, на рис. 9.7 можно увидеть график решения.

Этим примером мы заканчиваем краткое описание возможностей Octave для решения дифференциальных уравнений. Однако, следует помнить о следующем: решение реального дифференциального уравнения (а тем более системы) — достаточно сложная математическая задача. Для её решения недостаточно знания синтаксиса функций Octave, необходимо достаточно глубоко знать математические методы решения подобных задач. При решении дифференциальных уравнений необходимо определить метод решения и только потом пытаться использовать встроенные функции или писать свои. Авторы не случайно достаточно подробно напомнили читателю основные численные методы решения дифференциальных уравнений и систем. На наш взгляд без знания численных и аналитических методов решения дифференциальных уравнений, достаточно проблематично решить реальную задачу.

Кроме того, следует помнить, что функциями возможности пакета не ограничиваются. Octave предоставляет достаточное количество функций для решения дифференциальных уравнений различного вида. Они подробно описаны в справке консольной версии приложения 2 Ещё раз напоминаем читателю, что справка по Octave, доступная из оболочки qtoctave недостаточно полная. .

Программная реализация решения системы дифференциальных уравнений

Дифференциальное уравнение первого порядка, решение задачи Коши, сущность метода Рунге-Кутта. Выбор языка программирования вычислительной системы. Разработка программного обеспечения для решения математических функций и тестирование его эффективности.

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное Государственное Автономное образовательное учреждение Высшего профессионального образования «БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

Институт инженерных технологий и естественных наук

Кафедра математического и программного обеспечения информационных систем

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РЕШЕНИЯ СИСТЕМЫ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ

Методы вычислений Данькова Н.А.

Научный руководитель доц. Бурданова Е. В.

дифференциальный программирование вычислительный математический

1. Теоретическая часть

1.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши

1.2 Суть метода Рунге-Кутта

1.3 Выбор среды разработки

2. Практическая часть

2.1 Программная реализация метода Ркнге-Кутта 4-го порядка

Список использованных источников

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

где у — искомая функция, х — независимая переменная, f(x,y) — непрерывная функция от х и у. Однако получить аналитическое решение этого уравнения для достаточно произвольной функции f не удается, и только для некоторых частных случаев, с которыми можно ознакомиться в справочной литературе.

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

Читать еще:  Алгоритмы структуры данных и программирование

Цель курсовой работы: изучить метод Рунге — Кутта 4-го порядка для решения обыкновенных дифференциальных уравнений.

Постановка задачи: необходимо составить программу, позволяющую решать обыкновенные дифференциальные уравнения методом Рунге — Кутта 4-го порядка.

1. Теоретическая часть

1.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши

Для простоты рассмотрим двумерное пространство переменных х и у и некоторое открытое множество G, принадлежащее ему. Пусть на этом открытом множестве определена непрерывно дифференцируемая функция f(х, у) и задано уравнение

Согласно теореме существования и единственности для любой точки (x,y) ?G найдется решение у = у(х), определенное на некотором интервале (х -д, х +д), удовлетворяющее условию y(x) = y0, такое, что точки (x,y(x)) ?G и y`x ? f(x, y(x)), причем это решение будет единственным. Задача для уравнения (1) с начальным условием у(х) = y (задача Коши) состоит в нахождении функции у(х), обращающей и уравнение (1), и начальное условие в тождество. Допустим, что значения, которые принимает независимое переменное х, принадлежат интервалу (Х, XN ) и запишем задачу Коши:

n = 0, … ,N-1. В дальнейшем, не ограничивая общности, рассмотрим случай, когда разбиение равномерное, т.е. все

1.2 Суть метода Рунге-Кутта

Методы Рунге-Кутта находят широкое применение при решении ДУ. Наибольшее применение нашел метод 4-го порядка.

— параметр, который определяет значение функции вблизи точки области определения.

Общепринятый метод 4-го порядка:

Ошибка формулы (10) пропорциональна h 5 .

Этот метод намного более точен, чем методы Эйлера, но требует и большего объема вычислений: положение точки (xi+1, yi+1) определяется в результате 4-кратного вычисления значения функции f (x,y). С появлением ЭВМ этот недостаток перестал быть существенным и метод Рунге-Кутта 4-го порядка применяется на практике чрезвычайно широко.

Число микроотрезков [xi; xi+1], на которые разбивается исходный отрезок [x;xn], определяется требуемой точностью вычислений. Для достижения нужной точности задача решается несколько раз при последовательно удваиваемом числе микроотрезков n. Точность считается достигнутой, если при начальном и удвоенном числе n значения yi и y2i (в совпадающих точках x) отличаются не более чем на заданную величину:

где p — порядок точности метода.

Метод Ругне-Кутта обладает следующими свойствами:

1. Метод является одноступенчатым (чтобы найти , нужна информация о предыдущей точке, )

2. Не требует вычисления производных от f(x,y), а требует вычисления самой функции

3. Имеет небольшую погрешность

1.3 Выбор среды разработки

C++ Builder— программный продукт, инструмент быстрой разработки приложений (RAD), интегрированная среда программирования (IDE), система, используемая программистами для разработки программного обеспечения на языке программирования C++ Данный продукт позволяет создавать как консольные приложения, так и приложения с графическим интерфейсом.

Microsoft Visual Studio — линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. С помощью данного продукта можно разрабатывать консольные приложения, приложения с графическим интерфейсом, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Silverlight.

Для выполнения поставленной задачи был выбран программный продукт C++ Builder. Так как является более простым в использовании и соответствует всем необходимым требованиям для создания консольного приложения.

2.1 Программная реализация метода Ркнге-Кутта 4-го порядка

Разработка программы начинается с описания функций. Для этого мы используем оператор switch.

Листинг 1 «описание функций»

double func(int tip, double x, double y, double a, double b,double c, double d, double e, double f ) <

Программирование дифференциальных уравнений в частных производных

Страницы работы

Содержание работы

Файл Самостоят_05.doc 4 стр. 146 Кбайт.

1. Программирование дифференциальных уравнений в частных производных.

В данном разделе мы ограничимся рассмотрением методов решений дифференциальных уравнений в частных производных на примере линейных дифференциальных уравнений вида

(01)

где A, B, C, a, b, c – заданные коэффициенты, которые могут быть постоянными или функциями аргументов x, y;

F(x, y) – заданная функция переменных x и y.

Решение u(x, y) должно удовлетворять уравнению 01 в некоторой области переменных x и y, граница которой задается уравнением Г(x, y) = 0.

В зависимости от знака дискриминанта D = AC – B 2 уравнение 01 можно отнести к одному из типов: эллиптическому (D > 0), параболическому (D = 0), гиперболическому (D 2 ; u(0, t) = u(t) = φ1(t); un+1(t) = φ2(t), уравнение 06 для отдельной j-й точки запишем в виде

(08)

Естественно, для аппроксимации функции 06 в целом нам понадобится система из n обыкновенных дифференциальных уравнений первого порядка.

Представим и решим систему обыкновенных дифференциальных уравнений средствами SIMULINK. Начнем с решения дифференциального уравнения 1 порядка.

Рис. П6.2. Подсистема «Решение дифференциального уравнения 1 порядка».

Решение левой части уравнения может быть представлено модулем Integrator (с начальным значением) из раздела библиотеки Linear. Правая часть уравнения представляет сумму трех слагаемых. Для ее определения воспользуемся модулями Sum из раздела библиотеки Linear, модулями Product из раздела библиотеки Nonlinear и модулем Constant из раздела библиотеки Sources для задания коэффициента. Объединим блок-схему в подсистему (при этом SIMULINK автоматически подставит в блок-схему модули In и Out) и разметим ее в соответствии с рисунком.

Объединим имеющиеся модули в соответствии с логикой решения системы уравнений и присоединим окно наблюдения за решением.

Рис. П6.3. Блок-схема решения задачи[1].

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

[1] Программа расположена на файле «Мои документыПрогSIMПосГлава1gla1_05 p6ris3»

Программа для решения системы обыкновенных дифференциальных уравнений

Разработка программы для решения системы обыкновенных дифференциальных уравнений на базе языка программирования Паскаль АВС. Чтение исходных данных из внешнего файла. Вывод исходных данных и результатов на дисплей и во внешний файл. Суть метода Ейлера.

Министерство образования и науки РФ

Федеральное бюджетное государственное образовательное учреждение

высшего профессионального образования

«Тульский государственный университет»

Институт высокоточных систем им. В.П. Грязева

Факультет «Системы автоматического управления»

Кафедра «Системы автоматического управления»

Реферат по дисциплине

» Программирование и основы алгоритмизации»

Разработал студент гр.130101

Консультировал: Илюхин А. С.

Задание на курсовую работу

Система, приведенная к виду Коши

Описание исходных данных программы

Текст программы. Текст файла с исходными данными

Результат работы программы

График зависимости x(t)

Список использованной литературы

Задание на курсовую работу

На основе базовой программы для решения системы обыкновенных дифференциальных уравнений разработать программу для решения системы уравнений:

Разработать программу в системе программирования Паскаль АВС, выполняющую следующие действия.

1. Чтение исходных данных из внешнего файла.

2. Вывод исходных данных и результатов на дисплей и во внешний файл.

Программа должна состоять из главной программы, Главная программа должна выполнять обращение к процедурам вычисления функций «правых частей» и процедуры, реализующей метод Ейлера.

Система, приведенная к виду Коши

Начальные условия — нулевые.

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

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

Пусть задано дифференциальное уравнение первого порядка с начальным условием (задача Коши)

где F(x,y) — заданная функция двух переменных х и у, х, у — известные числа. Требуется определить функцию у>у(х) при x>х. Уравнение (1) можно рассматривать как задание кривой через ее производную в координатной плоскости x, у, поскольку известно как вычислить производную в каждой точке этой кривой через ее координаты. В общем случае уравнению (1) удовлетворяет целое семейство кривых; начальное условие (2) позволяет выбрать из этого семейства одну определенную кривую, которая проходит через заданную точку х, y.

Для численного решения (1), (2) заменим область непрерывного изменения аргумента x дискретным множеством точек, т.е. введем сетку. Положим, что величина х изменяется от значения х=х до значения х=Ь. Тогда, рассматривая равномерную сетку, получаем узловые точки x, x1. xk. b, находящиеся на расстоянии h друг от друга, т.е.

где h — шаг сетки. Соответствующие значения функции будем обозначать yk, т.е.

Здесь у* (х) — функция, которая является приближенным решением (1), (2). Для получения численного решения, дифференциальное уравнение (1) заменяется уравнениями относительно значений функций у*(х) в узловых точках. Эти уравнения называются разностными. Простейшее разностное уравнение для (1) имеет вид

Уравнение (4) следует из (I), если производную dy/dx приближенно представить через значения функции у(х) в соседних узлах.

Соотношения (2. 12.4) можно записать в виде

Тогда, учитывая (2), с помощью формулы (5) можно последовательно определить значения y1, y2. Этот метод приближенного решения (1), (2) называется методом Эйлера. Геометрическая интерпретация этой схемы дана на. рис.1, где изображено поле интегральных кривых. Использование только первого члена формулы Тейлора означает движение не по интегральной кривой, а по касательной к ней. На каждом шаге мы заново находим касательную; следовательно, траектория движения будет ломаной линией. Из-за этого метод Эйлера иногда называют методом ломаных.

Доказывается, что если шаг сетки h стремится к нулю, то приближенное решение, определяемое (5), стремится к точному решению (1), (2), т.е. имеется факт сходимости приближенного решения к точному при h>0. Однако в условиях реальных вычислений на компьютере при конечном шаге целесообразно знать насколько полученное приближенное решение близко к точному.

программирование паскаль файл язык

3. Описание исходных данных программы

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×