- •В. К. Никишев Математическое моделирование
- •Предисловие
- •Отчет по лабораторной работе
- •Форма для исследования объекта
- •Исходное дифференциальное уравнение
- •Лабораторная работа 2 Методы исследования объектов, динамика которых описывается дифференциальными уравнениями 2-го поряда.
- •Лабораторная работа 3 Методы исследования объектов, динамика которых описывается дифференциальными уравнениями с использованием программы для моделирования
- •Лабораторные работы для исследования физических, биологических и других систем
- •Пример. Исследовать падение шарика радиуса r с высоты h
- •Пример2 . Исследовать падение шарика радиуса r с высоты h в среде MatLab
- •Пример3. Исследовать движение исследовательского зонда вертикально вверх с летящего самолета
- •Пример. Исследование динамики объектов, брошенных под углом к горизонту.
- •2.4 Лабораторные работы по разработке имитационных моделей Пример. Разработка информационной модели студента ( учащихся)
- •2.5 Разработка моделей транспортных задач Пример. «Размещения предприятий»
- •Пример Моделирование системы планирования на основе метода сетевого графа
- •Пример. Планирование производства товаров на основе модели получения максимальной прибыли с использованием метода линейного программирования
- •2.9 Лабораторная работа
- •2.10 Лабораторная работа 10
- •Тема. Моделирование объектов методом
- •Пространства состояния, динамика которого
- •Описывается дифференциальным уравнением
- •3. Индивидуальные задания по моделированию
- •Моделирование биологических систем Модель однородной популяции
- •Модель межвидовой конкуренции
- •Эпидемия болезней
- •Модель “хищник - жертва”
- •Рост опухоли
- •3.5 Моделирование оптимальных систем
- •4 Где построить школу?
- •Литература
- •Оглавление
Отчет по лабораторной работе
Рис.1. Форма 2. Автор Рис. 2. Форма 4. Условие
Рис. 3. Форма 1. Титульный лист
Форма для исследования объекта
Рис. 4. Форма 3. Результаты исследования
Листинг программы ( язык программирования Delphi)
procedure TForm3.Button2Click(Sender: TObject); ( рис. 4).
var: x:real; i:integer;
function F(x,y:real):real;
begin
f:=5*x+(3*y)-4;
end;
begin
a:=StrToFloat(Edit1.text);
b:=StrToFloat(Edit2.text);
h:=StrToFloat(Edit3.text);
y1:=strtofloat(edit4.text); //шаг
memo1.lines.add(floattostr(x));
memo2.lines.add(floattostr(y));
x:=a;
Chart1.Series[0].clear; Chart1.Series[1].clear;
repeat
begin
y:=y1+h*f(x,y);
Chart1.Series[0].Add(y,FloatToStr(x),clRed);
Chart1.Series[1].Add(f(x,y),FloatToStr(x),clblue);
x:=x+h; y1:=y;
memo1.lines.add(floattostrf(x,fffixed,7,3));
memo2.lines.add(floattostrf(y,fffixed,7,3));
end;
until x>b;
end;
Листинг программы ( язык программирования VC++)
Исходное дифференциальное уравнение
ý -y- 2*sin(x) = 0;
Рис 5. Форма для условия задачи.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
this->Hide();
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
double f1,x, y1;
double h = Convert::ToDouble(textBox1->Text);
double b = Convert::ToDouble(textBox2->Text);
double y = Convert::ToDouble(textBox3->Text);
x = 0;
y1 = y;
chart1->Series[0]->Points->Clear();
chart1->Series[1]->Points->Clear();
do
{
f1 = y - 2*sin(x);
x = x+h;
y = y+f1*h;
chart1->Series[0]->Points->AddXY(x, y);
chart1->Series[1]->Points->AddXY(x,f1);
}
while (x<=b);
}};}};}
Рис 6. Форма для автора.
Рис 7. Форма для отображения результатов моделировния.
Язык программирования C#
private void button1_Click(object sender, EventArgs e)
{
double h = 0.01;
double y = 0;
double b = 2;
double x = 0;
double y1 = 4;
do
{
double f = y + 2*Math.Sin(x);
x = x + h;
y = y1 + f * h;
chart1.Series[0].Points.AddXY(x, y);
chart1.Series[1].Points.AddXY(x, f);
y1 = y;
}
while (x <= b);
}
// foreach (DataPoint p in chart1.Series[0].Points)
// {
// Вывожу Х в лог
// textBox1.AppendText("X=" + p.XValue.ToString());
// textBox1.AppendText(Environment.NewLine);
// listBox1.Items.Add("X=" + p.XValue.ToString());
// }
// Y является массивом, поэтому пробегаю по массиву
// foreach (DataPoint yp in chart1.Series[0].Points)
// {
//Вывожу Y
// textBox1.AppendText("Y=" + yp.ToString());
// textBox1.AppendText(Environment.NewLine);
// listBox1.AppendText("Y=" + yp.ToString());
// listBox1.AppendText(Environment.NewLine);
// listBox2.Items.Add("Y=" + yp.ToString());
// }
// }
private void chart1_Click(object sender, EventArgs e)
{
}
private void button2_Click_1(object sender, EventArgs e)
{
Close();
} }}
Пример 2.
Условия задачи: Исследовать объект, динамика которого представляется дифференциальным уравнением
ý - y-a*sin(x) = 0;
Цель занятия: получить практические навыки исследования систем (объектов), динамика которых описывается дифференциальными уравнениями 1-го порядка при изменении параметра «а»
Задачи занятия:
1. Разработка алгоритма в виде блок- схемы.
2. Построение графиков кривых y=f(x), ý =f(x) =y(x) при параметрах a-var
Рис 8. Титульный лист Рис. 9. Условия задачи
Рис 10. Автор программы
Рис. 11. Результаты исследования.
Листинг программы
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
this->Hide();
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
double f1,f2,x, y1;
double h = Convert::ToDouble(textBox1->Text);
double b = Convert::ToDouble(textBox2->Text);
double y2 = Convert::ToDouble(textBox3->Text);
double a = Convert::ToDouble(textBox4->Text);
double a1 = Convert::ToDouble(textBox5->Text);
x = 0;
// double y1 = y2;
int a3=a;
//for int i=0;i<=1;i++)
//{
chart1->Series[0]->Points->Clear();
chart1->Series[1]->Points->Clear();
chart1->Series[2]->Points->Clear();
chart2->Series[0]->Points->Clear();
chart2->Series[1]->Points->Clear();
chart2->Series[2]->Points->Clear();
//}
do
{
// for (int i=1;i<=5;i++)
// {
a3=a;
f1 = y2 - a3*sin(x);
// int i=0;
double y = y2+f1*h;
//int i=0;
chart1->Series[0]->Points->AddXY(x, y);
chart2->Series[0]->Points->AddXY(x,f1);
a3=a3+a1;
f1 = y2 - a3*sin(x);
y = y2+f1*h;
chart1->Series[1]->Points->AddXY(x,y);
chart2->Series[1]->Points->AddXY(x,f1);
a3=a3+a1;
f1 = y2 - a3*sin(x);
y = y2+f1*h;
chart1->Series[2]->Points->AddXY(x,y);
chart2->Series[2]->Points->AddXY(x,f1);
//y=y2;
x = x+h;
}
while (x<=b);
x=0;
}
private: System::Void chart2_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {
}
};
}