Министерство общего и профессионального образования Российской Федерации Уфимский государственный авиационный технически...
14 downloads
185 Views
305KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство общего и профессионального образования Российской Федерации Уфимский государственный авиационный технический университет Кафедра технической кибернетики
ГРАФИКИ И ТРАЕКТОРИИ МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по учебной практике для подготовки инженеров по специальности 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). Форма задания отображаемых функций определяется в основном спецификой моделируемых явлений. При построении графика на экране монитора приходится переходить к декартовым координатам и к тому же учитывать дискретность растровой сетки экрана. Для эффективной работы необходимо создать универсальные процедуры построения наборов графиков функций в нужных областях экрана с соблюдением требующихся для визуализации пропорций. Отдельной задачей моделирования является определение общей формы и конкретного вида функциональных зависимостей, когда известны лишь дискретные значения функции, полученные иногда с существенной погрешностью. При этом применяют аппроксимацию ( приближенную замену ) реальной зависимости какой-либо классической функцией. Аппроксимирующую функцию можно использовать не только для приближенного вычисления значений, но и для проведения аналитических выкладок при теоретических исследованиях модели.
5 Лабораторная работа № 1 ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ, ЗАДАННЫХ В ЯВНОМ ВИДЕ 1 Цель работы Практическое освоение методологии построения графика функции Y=F(X) в декартовой прямоугольной системе координат с использованием программных средств персонального компьютера. 2 Алгоритм построения графика функции Y=F(X) При построении графиков функций на экране монитора необходимо преобразовывать расчетные координаты в графические с учетом дискретности растровой сетки монитора, а также предусмотреть возможность масштабирования графика по осям координат. Для этого желательно создать процедуры, обеспечивающие универсальность при выводе графических изображений. Ниже приводится алгоритм построения графика функции Y=F(X) в заданной области экрана с возможностью автоматического масштабирования. Пусть задана непрерывная функция F(X) в диапазоне изменения аргумента X=[A..B]. Требуется построить по N точкам график функции Y=F(X) в прямоугольной области экрана left, up, right, down.
left up
right Y X
A
0
B
down
а) Определяем массивы значений аргумента и функции: X[i], Y[i]=F(X[i]), где i=1..N. При равномерном разбиении интервала [A..B] массивы можно задавать операторами Dx:= (B-A)/(N-1); for i:=1 to N do begin
{ шаг разбиения по X } 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;
6 В случае явного задания функции для аргумента 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
moveto( XG[1], YG[1]); 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 if Y_min * Y_max<=0
then line( XG0, up, XG0, down); then line(left, YG0, right, YG0);
3 Методика построения набора графиков
7 Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты 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 YmaxX[k,i] then Xmin:=X[k,i]; if Xmax<X[k,i] then Xmax:=X[k,i] end; { коэффициенты масштабирования по горизонтали и вертикали } kX:=(right-left)/(Xmax-Xmin); kY:=( down- up )/(Ymax-Ymin); { пересчет коэффициентов масштабирования правой или нижней границы области вывода для получения неискаженной формы кривых } if kX
8 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; 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 Практическое задание begin
4.1 Построить графики функций, заданных по одному из вариантов в таблице 1: а) Y1 ( x) и Y2 ( x) в разных областях экрана;
9 б) Y1 ( x) и Y2 ( x) в одной области экрана. 4.2 Выполнить п. 4.1, предварительно доработав подпрограмму вывода набора графиков. Необходимо ввести в параметры подпрограммы названия видов отображаемых функций, а также показывать диапазоны изменения значений аргумента и функции на осях координат. Таблица 1 Функция Y1 ( x)
Диапазон x
1 Sin(x) 2 Cos(x 2 -4x-1) 3 --/-4 (x 2 -1)/(x 4 +1) 5 x(x-3)(x+1) 6 e x +e -x 7 x 2 Sin(1/x) --/-8 9 x Sin 2 (1/x) --/-10 11 Sqrt(x 2 +2)Sin(x) --/-12
-5 ...5 -1 ...10 -10 ...10 -1.5 ...1.5 -3 ...3 -3 ...3 0.1 ...3 0.01 ...0.1 0.1 ...5 0.01 ...0.1 -10 ...10 -1 ...1
Функция Y2 ( x) Sin(x 2 ) Sin(x 2 -4x-1) --/--
5
-x +2x 3 -1 x(x-3)(x-1) e x +e -2x x 3 Sin(1/x 2 ) --/--
(x+1)Sin 2 (1/x) --/--
(x+1)Sin(x) --/--
4.3 Построить в одной области экрана графики функций Y(x) и YN(x) по одному из вариантов таблицы 2. График функции YN(x) строится для трех и четырех членов разложения функции Y(х) в ряд Тейлора. Например, для первого пункта таблицы нужно построить графики Y(x)=e x , Y3(x)=1+x+x 2 /2, Y4(x)=1+x+x 2 /2+x 3 /6. Таблица 2 Разложение в ряд Тейлора YN( x)
Y( x) 1 2 3 4
ex Sin(x) Cos(x) m (1+x)
1 x 1 1
m=0.5, 1, 2
5 6 7 8
Ln(1+x) sh(x) ch(x) Arctan(x)
x x 1 x
+x +x 2 /2! +x 3 /3! + .. -x 3 /3! + x 5 /5! -x 7 /7! + -x 2 /2! + x 4 /4! -x 6 /6! + +mx +m(m-1)x 2 /2! + m(m-1)(m-2)x 3 /3!+.. -x 2 /2 +x 3 /3 -x 4 /4 + .. +x 3 /3! + x 5 /5! +x 7 /7! + +x 2 /2! + x 4 /4! +x 6 /6! + -x 3 /3 +x 5 /5 -x 7 /7 + ..
Интервал x
.. ..
-2..2 -3..3 -3..3 -0,9..0,9
.. ..
-0,95..3 -2..2 -3..3 -1..1
10 Лабораторная работа № 2 ПОСТРОЕНИЕ ГРАФИКОВ ФУНКЦИЙ, ЗАДАННЫХ В НЕЯВНОМ ВИДЕ 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 X[i]:=FX(t[i]); t[i]:=A +Dt *(i-1); 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; end; function F2(x: real): real; begin F2:=sin(2 *x) 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;
11 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;
Рисунок 1
Gd:=0; Initgraph(Gd,Gm,''); { вызов подпрограммы построения графиков с автомасштабированием } G_MN(x,y, 3,n, 0,0,GetMaxX,GetmaxY); ReadKey; CloseGraph end. 3 Практическое задание 3.1 Построить графики функции, заданной в параметрической форме, отдельно в четырех областях экрана для различных значений коэффициента "A". При этом указать вид функции и диапазон изменения параметра. Варианты функций приведены в таблице 1. Таблица 1 X(t)
Y(t)
1 2 3
A t2 2t-t 2 A t4
t(3-t 2 ) A t-t 3 t 2 -A t 5
4
A t2
t 3 +t 4
5 6 7 8 9
Sin(At) Sin(t-A) A cos 3 (t) (1+A)Cos(t) Cos(t)+t Sin(t)
Sin(3t) Sin(t) Sin 3 (t) (1-A)Sin(t) Sin(t)-At Cos(t)
t
А
-3..3 -2..2 1..1,5 2..1,5 -2..2 0..4 -2..2 0..4 0..4
1 2 3 5 -1 0 1 3 1 2 3 4 1 2 3 4 -1 -1 -1 -2 -1
2 1 1 -1 0
4 2 2 1 1
5 3 3 4 2
12 3.2 Построить в одной области экрана три графика одной из функций (таблица 2 ), заданной в полярных координатах ρ= ρ(ϕ) для различных значений коэффициентов A и В ( ρ – полярный радиус, ϕ – угол в радианах ). Таблица 2 Кривая 1 Спираль Архимеда 2 Спираль Архимеда 3 Гиперболическая спираль 4 Логарифмическая спираль 5 Спираль Галилея 6 Роза
7 Улитка Паскаля 8 Каппа 9 Конхоида Никомеда 10 Кохлеоида 11 Декартов лист 12 Строфоида 13 Циссоида Диокла
Диапазон угла ϕ 0..8 Aϕ -10..10 0..8 A ϕ +B -8..8 0,1..10 A/ϕ +B 1..30 Bϕ -3..3 Ae -7..7 -8..8 A ϕ 2 -B -2..2 0..8 A Sin(B ϕ) 0..40 A Cos(B ϕ) A +Sin(B ϕ) 0..10 A +Cos(B ϕ) 0..100 0..8 A Cos(ϕ) +B -4..4 0,2..1,5 A Ctg(ϕ) +B 1..1,56 0,1..1,5 A/Sin(ϕ) +B 1..1,56 A/Cos(ϕ) +B 0,2..1 A Sin(ϕ)/ϕ + B 0,5..8 A Cos(ϕ) * Sin(ϕ) Cos 3 (ϕ)+Sin 3 (ϕ) 0,7..2,3 0,1..1,5 A Cos(2ϕ)/Cos(ϕ) Функция ρ(ϕ)
A
B -1 0 0 1 -2 0 0 2 -1 0 0 1 0 1 -1 1
A Sin (ϕ)/Cos(ϕ)
-1 1 1 3 -1 0 0 1 -1 1 1 2 -1 1 -1 1 -1 1 1 2 -1 1 -1 1 0 1 -1 1 -1 0 0 1 1 2 4 -1 0 -1 1 1 2 1 2 4 1 3 5 -1 1 3 -3 -2 1 -1 1 1 2
2
0,1..1,5 1..1,56
Лабораторная работа № 3
целые и дроб-ные числа
-1 0 0 1 -1 0 0 1 -1 0 0 1 -1 0 0 1 -
13 ПОСТРОЕНИЕ ТРАЕКТОРИЙ ДВИЖЕНИЯ 1 Цель работы Практическое освоение методологии построения траекторий движения материальной точки под действием произвольной системы сил с использованием метода конечных разностей. 2 Метод конечных разностей при расчете траекторий движения При расчете физических процессов составляется математическая модель – система уравнений, описывающая зависимости между физическими величинами при некоторых упрощающих допущениях. Физические процессы описываются обычно системой дифференциальных уравнений, для решения которой применяют различные численные методы (модели). Широко используется метод конечных разностей, в котором бесконечно малые приращения переменных заменяют малыми ( конечными ) приращениями. Рассмотрим задачу определения траектории точки, движущейся в некоторой плоскости под действием различных сил. Например, необходимо вычислить траекторию движения снаряда с учетом сопротивления воздуха или ракеты с учетом изменения ее массы, движущихся в поле тяготения Земли. Координаты точки X(t),Y(t) в некоторый момент времени t можно определить, зная ее координаты X(t-dt),Y(t-dt) в предыдущий момент времени t-dt и изменение координат dX,dY X(t) = X(t-dt) +dX(t), Y(t) = Y(t-dt) +dY(t). Если временной интервал выбрать достаточно малым, то можно полагать, что скорость точки на этом интервале не изменяется и приращения координат определяются по формулам dX(t) = Vx(t) *dt, dY(t) = Vy(t) *dt. Здесь Vx(t),Vy(t) – проекции скорости на оси координат. Составляющие скорости Vx(t) и Vy(t) можно вычислить как: Vx(t) = Vx(t-dt) +Ax(t) *dt, Vy(t) = Vy(t-dt) +Ay(t) *dt, где Ax(t),Ay(t) – проекции ускорения на оси координат. Ускорение определяется силами, действующими на точку – оно равно равнодействующей силе, деленной на массу точки. Силы могут зависеть от координат и скорости точки, а также от времени. Например, ускорение ракеты в поле тяготения планеты обратно пропорционально квадрату расстояния до центра планеты. При включении двигателя ракеты ускорение зависит от времени (
14 программы работы двигателя ). При движении в атмосфере на ракету действуют силы сопротивления воздуха, зависящие от скорости движения. 3 Алгоритм расчета траектории движения точки 3.1 Определяем силы, действующие на точку, и находим проекции ускорения на оси координат. В общем случае ускорение точки зависит от многих факторов и в момент времени t задается как функция от скорости, координат и времени Ax:= Fx(Vx,Vy, X,Y, t), Ay:= Fy(Vx,Vy, X,Y, t), где Vx,Vy, Ax,Ay – проекции скорости и ускорения на оси координат. 3.2 Задаем начальное положение точки – координаты X[1],Y[1] и начальные скорость и ускорение в виде проекций на оси координат X[1]:=X0; Y[1]:=Y0; Vx[1]:= V *cos(fi); Vy[1]:= V *sin(fi); Ax[1]:= Fx( Vx[1],Vy[1], X[1],Y[1], t[1]); Ay[1]:= Fy( Vx[1],Vy[1], X[1],Y[1], t[1]); где V – начальная скорость; fi – угол наклона вектора скорости к оси Х. 3.3 Задаем временной шаг dt и разбиваем весь временной интервал на N участков. При равномерной разбивке приращение времени определяется по формуле dt:= (t[N]-t[1])/(N-1); где t[N]-t[1] – время движения точки. Выбор величины dt определяется необходимой точностью расчета, возможностями вычислительной техники и может корректироваться в процессе решения задачи. 3.4 Вычисляем массивы скоростей, ускорений и координат точки For i:=2 to N do begin Vx[i]:=Vx[i-1] +Ax[i-1] *dt; Vy[i]:=Vy[i-1] +Ay[i-1] *dt; X[i]:= X[i-1] +0.5 *(Vx[i-1]+Vx[i]) *dt; Y[i]:= Y[i-1] +0.5 *(Vy[i-1]+Vy[i]) *dt; Ax[i]:= Fx( Vx[i],Vy[i], X[i],Y[i], t[i]); Ay[i]:= Fy( Vx[i],Vy[i], X[i],Y[i], t[i]); Уточнение скорости точки в расчетном месте VX[i]:= VX[i-1] +0.5 *(Ax[i-1] +Ax[i]) *dt; VY[i]:= VY[i-1] +0.5 *(Ay[i-1] +Ay[i]) *dt end;
15 Для уменьшения погрешностей расчетной схемы скорость и ускорение на участке интерполируются средними значениями. 3.5 Строим траекторию движения по найденным наборам координат X[i],Y[i], определив предварительно расчетную область и область рисования траектории на экране. 4 Программа построения траекторий полета снаряда uses Crt,Graph; {$I g_mn.pas} { подключение файла с процедурой вывода графиков } { Определение функций ускорений (м/с2 ) для снаряда с учетом сопротивления воздуха, нелинейно зависящим от скорости V (м/с) снаряда } FUNCTION FX(V: real):real; begin FX:=-1.E-5 *V *V end; FUNCTION FY(V: real):real; begin FY:=-9.81-1.E-5 *V *V end; var
_X,_Y: array[1..200] of real; X,Y: arr; Gd,Gm, i,n,_n,ng: integer; {------------------------------------------------------} PROCEDURE TRACK( n: integer; V,alfa: real); { Вычисление массивов координат X,Y[1..n] траектории полета снаряда в поле силы тяжести с начальной скоростью V (м/с) и углом выстрела к горизонту alfa (град.) } var VX1,VY1, VX2,VY2, AX,AY, dt: real; begin dt:=V/n/10; { начальное приближение для временного интервала } _X[1]:=0; _Y[1]:=0; { первая точка траектории } alfa:=alfa *pi/180; { перевод угла в радианы } REPEAT { итерации для корректировки временного интервала dt } VX1:=V *cos(alfa); { составляющие начальной скорости снаряда } VY1:=V *sin(alfa); AX:=FX(VX1); { составляющие ускорения в первой точке траектории } AY:=FY(VY1); i:=1; { счетчик точек траектории } REPEAT inc(i); { переход к последующей точке траектории } { скорости } VX2:=VX1 +AX *dt; VY2:=VY1 +AY *dt; { координаты } _X[i]:=_X[i-1] +0.5 *( VX1 +VX2) *dt; _Y[i]:=_Y[i-1] +0.5 *( VY1 +VY2) *dt; { переприсвоение значений для следующей точки траектории } { ускорения } AX:=FX( VX2); AY:=FY( VY2); { скорости } VX1:=VX2; VY1:=VY2;
16 { Процесс прерывается при достижении "точки падения" или выборке всего массива для координат траектории } until (_Y[i]<=0) or (i=n); { Временной интервал dt корректируется так, чтобы полностью отследить траекторию движения материальной точки при рациональном использовании массивов для координат } if( i 0) then dt:=dt *1.1; { если не полностью пройдена траектория } UNTIL (i>=n *0.9)and(_Y[i]<=0); _n:=i { количество точек траектории для графика } end; {------------------------------------------------------} Begin n:=200; { размер массивов для координат траектории } { первый набор данных – выстрел под углом 20 град.} TRACK(n, 1000,20); For i:=1 to _n do begin X[1,i]:=_X[i]; Y[1,i]:=_Y[i] end; ng:=_n; { число точек для графика – далее будет уточняться }
Рисунок 1
{ второй набор данных – выстрел под углом 45 град.} TRACK(n, 1000,45); if ng>_n then ng:=_n; For i:=1 to _n do begin X[2,i]:=_X[i]; Y[2,i]:=_Y[i] end; { третий набор данных – выстрел под углом 70 град.} TRACK(n, 1000,70); if ng>_n then ng:=_n; For i:=1 to _n do begin X[3,i]:=_X[i]; Y[3,i]:=_Y[i] end; Gd:=0; Initgraph(Gd,Gm,'c:\tp7\bgi'); { вызов подпрограммы построения набора графиков ( рисунок 1 ) } G_MN(X,Y, 3,ng, 0,0,GetmaxX,GetmaxY); ReadKey; CloseGraph end.
17 5 Практическое задание 5.1 Рассчитать разностным моделированием и затем для контроля по аналитической зависимости траекторию полета снаряда без учета сопротивления воздуха. Построить полученные траектории. Начальная скорость снаряда V0 =1000 м/с, угол ϕ=45 0 . Аналитическая зависимость имеет вид Y = V0 t sin(ϕ) – gt 2 / 2. X = V0 t cos(ϕ), 5.2 Рассчитать разностным моделированием и затем для контроля по аналитической зависимости траектории полета снаряда с учетом сопротивления воздуха, пропорциональным скорости снаряда. Построить траектории полета снаряда. Начальная скорость V0 =3000 м/с, угол ϕ=30 0 , коэффициент сопротивления воздуха k=0. 01 с–1 . Аналитическая зависимость имеет вид –k t –k t X=V0 cos(ϕ) (1– e )/ k, Y=(V 0 sin(ϕ) +g/ k) (1– e )/ k –g t/ k. 5.3 Рассчитать разностным моделированием и построить набор траекторий полета снаряда с учетом сопротивления воздуха, пропорциональным кубу –6 скорости снаряда. Коэффициент сопротивления воздуха 10 , угол ϕ меняется в диапазоне 10 ... 90 0 с шагом 20 0 . 6 Траектории движения в центральном поле Точность получаемой методом конечных разностей траектории определяется величиной выбираемого временного шага, на котором скорости и ускорения принимаются неизменными. Для расчета больших траекторий при этом приходится оптимизировать использование массивов для хранения координат траектории ( можно и полностью отказаться от использования массивов, но с потерей универсальности используемых подпрограмм). Ниже приведен пример расчета траектории движения спутника в поле тяготения планеты. procedure GRAF_Z( n, left,up,right,down: integer; rz: real); { процедура построения траектории спутника по массиву X,Y[1..n] декартовых координат в области экрана left,right,up,down } var Xg,Yg, Xg0,Yg0, k,r: integer; kX,kY, Ymin,Ymax,Xmin,Xmax: real; begin { нахождение экстремумов } Ymin:=Y[1]; Ymax:=Y[1]; Xmin:=X[1]; Xmax:=X[1]; for k:=2 to n do begin if Ymin>Y[k] then Ymin:=Y[k]; if Xmin>X[k] then Xmin:=X[k]; if Ymax
18 kY:=( down- up )/(Ymax-Ymin); { пересчет коэффициентов масштабирования правой или нижней границы области вывода графиков для получения неискаженной формы кривой } if kX
19 PROCEDURE SPUTNIK( H,V,alfa: real); { Расчет массивов координат X,Y траектории спутника в поле тяготения планеты (Земли) с начальной скоростью V (м/с) и углом к горизонту alfa (град.). Начальное положение спутника – на высоте H от поверхности } var vx1,vy1,ax1,ay1,vx2,vy2,ax2,ay2, dt,r, way_max: real; begin rz:=6.37E6; { радиус Земли (м) } way_max:=100 *rz; { ограничение длины рассчитываемой траектории } { начальное приближение dt:=10 *way_max/V/N; для временного интервала } X[1]:=0; Y[1]:=H+rz; { первая точка траектории } { перевод угла в радианы } alfa:=alfa *pi/180; REPEAT { итерации для корректировки временного интервала dt } vx1:=V *cos( alfa); { составляющие начальной скорости } vy1:=V *sin( alfa); ax1:=FA(X[1],Y[1]); { составляющие ускорения в начальной точке } ay1:=FA(Y[1],X[1]); REPEAT
i:=1; r:=0; { счетчики точек и длины пройденного пути } inc(i); { переход к последующей точке траектории }
{ скорости }
vx2:=vx1 +ax1 *dt;
vy2:=vy1 +ay1 *dt;
{ координаты } X[i]:=X[i-1] +0.5 *( vx1+vx2) *dt; Y[i]:=Y[i-1] +0.5 *( vy1+vy2) *dt; { ускорения }
ax2:=FA( X[i],Y[i]);
{ уточнение } { скорости }
vx2:=vx1 +0.5 *( ax1+ax2) *dt; vy2:=vy1 +0.5 *( ay1+ay2) *dt;
{ уточнение } { координат }
X[i]:=X[i-1] +0.5 *( vx1+vx2) *dt; Y[i]:=Y[i-1] +0.5 *( vy1+vy2) *dt;
ay2:=FA( Y[i],X[i]);
{ переназначение (с уточнением ускорений) для текущих величин } ax1:=FA( X[i],Y[i]); vx1:=vx2; ay1:=FA( Y[i],X[i]); vy1:=vy2; r:=r+WAY( X[i]-X[i-1], Y[i]-Y[i-1]);{ пройденное расстояние } { Расчет траектории прерывается при прохождении заданного расстояния way_max, либо при выборе всех элементов массивов для координат (i=N), либо при падении на планету ( расстояние до центра менее радиуса ) } UNTIL (r>=way_max) or(i=N) or (WAY( X[i],Y[i])<=rz); { временной интервал dt при необходимости корректируется так, чтобы траектория была полностью отслежена при рациональном использовании массивов для координат }
20 { нужно использовать не менее 80% массивов } if( i<0.8 *N) then dt:=dt *i/N; { если без падения на поверхность планеты была не полностью пройдена траектория , то увеличиваем временной интервал } if( WAY( X[i],Y[i])>rz) and (r< way_max) then dt:=dt *1.2; UNTIL
(i>=0.8 *N)and ((r>=way_max)or( WAY( X[i],Y[i])<=rz));
M:=i { количество точек траектории для построения графика } begin
end;
{------------ ОСНОВНАЯ ПРОГРАММА ---------------}
{ Расчет траектории при начальном положении спутника на высоте 3000 км от 0 поверхности планеты при скорости 9 км/с под углом 30 } SPUTNIK( 3.E6,9000,30); Gd:=0; Initgraph(Gd,Gm,'c:\tp7\bgi'); GRAF_Z( M, 10,10,GetMaxX-10,GetmaxY-10, rz); ReadKey;
CloseGraph
end.
7 Практическое задание 7.1 Построить траекторию вращения спутника вокруг Земли, приняв начальную скорость 8 км/с и высоту 2 км при alfa=0 0 . Подобрать для этой высоты такую скорость, чтобы получить круговую орбиту. 7.2 Рассчитать траекторию спутника с учетом торможения в атмосфере Земли при H<20 км. Ускорение сил сопротивления нелинейно –6 2 2 зависит от скорости и высоты, например: aсопр =10 V /(H +1). 7.3 Рассчитать траекторию полета спутника в поле тяготения двойной звезды ( можно для упрощения взять два небесных тела типа Земли с расстоянием между ними 20 радиусов Земли ). Просчитать три варианта для различной начальной скорости V.
V H
20 Rz
21 Лабораторная работа № 4 ИЗУЧЕНИЕ МЕТОДОВ АППРОКСИМАЦИИ 1 Цель работы Изучение и сравнительный анализ классических приемов построения аппроксимирующих зависимостей для экспериментальной информации при построении математических моделей. 2 Интерполяция дискретных данных полиномом При математическом моделировании самых различных процессов или явлений одна из главных задач – определение и описание функциональных зависимостей для них. Причем обычно известны лишь дискретные значения функций, входящих в математическое описание модели, причем точность этих значений может быть невысокой. Табличное представление функций в большинстве случаев математического моделирования неприемлемо, поэтому применяют их приближение ( аппроксимацию ) какой-либо простой функцией, обычно полиномом. Интерполяция экспериментальных точек – это вид аппроксимации, при котором подбирается функция, точно проходящая через все эти точки. При интерполяции полиномом его степень должна быть равна количеству точек N для однозначного расчета коэффициентов k i полинома
P N ( x ) = k 0 + k 1 x + k 2 x 2 + ...+ k N x N из условия P N ( x i ) = F i , i = 1. . . N ,
(1)
(2) где F i - аппроксимируемые значения функции для выбранных значений аргумента ( значения функции в узлах ). Прямое нахождение коэффициентов полинома (1) неэффективно, так как требует решения системы N уравнений (2). Существует несколько методов представления интерполяционного полинома, не требующих громоздких вычислений 1,8. Наиболее удобна для программирования форма, предложенная Лагранжем
PN (x ) =
N
∑
i= 0
Fi
N
x − x
j = 0, j≠ i
xi − x
∏
j j
.
(3)
При этом в узлах x = x i выполняется условие (2). Ниже приведен пример программы интерполяции набора точек, сгенерированных со случайным отклонением от линейной зависимости, с использованием функции F расчета полинома Лагранжа. При контроле получаемых результатов используется процедура GR_I вывода графика, модифицированная с дополнительным отображением интерполируемых точек ( см. приложение А ). uses Crt, Graph;
22 Type mas =array[1..20] of double; {$I gr_i.pas} { подключение файла с процедурой вывода графика, модифицированной с дополнительным отображением интерполируемых точек -------------------------------------------------------} function F( x: real; m: integer; xp,yp: mas): real; var i,j: integer; s,p: real; { Интерполяционный полином Лагранжа для набора точек xp,yp , количество точек – m } begin s:=0; For i:=1 to m do begin p:=1; For j:=1 to m do if i<>j then p:=p * (x-xp[j])/(xp[i]-xp[j]); s:=s+yp[i] * p end; F:=s end; {------------------------------------------------------} var x,y: arr; { массивы координат для интерполирующей функции } xp,yp: mas; { массивы координат для интерполируемых точек } Gd,Gm, n,i,m: integer; a,b: real; n:=200; { число точек графика } m:=6; { число интерполируемых точек } a:=-0.5; b:=m-1-a; { края интервала аргумента Задаем случайные аппроксимируемые точки } for i:=1 to m do begin xp[i]:=i-1; yp[i]:=3 * xp[i]+random(5) end; { расчет массива точек для графика } for i:=1 to n do begin x[i]:=a+(i-1) * (b-a)/(n-1); y[i]:=F( x[i],m, xp,yp) end; Gd:=0; Initgraph(Gd,Gm,''); { вызов подпрограммы построения графика } GR_I( x,y, xp,yp, n,m, 30,400,80,300); ReadKey; CloseGraph end. begin
Интерполяцию целесообразно применять для аппроксимации небольшого количества экспериментальных точек ( не более 5–6 ) в случаях, когда достоверно известно, что эти точки получены с очень малой погрешностью. При невыполнении этих двух условий для значений функции между узлами получим недопустимо большие отклонения, выражающиеся чаще всего Рисунок 1 в осцилляциях интерполирующего полинома ( рисунок 1 ). В таких случаях используют интерполяцию сплайн-функциями
23 ( набором функций одного вида, каждая из которых охватывает свой участок узлов и плавно "стыкуется" с соседними функциями ) или аппроксимацию без точного прохождения через узлы. 3 Аппроксимация методом наименьших квадратов Для большого количества экспериментальных точек или точек, получаемых с существенной погрешностью, чаще всего применяют аппроксимацию с минимизацией суммы квадратов отклонений получаемой зависимости P( x i ) от значений в узлах F( x i )
S =
N
∑ (P ( x i =1
i
) − F ( x i )) 2 .
(4)
Аппроксимирующую функцию P( x ) обычно представляют в виде линейной комбинации базисных линейно независимых функций
P ( x ) = k 0 p 0 ( x ) + k 1 p1 ( x ) + . . .+ k M p M ( x ) , в частности, при pm ( x ) = x
m
(5)
получим полином степени M.
Условием минимума суммы (4) является равенство нулю частных производных S по коэффициентам k j , j=0...M. Подставив (5) в (4) и находя производные, получим систему M линейных уравнений N
∑(k i =1
0
p0 ( x i ) + k1 p1 ( x i )+...+ k M pM ( x i ) − F ( x i )) p j ( x i ) = 0 , j = 0 . . . M
(6)
Коэффициенты системы уравнений (6) относительно неизвестных k j , j=0...M определяются как суммы произведений базисных функций N
N
i =1
i =1
A [ j, k ] = ∑ p j ( x i ) pk ( x i ) , B [ j ] = ∑ p j ( x i ) Fi j = 0... M , k = 0... M . (7) Выбор вида и количества базисных функций зависит от свойств аппроксимируемой зависимости F(x), определяемой характером моделируемого процесса или явления. Задав тип и количество этих функций, определяют коэффициенты системы уравнений (7) и, решая эту систему уравнений, определяют коэффициенты k j при базисных функциях. Если погрешность (4) для полученной аппроксимирующей зависимости (5) получится неудовлетворительной, то либо увеличивают количество базисных функций, либо меняют вид этих функций. Обычно количество базисных функций выбирают небольшим ( одну – две ), стараясь отобразить каждой из них вклад определенного фактора, влияющего на моделируемый процесс. Ниже приведен пример аппроксимации линейной комбинацией двух функций ( p 1=x 0.5 , p 2=x 0.2 ) набора двадцати экспериментальных точек. Текст процедуры решения системы линейных уравнений приведен в приложении.
24 4 Алгоритм аппроксимации МНК uses Crt, Graph; {$I gauss.pas} { подключение файла с процедурой решения системы линейных уравнений методом Гаусса } {$I gr_i.pas} { подключение файла с процедурой вывода графика, модифицированной с отображением аппроксимируемых точек -------------------------------------------------------} { Набор M базисных функций для аппроксимирующей зависимости } function p1(x: real):real; begin p1:=exp(0.2 * ln(x)) end; function p2(x: real):real; begin p2:=exp(0.5 * ln(x)) end; { function p3 ... и так далее ------------------------------------------------------} var x,y: arr; { координаты для аппроксимирующей зависимости } xp,yp, { координаты для аппроксимируемых точек } B,ki: mas; A,p: mas2; Gd,Gm, ng,N,M, i,j,k: integer; Lx,Rx: real; ng:=200; { число точек графика } M:= 2; { число базисных функций } N:=20; { число аппроксимируемых точек } Lx:=0.1; Rx:=N+Lx; { края интервала аргумента Задаем аппроксимируемые точки (вводим погрешность для Y=X0.3 } for i:=1 to N do begin xp[i]:=i; yp[i]:=exp(0.3 * ln(xp[i]))+(1-random) end; begin
for for for for
{ Расчет коэффициентов системы уравнений } i:=1 to N do begin p[1,i]:=p1(xp[i]); p[2,i]:=p2(xp[i]) end; j:=1 to M do { коэффициенты матрицы } k:=1 to M do begin A[j,k]:=0; i:=1 to N do A[j,k]:=A[j,k] +p[j,i] * p[k,i]
end;
for j:=1 to M do begin B[j]:=0; { столбец свободных членов } for i:=1 to N do B[j]:=B[j] +p[j,i] * yp[i] end; GAUSS(A,B,ki,M); { Решение системы уравнений методом Гаусса } { Расчет массива точек для графика } for i:=1 to ng do begin x[i]:=Lx+(i-1) * (Rx-Lx)/(ng-1); { равномерно по оси абсцисс } { сумма базисных функций } y[i]:=ki[1] * p1(x[i]) + ki[2] * p2(x[i]) end; Gd:=0; Initgraph(Gd,Gm,''); { Вызов подпрограммы построения графика (без автомасштабирования) } GR_I( x,y, xp,yp, ng,N, 30,400,80,300); ReadKey; CloseGraph end.
25 На рисунке 2 показана аппроксимирующая зависимость для точек, полученных при имитации случайного отклонения от зависимости Y=X 0.3 в пределах 0,5. Вычислительный эксперимент показывает, что при увеличении количества точек аппроксимации аппроксимирующая и моделируемая зависимости начинают практически совпадать даже при достаточно сунок 2 большой вносимой погрешности.
Ри-
5 Практическое задание 5.1 Определить координаты четырех точек со случайным отклонением от экспоненциальной зависимости в интервале X=0,1 ... 4. Провести интерполяцию полиномом для четырех вариантов с различной вносимой для экспоненты погрешностью ( 1%, 2%, 5%, 10% ). 5.2 Выполнить аппроксимацию для 40 точек, полученных аналогично п.5.1 для вариантов с той же погрешностью. Использовать в качестве аппроксимирующей зависимости линейную комбинацию X2 и X4. 5.3 Составить процедуру, проводящую сравнительную аппроксимацию МНК и интерполяцию кубическим полиномом. Провести расчеты по условиям п.5.1. 5.4 Составить процедуру, реализующую линейный вариант МНК, при котором коэффициенты аппроксимирующей зависимости P(x)=a+bx определяются без решения системы уравнений как N
N
N
N
i =1
i =1
b = ∑( x i − x s )(Fi − Fs )/ ∑( x i − x s ) , a = Fs − bx s , x s =∑x i / N , Fs = ∑Fi / N . 2
i =1
i =1
Провести линейную аппроксимацию для четырех вариантов случайного отклонения точек от горизонтальной прямой. Варьировать количество точек ( N = 10, 20, 50, 100 ) при отклонении не более 10%.
26 Список литературы 1. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы. – М.: Наука, 1987. 2. Белецкий Я. Турбо Паскаль с графикой для персональных компьютеров. – М.: Машиностроение, 1991. 3. Бронштейн И.Н., Семендяев К.А.
Справочник по математике. – М.:
Наука, 1986. 4. Гилой В. Интерактивная машинная графика. – М.: Мир, 1981. 5. Де Бор К. Практическое руководство по сплайнам: Пер с англ. – М.: Радио и связь, 1985. 6. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. – М.: Диалог – МИФИ, 1995. 7. Завъялов Ю.С., Леус В.А., Скороспелов В.А. Сплайны в инженерной геометрии. – М.: Машиностроение, 1985. 8. Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. – Томск, 1991. 9. Райхмист А.Б. Графики функций: Справочное пособие для вузов. – М.: Высшая школа, 1991. 10. Сидоров М.Е., Трушин О.В. Школа работы на IBM PC. Часть 2: Программирование в среде Turbo Pascal. – Уфа, 1996. 11. Фаронов В.В. Турбо-Паскаль 7.0. Начальный курс. Учебное пособие. – М.: Нолидж, 1997. 12. Фаронов В.В. Турбо–Паскаль (в 3–х книгах). – М.: Учебно-инженерный центр МВТУ–ФЕСТО ДИДАКТИК, 1992,1993. 13. Цимринг Ш.Е. Специальные функции и определенные интегралы. Алгоритмы. Программы для микрокалькуляторов: Справочник. – М.: Радио и связь, 1988. 14. Шикин Е.В., Борисов А.В., Зайцев А.А.
Начала компьютерной гра-
фики. – М.: Диалог– МИФИ, 1993. 15. Яворский Б.М., Детлаф А.А. Справочник по физике. – М.: Наука, 1977.
27 ПРИЛОЖЕНИЕ А А.1 Процедура построения графика аппроксимирующей функции type arr=array[1..640] of real; { массивы координат графика } PROCEDURE GR_I( X,Y: arr; Xp,Yp: mas; n,np, left,right,up,down: integer); { Построение графика функции по массиву X,Y декартовых координат. Функция определена как аппроксимирующая массив точек Xp,Yp } var Xg,Yg: array[1..640] of integer; X_,Y_: array[1.. 20] of integer; Xg0,Yg0,k: integer; kX,kY, Ymin,Ymax,Xmin,Xmax: real; begin { Экстремумы: вначале присваиваем им значения из рассматриваемых } Ymin:=Y[1]; Ymax:=Y[1]; Xmin:=X[1]; Xmax:=X[1]; { перебор координат графика при нахождении экстремумов } for k:=2 to n do begin if if if if
Ymin>Y[k] YmaxX[k] Xmax<X[k]
then then then then
Ymin:=Y[k]; Ymax:=Y[k]; Xmin:=X[k]; Xmax:=X[k] end;
{ перебор аппроксимируемых точек при нахождении экстремумов } for k:=1 to np do begin if if if if
Ymin>Yp[k] YmaxXp[k] Xmax<Xp[k]
then then then then
Ymin:=Yp[k]; Ymax:=Yp[k]; Xmin:=Xp[k]; Xmax:=Xp[k] end;
{ коэффициенты масштабирования по горизонтали и вертикали } kX:=(right-left)/(Xmax-Xmin); kY:=( down- up )/(Ymax-Ymin); for k:=1 to n do begin { точки графика в системе координат экрана } Xg[k]:=left +round( kX * (X[k] -Xmin)); Yg[k]:=down -round( kY * (Y[k] -Ymin)) end; setcolor(11); Rectangle( left,up,right,down); { выделение области графика } setcolor(10); { выводим ось ординат, если она расположена в области графика } if Xmin * Xmax<=0 then begin Xg0:=left-round( Xmin * kX); line( Xg0,up, Xg0,down);
28 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-10,Yg0+6,'X') end; setcolor(14); setLineStyle(0,0,3); moveto( Xg[1],Yg[1]); { строим график } for k:=2 to n do lineto( Xg[k],Yg[k]); { интерполируемые точки } for k:=1 to np do begin X_[k]:=left +round(kX * (Xp[k] -Xmin)); Y_[k]:=down -round(kY * (Yp[k] -Ymin)) end; setcolor(12); for k:=1 to np do FillEllipse(X_[k],Y_[k],4,4) end; А.2 Процедура решения системы уравнений методом Гаусса Type mas =array[1..20] of double; mas2=array[1..20,1..21] of double; {------------------------------------------------------} PROCEDURE GAUSS(A: mas2; B: mas; var X: mas; N: integer); Var i,j, k,im: integer; S,R: double; begin { Формирование расширенной матрицы – запись столбца свободных членов в общую матрицу А } For i:=1 to N do A[i,N+1]:=B[i]; {Прямой ход метода Гаусса (последовательное исключение неизвестных)} For k:=1 to N do begin { перебор уравнений } S:=A[k,k]; { диагональный элемент } im:=k; { индекс максимального диагонального элемента } For i:=k+1 to N do { перебор элементов столбца вниз от диагонали } If abs( A[i,k])>abs( A[k,k]) then begin S:=A[i,k]; im:=i{ значение и индекс максимального по модулю элемента в столбце} end; If S=0.0 then begin Writeln('Нет решения СУ – det=0 !'); Exit end; { перестановка уравнений – на диагональ попадет
29 наибольший в текущем столбце элемент } If im<>k then for j:=k to N+1 do begin R:=A[k,j]; A[k,j]:=A[im,j]; A[im,j]:=R
end;
{ делим строку на диагональный элемент } For j:=k+1 to N+1 do A[k,j]:=A[k,j]/A[k,k]; For i:=k+1 to N do{ перебор элементов столбца вниз от диагонали } For j:=k+1 to N+1 do { перебор элементов строки вправо от диагонали } A[i,j]:=A[i,j] - A[i,k] * A[k,j] End{k}; X[N]:=A[N,N+1]; { для последнего уравнения } { Обратный ход метода – последовательное определение неизвестных } For i:=N-1 downto 1 do begin { начальное значение – свободный член строки матрицы } S:=A[i,N+1]; For j:=i+1 to N do S:=S -A[i,j] * X[j]; X[i]:=S end End;
30
Составитель: ТРУШИН Олег Владимирович
ГРАФИКИ И ТРАЕКТОРИИ МЕТОДИЧЕСКИЕ УКАЗАНИЯ к лабораторным работам по учебной практике для подготовки инженеров по специальности 210100 ”Управление и информатика в технических системах”
Редактор
Г.Р. Орлова
ЛБ № 0192 от 16.10.96
Подписано к печати
Формат 60
Х
84 1/16.
Бумага оберточная. Печать плоская. Усл. печ. л. 1.8 Усл. кр. – отт. 1,7 Заказ №
Уч.-изд. л. 1,7. .
Тираж 150 экз. Бесплатно
Уфимский государственный авиационный технический университет Уфимская типография № 2 Министерства печати и массовой информации Республики Башкортостан 450000, Уфа – центр, ул. К. Маркса, 12