WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 |
Министерство общего и профессионального образования Российской Федерации Уфимский государственный авиационный технический университет Кафедра технической кибернетики ГРАФИКИ И ТРАЕКТОРИИ МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по учебной практике для подготовки инженеров по специальности 210100 ”Управление и информатика в технических системах” Уфа 1997 2 Составитель: О.В. Трушин УДК 681.3.06 Методические указания к лабораторным работам по учебной практике для подготовки инженеров по специальности 210100 ”Управление и информатика в технических системах” / Уфимск. гос. авиац. техн. унив-т; Сост. О. В. Трушин. - Уфа, 1997. – 30 с.

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

Табл. 4. Ил. 6. Библиогр.: 15 наимен.

Рецензенты: Л. П. Костюкова М. Е. Сидоров 3 Содержание Стр.

Введение........................................................................................... 4 Лабораторная работа № 1.

Построение графиков функций, заданных в явном виде............. 5 Лабораторная работа № 2.

Построение графиков функций, заданных в неявном виде......... 10 Лабораторная работа № 3.

Построение траекторий движения................................................ 13 Лабораторная работа № 4.

Изучение методов аппроксимации............................................... 21 Список литературы........................................................................ 26 Приложение А................................................................................ 27 4 Введение Проведение каких-либо серьезных расчетов, математическое моделирование процессов и явлений требуют визуализации получаемых результатов, как окончательных, так и промежуточных. Кроме наглядности визуальное представление перерабатываемой в программе информации позволяет избежать возможных ошибок, в ряде случаев оптимизировать используемые модели и алгоритмы. Средства современного персонального компьютера позволяют провести подобную визуализацию практически без каких-либо ограничений.

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

Графики функций строятся обычно в декартовой системе координат ( XoY ).

Функция может быть определена в явном виде типа Y=F(X), в неявном – F(X, Y)=0, в параметрическом – X=Fx( t), Y=Fy( t).

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

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

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

Лабораторная работа № ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ, ЗАДАННЫХ В ЯВНОМ ВИДЕ 1 Цель работы Практическое освоение методологии построения графика функции Y=F(X) в декартовой прямоугольной системе координат с использованием программных средств персонального компьютера.

2 Алгоритм построения графика функции Y=F(X) При построении графиков функций на экране монитора необходимо преобразовывать расчетные координаты в графические с учетом дискретности растровой сетки монитора, а также предусмотреть возможность масштабирования графика по осям координат. Для этого желательно создать процедуры, обеспечивающие универсальность при выводе графических изображений. Ниже приводится алгоритм построения графика функции Y=F(X) в заданной области экрана с возможностью автоматического масштабирования.

Пусть задана непрерывная функция F(X) в диапазоне измене- left right ния аргумента X=[A..B]. up Y Требуется построить по N точ- кам график функции Y=F(X) в пря- X моугольной области экрана left, up, A 0 B right, down. down а) Определяем массивы значений аргумента и функции:

X[i], Y[i]=F(X[i]), где i=1..N. При равномерном разбиении интервала [A..B] массивы можно задавать операторами Dx:= (B-A)/(N-1); { шаг разбиения по X } for i:=1 to N do begin X[i]:=A +Dx*(i-1);

Y[i]:=F(X[i]) end;

б) Определяем наибольшее Y_max и наименьшее Y_min значения функции в заданном интервале изменения аргумента Y_max:= Y[1]; Y_min:= Y[1];

for i:= 2 to N do begin IF Y_max < Y[i] THEN Y_max:=Y[i];

IF Y_min > Y[i] THEN Y_min:=Y[i] end;

В случае явного задания функции для аргумента X наибольшее значение X_max= B и наименьшее X_min= A. Эти значения необходимо определить для полного размещения графика в расчетной области.



в) Определяем коэффициенты масштабирования при построении графика в заданной области экрана Kx:=(right -left)/(X_max -X_min);

Ky:=( down - up )/(Y_max -Y_min);

Если X и Y имеют одинаковую размерность или оба безразмерны, то появится искажение естественной формы кривой вследствие разного масштабирования по осям координат ( растяжение или сжатие по одной из осей ). Для вывода графика без искажения формы кривой следует переназначить координаты области экрана так, чтобы получить Ky=Kx.

Например, при пересчете правой или нижней границы области вывода графиков if kX

down:= up +round((Ymax-Ymin)*kY) end else begin kX:=kY;

right:=left+round((Xmax-Xmin)*kX) end;

г) Определяем координаты точек для построения графика в системе координат экрана XG[i]:= left +round( Kx*( X[i]-X_min));

YG[i]:= down -round( Ky*( Y[i]-Y_min));

Здесь Kx*(X[i]-X_min) и Ky*(Y[i]-Y_min) – смещения координат точек по соответствующим осям относительно границ области left и down. Разные знаки перед смещениями по осям X и Y получаются из-за необходимости "переворота" оси Y, которая в координатах монитора направлена сверху вниз.

е) Строим график в виде последовательных отрезков moveto( XG[1], YG[1]);

for i:=2 to N do lineto( XG[i], YG[i]);

ж) Строим оси координат, предварительно задав начало координат X0,Y0 (обычно X0 =0, Y0 =0 ) и вычислив XG0:= left +round( Kx*(X0 -X_min));

YG0:= down -round( Ky*(Y0 -Y_min));

Оси координат целесообразно строить лишь с случае их попадания в соответствующие диапазоны X_min..X_max, Y_min..Y_max if X_min*X_max<=0 then line( XG0, up, XG0, down);

if Y_min*Y_max<=0 then line(left, YG0, right, YG0);

3 Методика построения набора графиков Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты X,Y и найти наибольшее и наименьшее значения для всех функций в заданных диапазонах изменения аргументов. Затем определить область для построения графика и наборы координат точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.

Пример файла (g_mn.pas), содержащего процедуру вывода не более четырех графиков:

type arr=array[1..4,1..200] of real; { массивы координат } ari=array[1..4,1..200] of integer; { для графиков } { процедура построения набора m графиков по массивам X,Y[1..m, 1..n] декартовых координат ( по n точкам ) в области экрана left,right,up,down без искажения форм кривых } procedure G_MN( X,Y: arr;

m,n, left,up,right,down: integer);

var Xg,Yg: ari; Xg0,Yg0, i,k : integer;

kX,kY, Ymin,Ymax,Xmin,Xmax: real;

{ при нахождении экстремумов вначале присваиваем им любые значения из рассматриваемых } begin Xmin:=X[1,1]; Xmax:=X[1,1];

Ymin:=Y[1,1]; Ymax:=Y[1,1];

for k:=1 to m do { перебор графиков } for i:=2 to n do begin if Ymin>Y[k,i] then Ymin:=Y[k,i];

if Ymax

if Xmin>X[k,i] then Xmin:=X[k,i];

if Xmax

{ коэффициенты масштабирования по горизонтали и вертикали } kX:=(right-left)/(Xmax-Xmin);

kY:=( down- up )/(Ymax-Ymin);

{ пересчет коэффициентов масштабирования правой или нижней границы области вывода для получения неискаженной формы кривых } if kX

down:= up +round( (Ymax-Ymin)*kY) end else begin kX:=kY;

right:=left+round( (Xmax-Xmin)*kX) end;

for k:=1 to m do { точки графиков в системе координат экрана } for i:=1 to n do begin Xg[k,i]:=left +round(kX*(X[k,i] -Xmin));

Yg[k,i]:=down -round(kY*(Y[k,i] -Ymin)) end;

setcolor( 7);

Rectangle(left,up,right,down); { выделение области графика } setcolor(14);

{ выводим ось ординат, если она расположена в области графика } if Xmin*Xmax<=0 then begin Xg0:=left-round(Xmin kX);

* line( Xg0,up, Xg0,down);

OuttextXY( Xg0+3,up+5,'ось Y') end;

{ выводим ось абсцисс, если она расположена в области графика } if Ymin Ymax<=0 then begin * Yg0:=down+round(Ymin kY);

* line( left,Yg0, right,Yg0);

OuttextXY( right-40,Yg0+6,'ось X') end;

for k:=1 to m do begin setcolor(8+k); { перебор графиков и назначение цветов } moveto( Xg[k,1],Yg[k,1]); { вывод очередного графика } for i:=2 to n do lineto( Xg[k,i],Yg[k,i]) end end;

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

uses Crt,Graph;

{$I g_mn.pas} { подключение файла с подпрограммой вывода набора графиков } { определение функций, графики которых будут строиться } function F1(x: real): real; begin F1:=ln(1+x) end;

function F2(x: real): real;

begin F2:=x-x x/2+x x*x/3-x*x*x*x/4 end;

* * var x,y: arr; { тип-массив определен в файле g_mn.pas } n,i, Gd,Gm: integer; a,b,dx: real;

begin n:=200; { число точек каждого графика } a:=-0.8; b:=2; { диапазон изменения параметра } dx:=(b-a)/(n-1); { шаг изменения параметра } { расчет массивов координат для функций } for i:=1 to n do begin x[1,i]:=a+(i-1)*dx; y[1,i]:=F1( x[1,i]);

x[2,i]:=x[1,i]; y[2,i]:=F2( x[2,i]) end;





Gd:=0; Initgraph(Gd,Gm,'c:\tp7\bgi');

{ вызов подпрограммы построения набора графиков } G_MN( x,y, 2,n, 10,10,GetmaxX,GetmaxY);

ReadKey; CloseGraph end.

4 Практическое задание 4.1 Построить графики функций, заданных по одному из вариантов в таблице 1:

а) Y1( x) и Y2( x) в разных областях экрана;

б) Y1( x) и Y2( x) в одной области экрана.

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

Таблица Функция Y1( x) Диапазон x Функция Y2( x) 1 Sin(x) -5...5 Sin(x2) 2 Cos(x2-4x-1) -1...10 Sin(x2-4x-1) --/-- 3 --/-- -10... 4 (x2-1)/(x4+1) -1.5...1.5 -x5 +2x3- 5 x(x-3)(x+1) -3...3 x(x-3)(x-1) 6 ex+e-x -3...3 ex+e-2x 7 x2 Sin(1/x) 0.1...3 x3 Sin(1/x2) --/-- 8 --/-- 0.01...0. 9 x Sin2(1/x) 0.1...5 (x+1)Sin2(1/x) --/-- 10 --/-- 0.01...0.11 Sqrt(x2+2)Sin(x) -10...10 (x+1)Sin(x) --/-- 12 --/-- -1...4.3 Построить в одной области экрана графики функций Y(x) и YN(x) по одному из вариантов таблицы 2. График функции YN(x) строится для трех и четырех членов разложения функции Y(х) в ряд Тейлора.

Например, для первого пункта таблицы нужно построить графики Y(x)=ex, Y3(x)=1+x+x2/2, Y4(x)=1+x+x2/2+x3/6.

Таблица Y( x) Разложение в ряд Тейлора YN( x) Интервал x 1 ex 1 +x +x2/2! +x3/3! +.. -2..2 Sin(x) x -x3/3! + x5/5! -x7/7! +.. -3..3 Cos(x) 1 -x2/2! + x4/4! -x6/6! +.. -3..-0,9..0,4 (1+x)m 1 +mx +m(m-1)x2/2! + m(m-1)(m-2)x3/3!+..

m=0.5, 1, 5 Ln(1+x) x -x2/2 +x3/3 -x4/4 +.. -0,95..6 sh(x) x +x3/3! + x5/5! +x7/7! +.. -2..7 ch(x) 1 +x2/2! + x4/4! +x6/6! +.. -3..8 Arctan(x) x -x3/3 +x5/5 -x7/7 +.. -1.. Лабораторная работа № ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ, ЗАДАННЫХ В НЕЯВНОМ ВИДЕ 1 Цель работы Практическое освоение методологии построения графиков функций, заданных в параметрической форме Y=FY( t), X=FX( t) или в неявной форме F( X,Y)=0, которая часто определяется какими-либо реальными физическими процессами или явлениями.

2 Построение графика функции, заданной в параметрической форме Параметрическая форма задания функций Y=FY( t), X=FX( t) в большинстве случаев является более удобной при моделировании каких-либо явлений, чем явная форма. Наиболее часто используется представление в полярных координатах в виде зависимости длины радиус-вектора R от его направления ( alfa – угол между вектором и осью X, – используется в качестве параметра):

R=F( alfa), X=R*sin( alfa), Y=R*cos( alfa).

а) Определяем массивы значений параметра t[i], а также функций X[i]=FX(t[i]), Y[i]=FY(t[i]), где i=1..N. При равномерном разбиении интервала [A..B] изменения параметра массивы можно задать операторами:

Dt:= (B-A)/(N-1); { шаг разбиения по t } for i:=1 to N do begin t[i]:=A +Dt*(i-1); X[i]:=FX(t[i]);

Y[i]:=FY(t[i]) end;

б) Определяем наибольшее Y_max и наименьшее Y_min значения функции Y=FY( t) в заданном интервале изменения параметра t и аналогично X_max, X_min для функции X=FX( t).

Далее расчет проводится по пунктам алгоритма построения графика функции Y=F(X) ( стр. 6 ).

Пример программы построения графиков трех функций ( рисунок 1 ) в полярной системе координат:

uses Crt,Graph;

{$I g_mn.pas} { подключение файла с подпрограммой вывода набора графиков } { Функции, графики которых строим в полярной системе координат } function F1(x: real): real; begin F1:=sin(x)-0.5 end;

function F2(x: real): real; begin F2:=sin(2*x) end;

function F3(x: real): real; begin F3:=x/5 end;

var x,y: arr; { тип-массив определен в файле g_mn.pas } n,i,k, Gd,Gm: integer; a,b, fi,ro: real;

begin n:=200; { число точек каждого графика } a:=0; b:=2*pi; { диапазон изменения аргумента ( полярного угла) } { расчет массивов координат для функций } for i:=1 to n do begin x[1,i]:=a+(i-1)*(b-a)/(n-1);

y[1,i]:=F1(x[1,i]);

x[2,i]:=x[1,i]; y[2,i]:=F2(x[2,i]);

x[3,i]:=x[1,i]; y[3,i]:=F3(x[3,i]) end;

for k:=1 to 3 do { перебор графиков } for i:=1 to n do begin { расчет массивов точек для графиков в полярной системе координат } fi:=x[k,i]; ro:=y[k,i];

{ перевод в декартовую для построения } Рисунок x[k,i]:=ro*cos(fi);

y[k,i]:=ro*sin(fi) end;

Gd:=0; Initgraph(Gd,Gm,'');

{ вызов подпрограммы построения графиков с автомасштабированием } G_MN(x,y, 3,n, 0,0,GetMaxX,GetmaxY);

ReadKey; CloseGraph end.

3 Практическое задание 3.1 Построить графики функции, заданной в параметрической форме, отдельно в четырех областях экрана для различных значений коэффициента "A".

При этом указать вид функции и диапазон изменения параметра. Варианты функций приведены в таблице 1.

Таблица X(t) Y(t) t А 1 A t2 t(3-t2) -3..3 1 2 3 2 2t-t2 A t-t3 -2..2 -1 0 1 3 A t4 t2-A t5 - 1 2 3 1..1,4 A t2 t3+t4 - 1 2 3 2..1,5 Sin(At) Sin(3t) -2..2 -1 2 4 6 Sin(t-A) Sin(t) 0..4 -1 1 2 7 A cos3(t) Sin3(t) -2..2 -1 1 2 8 (1+A)Cos(t) (1-A)Sin(t) 0..4 -2 -1 1 9 Cos(t)+t Sin(t) Sin(t)-At Cos(t) 0..4 -1 0 1 3.2 Построить в одной области экрана три графика одной из функций (таблица 2 ), заданной в полярных координатах = () для различных значений коэффициентов A и В ( – полярный радиус, – угол в радианах ).

Pages:     || 2 | 3 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.