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

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

Nickolay.info. Алгоритмы. Решение задачи Коши методом Эйлера

1. Типы задач для обыкновенных дифференциальных уравнений

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

В дифференциальное уравнение n-го порядка в качестве неизвестных величин входят функция у(х) и её первые n производных по аргументу х.

Решение дифференциальных уравнений на паскале(1)

Из теории ОДУ известно, что уравнение (1) эквивалентно системе n уравнений первого порядка

Решение дифференциальных уравнений на паскале(2)

Уравнение (1) и эквивалентная ему система (2) имеют бесконечное множество решений. Единственные решения выделяют с помощью дополнительных условий, которым должны удовлетворять искомые решения. В зависимости от вида таких условий рассматривают три типа задач, для которых доказано существование и единственность решений.

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

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

Для системы ОДУ типа (2) начальные условия задаются в виде

Решение дифференциальных уравнений на паскале(3)

Ко второму типу задач относятся так называемые граничные, или краевые задачи, в которых дополнительные условия задаются в виде функциональных соотношений между искомыми решениями. Количество условий должно совпадать с порядком n уравнения или системы. Если решение задачи определяется в интервале x принадлежит [х0, хk], то такие условия могут быть заданы как на границах, так и внутри интервала. Минимальный порядок ОДУ, для которых может быть сформулирована граничная задача, равен двум.

Третий тип задач для ОДУ — это задачи на собственные значения. Такие задачи отличаются тем, что кроме искомых функций у(х) и их производных в уравнения входят дополнительно m неизвестных параметров λ1, λ2, …, λm, которые называются собственными значениями. Для единственности решения на интервале [х0, хk] необходимо задать n+m граничных условий. В качестве примера можно назвать задачи определения собственных частот, коэффициентов диссипации, структуры электромагнитных полей и механических напряжений в колебательных системах, задачи нахождения фазовых коэффициентов, коэффициентов затухания, распределения напряженностей полей волновых процессов и т. д.

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

Большинство методов решения ОДУ основано на задаче Коши, алгоритм решения которой рассматривается далее.

Систему ОДУ (2) часто удается представить в каноническом виде, в так называемой форме Коши

Решение дифференциальных уравнений на паскале(4)

При формулировке задачи Коши система (4) дополняется начальными условиями (3). Для простоты рассмотрим задачу Коши для одного уравнения типа (4), а затем полученные алгоритмы обобщим на систему n уравнений

Решение дифференциальных уравнений на паскале (5)

В окрестности точки х0 функцию у(х) разложим в ряд Тейлора

Решение дифференциальных уравнений на паскале(6)

который можно применить для приближенного определения искомой функции у(х). В точке х0 + h при малых значениях h можно ограничиться двумя членами ряда (6), тогда

Решение дифференциальных уравнений на паскале(7)

где O(h 2 ) — бесконечно малая величина порядка h 2 . Заменим производную у'(x0), входящую в формулу (7), на правую часть уравнения (5):

Решение дифференциальных уравнений на паскале(8)

Теперь приближенное решение в точке х1 = х0 + h можно вновь рассматривать как начальное условие и по формуле (8) найти значение искомой функции в следующей точке х2 = x1 + h1. В результате получен простейший алгоритм решения задачи Коши, который называется методом Эйлера, или методом ломаных. Последнее название связано с геометрической интерпретацией процесса (см. рис.); искомую функцию у(х) мы заменяем ломаной линией, представляющей собой отрезки касательных к этой функции в узлах

Решение дифференциальных уравнений на паскалеРис. Метод Эйлера

Формула (8) может быть получена из других соображений. Заменим производную в левой части уравнения (5) приближенным конечно-разностным отношением

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

Нетрудно видеть эквивалентность последнего выражения с алгоритмом Эйлера (8).

На каждом шаге метода Эйлера решение у(х) определяется с погрешностью за счет отбрасывания членов ряда Тейлора, пропорциональных h в степени выше первой. Это означает, что метод Эйлера имеет второй порядок локальной погрешности. Доказано, что глобальная погрешность метода имеет первый порядок; и при постоянном шаге h для оценки погрешности применима первая формула Рунге

Решение дифференциальных уравнений на паскале, (9)

где yh(x) — приближенное решение дифференциального уравнения в точке х, полученное с шагом h; уkh(х) — приближенное решение того же уравнения с шагом kh; р — порядок метода.

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

Для уточнения решения применима вторая формула Рунге

Решение дифференциальных уравнений на паскале(10)

Формула Эйлера (8) обобщается для систем ОДУ, записанных в форме Коши (4) с начальными условиями (3)

Решение дифференциальных уравнений на паскале(11)

Представленная ниже программа реализует метод Эйлера решения задачи Коши для системы дифференциальных уравнений. Функция уравнения задаётся подпрограммой f(x), точное решение – подпрограммой ft(x). Пользователь вводит интервал поиска решения [A,B], число шагов N, начальное значение Y(0). Программа выводит найденное решение и оценивает его максимальную погрешность.

Видео:Математика это не ИсламСкачать

Математика это не Ислам

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

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

Возможно, ваша ваша проблема уже имеет решение на нашем форуме

Извините — ничего не понял! Уравнение вполне себе легко решается аналитически, и выглядит это так:

1. Записываем в виде y’ — y = 1 + x.
2. Решаем однородное уравнение y’ — y = 0. Его решением, очевидно, является C*exp(x).
3. Частное решение ищем методом вариации постоянной, т.е. в виде C(x)*exp(x). Подставляя в исходное уравнение и интегрируя, находим C(x)=C1-exp(-x)*(x+2).
4. Таким образом, окончательно y=C1*exp(x)-x-2.

И при чем тут Паскаль, программирование, точность и всё такое прочее? Кроме того, полагаю, что Ваше предположение о том, что у=1 имеет какое-то отношение к таинственному «шагу», есть полный абсурд. Скорее всего, у=1 — это значение искомой функции при некотором значении аргумента х (например, при х=0), которое Вы пропустили, и которое требуется для определения константы С1.

Видео:Решение дифференциальных уравнений. Практическая часть. 11 класс.Скачать

Решение дифференциальных уравнений. Практическая часть. 11 класс.

Метод Рунге-Кутта решения диф. уравнений и их систем.

Метод позволяет решать системы обыкновенных дифференциальных уравнений (ОДУ) первого порядка следующего вида:

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

которые имеют решение:

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

где t — независимая переменная (например, время); X, Y и т.д. — искомые функции (зависимые от t переменные). Функции f, g и т.д. — заданы. Также предполагаются заданными и начальные условия, т.е. значения искомых функций в начальный момент.

Одно диф. уравнение — частный случай системы с одним элементом. Поэтому, далее речь пойдет для определенности о системе уравнений.

Метод может быть полезен и для решения диф. уравнений высшего (второго и т.д.) порядка, т.к. они могут быть представлены системой диф. уравнений первого порядка.

Метод Рунге-Кутта заключается в рекурентном применении следующих формул:

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

Реализация Метода Рунге-Кутта на Delphi может выглядеть так (привожу полностью модуль):

Модуль полностью работоспособен. Возвращаемое функцией Runge_Kutt значение — код ошибки. Вы можете дополнить список ошибок по своему усмотрению. Рассчитанные функции системы помещаются в массив Res. Чтобы не загромождать код, в модуле опущены проверки (типа блоков try). Рекомендую их добавить по своему усмотрению.

Ниже приводится описание функции Runge_Kutt и типов, использующихся в модуле.

  • FunArray — вектор функций (правых частей уравнений системы);
  • First, Last — начальная и конечная точки расчетного интервала;
  • Steps — число шагов по расчетному интервалу;
  • InitArray — вектор начальных значений
  • var Res — матрица результатов включая независимую переменную.

В модуле описаны типы:

Функция возвращает коды ошибок:

  • 0 — нет ошибок;
  • 100 — число уравнений не равно числу начальных условий.

Решение содержится в переменной-матрице Res. Первый индекс матрицы относится к переменной (0 — независимая переменная, 1 — первая зависимая и т.д.), второй — к номеру расчетной точки (0 — начальная точка).

Рассмотрим один пример использования модуля. Создадим новое приложение и подключим к нему модуль. На форме приложения разместим кнопку Button1 и область текста Memo1. Поместим в приложение две функции и обработчик нажатия кнопки:

Нажатие кнопки приведет к расчету точек системы, которые будут выведены в текстовую область.

Модуль с примером и справкой можно скачать бесплатно по адресу RK.zip (ZIP, 15,3Kb) (русский вариант). Английский вариант (условно-бесплатный) можно скачать по адресу RK_Eng.zip (ZIP, 23.4Kb)

Видео:Решение дифференциальных уравнений ДИФФУРЫСкачать

Решение дифференциальных уравнений ДИФФУРЫ

Ссылки

  • http://sadovoya.narod.ru/RK.zip (русский вариант).
  • http://sintreseng.narod.ru/RK_Eng.zip (английский, условно-бесплатный вариант)

Видео:18+ Математика без Ху!ни. Дифференциальные уравнения.Скачать

18+ Математика без Ху!ни. Дифференциальные уравнения.

Оставить комментарий

Видео:Решение системы дифференциальных уравнений методом ЭйлераСкачать

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

Комментарии

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

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

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

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

Скачала по Вашей ссылке русский вариант, изменила для своей системы диф. уравнений, но при запуске выдаёт ошибку :
Project Ex.exe raised exception class EOverflow with message ‘ Floating point overflow ‘
Помогите, пожалуйста .

Вот изменённый мною модуль:

unit Unit1;
interface
uses
SysUtils, Forms, StdCtrls, Controls, Classes, Dialogs, Math;
type
TForm1 = class(TForm)
Memo1: TMemo;
rk_But: TButton;
procedure rk_ButClick(Sender: TObject);
private

public

end;
var
Form1: TForm1;
pn,k,ro,Pzv: Extended;

implementation
uses rk_method, Windows;

procedure Syst (var t: TFloat; var X: TFloatVector;
var RP: TFloatVector);
const
fdr1=0.503;
fdr2=0.503;
fdr3=0.196;
W1=179.8928;
W2=3773.8568;
W3=2504.1203;
b1=55.9203;
b2=98.6;
b3=98.6;
Ls1=3.78;
Ls2=9;
Ls3=15.3;
Svidj2=1352.438;
Svidj3=1352.438;
my=0.62;
vk=30;
m=1.2;
L1=30.969;
L2=42.131;
delta1=0;

begin
pn:=2.5*Power(10,4);
k:=6*Power(10,-7);
ro:=8.5*Power(10,-7);
Pzv:=3.919*Power(10,7);

RP[0] := (1/(k*W1))*(my*fdr1*sqrt(2/ro)*sqrt(Abs(pn-X[0]))-my*fdr2*sqrt(2/ro)*sqrt(Abs(X[0]-X[1]))-(delta1*delta1*delta1*b1)/(12*ro*vk*Ls1)*X[0]); // dp1/dt
RP[1] := (1/(k*W2))*(my*fdr2*sqrt(2/ro)*sqrt(Abs(X[0]-X[1]))-my*fdr3*sqrt(2/ro)*sqrt(Abs(X[1]-X[2]))-(X[4]*X[4]*X[4]*b2)/(12*ro*vk*Ls2)*X[1]); // dp2/dt
RP[2] := (1/(k*W3))*(my*fdr3*sqrt(2/ro)*sqrt(Abs(X[1]-X[2]))-(X[6]*X[6]*X[6]*b3)/(12*ro*vk*Ls3)*X[2]); // dp3/dt;
RP[3] := (((Svidj2*X[1]*(L1+L2))/L1)-Pzv)*(2/m); // dv2/dt
RP[4] := X[3]; // d delta2/dt
RP[5] := (((Svidj3*X[2]*(L1+L2))/L2)-Pzv)*(2/m); // dv3/dt
RP[6] := X[5]; // d delta3/dt
end;

procedure TForm1.rk_ButClick(Sender: TObject);
var
I, t1, t2: Cardinal;
tOut, InitConds: TFloatVector;
XOuts: TFloatMatrix;
Points: Cardinal;
First, Last: TFloat;
StepsFact: Cardinal;
Count: Word;
begin
Memo1.Clear;
First := 0.0;
Last := 10.0;
Count:= 7;
Points:=10+1; //11 points for output
StepsFact:=1000000; //all steps inside function = 10*StepsFact

try
SetLength(InitConds, Count);
InitConds[0]:=0.0; //x0(0)=0
InitConds[1]:=0.0; //x1(0)=0
InitConds[2]:=0.0; //x2(0)=0
InitConds[3]:=0.0; //x3(0)=0
InitConds[4]:=0.0; //x4(0)=0
InitConds[5]:=0.0; //x5(0)=0
InitConds[6]:=0.0; //x6(0)=0

SetLength(tOut, Points);
SetLength(XOuts, Count, Points);
except
ShowMessage(‘Out of memory. ‘);
exit;
end;

📸 Видео

Откуда появляются дифференциальные уравнения и как их решатьСкачать

Откуда появляются дифференциальные уравнения и как их решать

Задача Коши ➜ Частное решение линейного однородного дифференциального уравненияСкачать

Задача Коши ➜ Частное решение линейного однородного дифференциального уравнения

14. Дифференциальные уравнения второго порядка, допускающие понижение порядкаСкачать

14. Дифференциальные уравнения второго порядка, допускающие понижение порядка

Дифференциальные уравнения. 11 класс.Скачать

Дифференциальные уравнения. 11 класс.

Дифференциальные уравнения, 4 урок, Линейные дифференциальные уравнения первого порядкаСкачать

Дифференциальные уравнения, 4 урок, Линейные дифференциальные уравнения первого порядка

Дифференциальные уравнения, 5 урок, Уравнение БернуллиСкачать

Дифференциальные уравнения, 5 урок, Уравнение Бернулли

6. Особые решения ДУ первого порядкаСкачать

6. Особые решения ДУ первого порядка

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

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

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

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

Поле направлений дифференциального уравнения первого порядкаСкачать

Поле направлений дифференциального уравнения первого порядка
Поделиться или сохранить к себе:
04.05.2011, 13:05#2 (permalink)