Реализован парсинг текста и анализ синтаксических ошибок.
- Написать парсер дифференциальных уравнений
Разделы- Дифференциальные уравнения
- Начальные условия
- Метод интегрирования (3+ штук)
- Промежуток интегрирования, шаг
- Реализовать систему диагностики
- Графики после интегрирования
Простое приложение с графическим интерфейсом, позволяющее решать систему из простых дифференциальных уравнений. Программа считает плозади кривых на заданном интервале и рисует их графики.
- С постоянным шагом
- Эйлера
- Рунге-Кутты 2 порядка
- Рунге-Кутты 3 порядка
- Рунге-Кутты 4 порядка
- С плавающим шагом
- Рунге-Кутта-Фельберга 4-5 порядка
- Рунге-Кутта-Дормана-Принса 4-5 порядка
В нотации Корягина С.В.
Language = "Programm" ProgramName Equations BeginConditions IntegrationConfitions
ProgramName = Var
Equations = "Equations" ":" Equation ... Equation
BeginConditions = "BeginConditions" ":" BeginContition ... BeginCondition
IntegrationConditions = "IntegrationConditions" ":" IntegrationConfition
Equation = IntegrationVar "=" RightBlock ";"
RightBlock = </ "-" /> AdditionBlock ("+" ! "-") ... AdditionBlock
AdditionBlock = MultiplicationBlock ("*" ! "/") ... MultiplicationBlock
MultiplicationBlock = DegreeBlock "^" ... DegreeBlock
FuncBlock = "sin(" RightBlock ")" ! "cos(" RightBlock ")" ! DegreeBlock
DegreeBlock = Var ! Number ! "(" RightBlock ")"
BeginContition = Var "=" Number ";"
IntegrationCondition = IntegrationConditionMethod IntegrationConditionPeriod IntegrationConditionStep
IntegrationConditionMethod = "method" "=" ("Euler" ! "Runge-Kutti-1" ! "Runge-Kutti-2" ! ... ! "Runge-Kutti-4") ";"
IntegrationConditionPeriod = "t" "=" Number ";"
IntegrationConditionStep = "dt" "=" Number ";"
IntegrationVar = Var "/dt"
Var = Symbol ... Symbol
Symbol = Character ! Number
Number = FloatNumber ! IntNumber
IntNumber = Digit ... Digit
FloatNumber = IntNumber "." IntNumber
Character = "a" ! "b" ! ... ! "z" ! SpecialCharacter
SpecialCharacter = "_"
Digit = 0 ! 1 ! ... ! 9
program DiffSolv1
Equations:
Susc/dt = -A * Susc * Sick;
Sick/dt = A * Susk * Sick - (B + C) * Sick;
Cured/dt = B * Sick;
BeginConditions:
Susk = 620;
Sick = 10;
Cured = 70;
A = 000.1;
B = 0.07;
C = 0.01;
IntegrationConditions:
method = Euler;
t = 50;
dt = 0.5;