Тема: Моделирование физического процесса.

Цель: На примере построения математической модели и составления программы анализа движения груза на пружине показать применение ЭВМ для исследования явлений и процессов природы. Дать учащимся представление об основных этапах решения задач с применением ЭВМ.

Содержание нового материала. Лекция.

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

Общий план решения задач с применением ЭВМ:

Рассмотрим этапы решения задачи на примере достаточно хорошо
известном из курса физики.

1. Постановка задачи.

Решить основную задачу механики для тела подвешенного на пружине. Основной задачей механики является выяснение зависимости координаты тела от времени. Эту зависимость можно представить:
а) аналитически, в виде функции зависимости координаты от времени X=X(t);
б) в виде таблицы;
в) графически.
Аналитичекое решение задачи ЭВМ на сегодняшнем уровне развития техники и информатики не возможно. Выдать решение задачи в виде таблиц или графиков реальная возможность современных ЭВМ. Нам остается выбрать табличный или графический способ вывода результатов решения задачи на внешние устройства.
Для большей наглядности полученного результата воспользуемся графическим способом вывода результата на дисплей.

2. Построение математической модели.

Введем систему координат. Начало координат поместим в положении равновесия, ось X направим вертикально вверх. Сила, с которой отклоненная на расстояние x от положения равновесия пружина действует на тело, равна F = -k*x, где k - жесткость пружины, знак <<минус>> поставлен, так как сила с которой пружина действует на тело, направлена противоположно отклонению тела. Ускорение a тела равно F/m, где m - масса тела. Пусть отрезок времени dt мал, тогда за время dt ускорение и скорость изменяются мало. Если ускорение равно а, то за время dt скорость изменяется на dv = a*dt. Если скорость равна v, то за время dt координата тела изменяется на dx = v*dt. Будем вычислять положение, ускорение и скорость тела, разбив ось времени на участки по dt сек. Т.е. весь промежуток времени от 0 до t разбиваем на очень маленькие промежутки через dt сек. Заметим, что эта громадная по объему вычислительная работа будет поручена ЭВМ.

Начнем с самого начала (начальных условий). В момент времени t=0 начальная координата тела (координата, в которой тело находилось в начале своего движения) равна x0, начальная скорость (скорость, которую имело тело в момент, когда мы начали рассматривать его движение) равна v0.

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

x = x0
а = -k*x/m

Для большей точности, скорость мы будем вычислять в середине промежутка dt. Первое значение скорости мы вычислим в середине интервала от 0 до dt. Обозначим это время tт=dt/2.

v = v0 +(a*dt/2) (прошло dt/2 секунд)

Затем, добавляя по dt сек к текущему времени (tт) мы всякий раз будем оказываться в середине интервала dt и вычислять на этот момент времени координату, ускорение и скорость. Т.к. мы условились результаты вычислений выводить на дисплей в виде графика, то после вычислений будет отмечать на координатной плоскости координату x в текущий момент времени в соответствующем масштабе.

Выделим аргументы и результаты:
Аргументы: m - масса колеблющегося тела в кг;
к - жесткость пружины в Н/м;
t - промежуток времени за который рассматриваем
движение тела в сек;
dt - малый промежуток времени на котором движение
тела можно рассматривать равномерным в сек;
v0 - начальная скорость тела в м/с;
х0 - начальная координата тела в м.
Результат: Представление результата в виде графика зависимости координаты x от текущего времени tт.

3. Построение алгоритма.

Запишем теперь все сказанное выше в виде алгоритма, вычисляющего координату x точки, в которой находится тело массой m по истечению tт сек времени.

Переменные:
m,к,t,dt,v0,х0 а,v,х,tт

Начальные условия:
х:=х0; а:=-к*х/m; v:=v0+(а*dt/2); tт:=dt/2
Установить начальное значение текущей точки (0,х);

While tт<=t do
begin
х:=х+(v*dt); а:=-к*х/m; v:=v+(а*dt)
tт:=tт+dt
начертить линию от текущей точки до (tт,х)
end;

Сценарий работы программы пусть будет таким:
а) Очистить экран;
б) Высветить заставку программы;
в) Запросить на чтение входные данные;
г) Подготовить ЭВМ для работы с графикой;
д) Начертить оси координат;
ж) Произвести расчет и вывести результат на экран дисплея в виде графика;

4. Запись алгоритма на языке программирования.

Запишем программу на языке Паскаль.

За основу возьмем программу вычерчивания графиков функций. Напоминаем, что гораздо легче и быстрее что либо отредактировать, чем писать всю программу заново. Легко заметить, что основные блоки программы SKDX.PAS с малыми изменениями входят в программу KOLEB.PAS

Program KOLEB;
Var
i : integer;
m,k,t,dt,v0,x0:real;

(* m - масса колеблющегося тела в кг *)
(* k - Жесткость пружины в Н/м *)
(* t - промежуток времени на котором рассматриваем *)
(* движение тела в с *)
(* dt - малый промежуток времени на котором движение *)
(* можно рассматривать равномерным в с *)
(* v0 - начальная скорость тела в м/с *)
(* x0 - начальная еоордината тела в м *)

Procedure Presentation;
begin
Writeln (' Учебная программа:');
Writeln ('Движение тела на пружине.');
end;

Procedure Input;
begin
Writeln (' Введите:');
Write (' - массу колеблющегося тела в кг. m=');
Read (m);
Write (' - жесткость пружины в Н/м. k=');
Read (k);
Writeln (' - промежуток времени на котором рассматриваем ');
Write (' движение тела в с. t=');
Read (t);
Writeln (' - малый промежуток времени на котором движение ');
Write (' можно рассматривать равномерным в с. dt=');
Read (dt);
Write (' - начальная скорость тела в м/с. v0=');
Read (v0);
Write (' - начальная координата тела в м. x0=');
Read (x0);
end;

Procedure AxisCoordination;
Var i:integer;
begin
Line (0,128,511,128); {ось X} {координаты центра}
Line (256,0,256,255); {ось Y} { X=256, Y=128 }

Line (256-3,5,256,0); {стрелка по оси Y}
Line (256+3,5,256,0);

Line (511-6,128-3,511,128); {стрелка по оси X}
Line (511-6,128+3,511,128);

for i:=0 to 24 do {масштабная черта по оси Y}
Line (256-1,8+(10*i),256+1,8+(10*i));

for i:=1 to 25 do {масштабная черта по оси X}
Line (20*i-4,128-1,20*i-4,128+1);
GotoXY (33,0); Write ('Y');
GotoXY (62,8); Write ('X'); GotoXY (0,0);
end;

Procedure grafik (m,k,t,dt,v0,x0:real);
Var a,v,x,Tt :real;
x1,x2,y1,y2 :integer;
begin
x:=x0; a:=-k*x/m; v:=v0+(a*dt/2); Tt:=dt/2;
x1:=256; { в начало координат т.к. t=0 }
y1:=Round(128-(10*x*10)); { в точку с координатой x0 }

While Tt <= t do
begin
x:=x+(v*dt); a:=-k*x/m; v:=v+(a*dt);
x2:=256+Round(Tt*20*10);
y2:=128-Round(x*10*10);
Line (x1,y1,x2,y2);
x1:=x2; y1:=y2;
Tt:=Tt+dt;
end;
end;

begin (* начало программы *)
Clrscr;
Presentation;
Input;
Clrscr;
ClrGScr; (* ПОДГОТОВКА ГРАФИЧЕСКОГО ОЗУ *)
Writeln (' Масштаб:');
Writeln (' 1 деление по оси t равно 0.1с.');
Writeln (' 1 деление по оси x равно 0.1м.');

AxisCoordination; (* вычерчивание осей координат *)
grafik ( m,k,t,dt,v0,x0); (* расчет и построение графика *)

repeat until keypressed;
end.

Домашнее задание: Знать математическую модель и программу
анализа дижения груза на пружине.

Hosted by uCoz