Использование современной компьютерной техники и программного обеспечения для решения прикладных задач в области геодезических измерений
Решение типовых задач с помощью языка программирования Turbo Pascal и табличного процессора Microsoft Excel 2007. Обратная геодезическая задача, прямая угловая задача, обратная геодезическая засечка, решение системы линейных уравнений методом Гаусса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.01.2011 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
64
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
Санкт-Петербургский государственный горный институт им. Г.В. Плеханова
(технический университет)
Кафедра информатики и компьютерных технологий
КУРСОВАЯ РАБОТА
по дисциплине
Информатика
Тема: Использование современной компьютерной техники и программного обеспечения для решения прикладных задач в области геодезических измерений
Санкт-Петербург 2010 год
Аннотация
Базовые знания в области информатики и практические навыки работы на персональном компьютере позволяют эффективно применять современное программное обеспечение для решения прикладных задач в области геодезии. В данной пояснительной записке это продемонстрировано расчетами в табличном редакторе MS Excel 2007, математического пакета MathCad 14.0 и с помощью языка программирования Turbo Pascal. Представленные в данной работе программы позволяют быстро получать результаты при варьировании исходных данных в определенных диапазонах.
Объем пояснительной записки - 58 стр.
Число таблиц-3, иллюстраций-33, библ. список из 5 наименований.
Оглавление
Введение
1. Обратная геодезическая задача
1.1 Теоретические сведения
1.2 Постановка задачи
1.3 Исходные данные
1.4 Блок-схема алгоритма
1.5 Текст программы
1.6 Результаты работы программы
1.7 Проверка в MS Excel
1.8 Проверка в MathCad
1.9 Анализ результатов
2. Прямая угловая засечка
2.1 Теоретические сведения
2.2 Постановка задачи
2.3 Исходные данные
2.4 Блок-схема алгоритма
2.5 Текст программы
2.6 Результаты работы программы
2.7 Проверка в MS Excel
2.8 Проверка в MathCad
2.9 Анализ результатов
3. Обратная геодезическая засечка
3.1 Теоретические сведения
3.2 Постановка задачи
3.3 Исходные данные
3.4 Блок-схема алгоритма
3.5 Текст программы
3.6 Результаты работы программы
3.7 Проверка в MS Excel
3.8 Проверка в MathCad
3.9 Анализ результатов
5. Решение СЛАУ методом Гаусса 44
4.1 Теоретические сведения
4.2 Постановка задачи
4.3 Исходные данные
4.4 Блок-схема алгоритма
4.5 Текст программы
4.6 Результаты работы программы
4.7 Проверка в MS Excel
4.8 Проверка в MathCad
4.9 Анализ результатов
Заключение
Библиографический список
Введение
Автоматизация геодезических вычислений необходима в различных областях, связанных с геодезией. Предпосылки этому создает тотальная продолжающаяся информатизация практически всех сфер функционирования общества, а также повышающаяся доступность компьютерных технологий и снижение стоимости их производства. В геодезии автоматизация необходима в первую очередь, потому что позволяет решать практические задачи самого различного характера с большей эффектитвностью и производительностью, а также увеличивает скорость выполнения и себестоимость работ по камеральной обработке результатов съемок.
При высокоточных геодезических работах объем вычислений становится весьма большим. Это связано со спецификой этих работ- высокая точность требует специальных методов как проведения собственно измерений, так и обработки их результатов: применения специальных методов уравнивания, введения большого числа поправок, постоянного прослеживания всех получающихся результатов (в том числе и с целью контроля их правильности), и т.д. Это, естественно, рождает за собой определенные проблемы, основные из которых - это недопущение ошибок, и длительное время самой обработки из-за ее большого объема. Хотя все процессы обработки построены так, чтобы максимально снизить риск появления ошибок (тут сказывается учет большого опыта геодезистов - процессы построены таким образом, чтобы сразу заметить неверный результат и вовремя найти и исправить ошибку), но так как все-таки исполнителем работ является человек, то, естественно, нельзя полностью гарантировать совершенное отсутствие ошибок. Конечно, потом они будут обнаружены и исправлены, но сам процесс поиска может занять значительное время. Когда обработку выполняет человек с большим опытом проведения подобных работ, то риск подобных ошибок снижается, уменьшается и время, требуемое на проведение обработки. Но когда подобную работу выполняет человек, не имеющий подобного опыта, то возможность ошибиться, наоборот, многократно возрастает. Это при том, что камеральная обработка в принципе является достаточно легко формализуемым процессом. В связи с этим встает вопрос об автоматизации геодезических вычислений. В самом деле, не логичнее ли поручить исполнение “механической” работы компьютеру, что даст, во-первых, большую выгоду во времени а, во-вторых, это дает некую гарантированность от ошибок в вычислених - попросту говоря, машина никогда не ошибется при выполнении математической операции. (Тут, правда, встает проблема правильности и безошибочности используемого алгоритма, но это тема для отдельной работы.). На самом деле, практика показала преимущество подобного подхода, в настоящее время ручная обработка результатов геодезических измерений встречается крайне редко.
Подводя краткий итог всему вышесказанному, можно сделать вывод, что в целом автоматизация геодезических вычислений необходима в различных областях, связанных с геодезией. Предпосылки этому создает тотальная продолжающаяся информатизация практически всех сфер функционирования общества, а также повышающаяся доступность компьютерных технологий и снижение стоимости их производства. В геодезии автоматизация необходима в первую очередь, потому что позволяет решать практические задачи самого различного характера с большей эффектитвностью и производительностью, а также увеличивает скорость выполнения и себестоимость работ по камеральной обработке результатов съемок.
Целью выполнения курсовой работы является закрепление устойчивых навыков работы в средах программирования при решении типовых задач в области геодезии. В частности овладеть основными принципами построения алгоритмов, методами вычислений и их реализации на компьютере, приобрести навыки постановки задач, построения математических моделей при обработке экспериментальных данных и их анализ.
В данной работе представлено решение типовых задач с помощью языка программирования Turbo Pascal и табличного процессора Microsoft Excel 2007.
При создании пояснительной записки использован текстовый процессор Microsoft Word 2007.
1. Обратная геодезическая задача
1.1 Теоретические сведения
Обратная геодезическая задача заключается в вычислении дирекционного угла ??и расстояния R = | AB | по заданным на плоскости декартовым координатам x, y двух точек А и В. Дирекционный угол, в конечном итоге, должен быть представлен в градусной мере, как это принято в геодезии. Расстояние между точками определяется через найденный дирекционный угол.
Пусть даны две точки А и В (рис. 1.1), координаты которых соответственно
Согласно схеме, показанной на рис. 1.1, приращения координат определяются:
(1.1)
Затем находят величину румба.
(1.2)
Далее по знакам приращения координат находят название четверти, что, в свою очередь, позволяет определить значение дирекционного угла.
Табл. 1.1.Определение значения дирекционного угла
Знаки приращения координат |
Название четверти |
Формула дирекционного угла |
||
+ |
+ |
I |
? = r |
|
- |
+ |
II |
????????r |
|
- |
- |
III |
?????????r |
|
+ |
- |
IV |
?????????r |
Горизонтальное расстояние между точками может быть определено по формуле:
(1.3)
или по формуле:
(1.4)
Перевод вычисленного дирекционного угла в градусную меру может быть выполнен различными способами. Один из возможных способов следующий:
· Переводим величину ????в градусную меру
;
· Выделяем целую часть ;
· Вычисляем остаток и переводим его в минуты
;
· Вычисляем целое число минут
;
· Определяем остаток минут, переводим в секунды и округляем до целого
.
Значение дирекционного угла в градусах, минутах и секундах дают, соответственно, значения переменных ?????m, ?s.
1.2 Постановка задачи
Даны координаты 2-х точек х и у. Определить дирекционный угол прямой ху.
1.3 Исходные данные
Вариант 5
A)
B)
1.4 Блок-схема алгоритма
Процедура «PerevodRadDeg» предназначена для перевода используемых значений углов из радиан в градусы.
1.5. Текст программы
А) Файл исходных данных
Задача А
Точка 1.
Координата X:
4608.35
Координата Y:
4159.05
Точка 2.
Координата X:
5267.01
Координата Y:
2501.18
Задача В
Точка 1.
Координата X:
4299.05
Координата Y:
10859.16
ТОчка 2.
Координата X:
2727.40
Координата Y:
10590.88
Program Zadacha_1;
Uses CRT; {подключение библиотеки CRT}
Var i,j,k:integer; {объявляем тип переменных}
X1,X2,Y1,Y2,dX,dY,r,DirRad,S,UgolDeg,UgolMinPromedg,DirDeg,DirMin,DirSec:real;
input,output:text;
Procedure PerevodRadDeg(Var DirRad:real); {подпрограмма для перевода дирекционного угла из радиан в градусы}
Var DirDeg,DirMin,DirSec,UgolMinPromedg,UgolDeg:real; {объявляем тип переменных, используемых в процедуре}
Begin
UgolDeg:=(180*DirRad)/Pi; {переводим угол в градусы}
DirDeg:=int(UgolDeg); {выделяем целое количество градусов из полученного угла}
UgolMinPromedg:=60*(UgolDeg-DirDeg); {промежуточное вычисление}
DirMin:=int(UgolMinPromedg); {выделяем целое количество минут}
DirSec:=int(60*(UgolMinPromedg-DirMin));{выделяем целое количество секунд}
Writeln(DirDeg:3:0,' gradusov',DirMin:3:0,' minut',DirSec:3:0,' secund');Writeln; {выводим полученный результат на экран}
Writeln(output,DirDeg:3:0,' gradusov',DirMin:3:0,' minut',DirSec:3:0,' secund');{выводим полученный результат в файл}
Writeln(output);
end; {завершение подпрограммы}
Begin {начало основной программы}
Clrscr; {очистка экрана}
Assign(input,'dano.txt'); {связывание файла исходных данных с именем}
Assign(output,'rezultat.txt'); {связывание файла выходных данных с именем}
Reset(input); {объвление файла для чтения исходных значений}
Rewrite(output); {объявление файла для записи полученных результатов}
Readln(input);Readln(input); {Пропуск строк в файле исх.значений}
Readln(input,X1); {чтение координаты X1 из файла}
Readln(input); {Пропуск строк в файле исх.значений}
readln(input,Y1); {чтение координаты Y1 из файла}
Readln(input);Readln(input);Readln(input); {Пропуск строк в файле исх.значений}
Readln(input,X2); {чтение координаты X2 из файла}
Readln(input); {Пропуск строк в файле исх.значений}
Readln(input,Y2); {чтение координаты Y2 из файла}
Begin
dX:=X2-X1;dY:=Y2-Y1; {вычисление приращений}
Writeln('Priraschenie po abscisse: ',dX:6:3); {вывод полученных приращение на экран}
Writeln; {пропуск пустой строки}
Writeln('Priraschenie po ordinate: ',dY:6:3); {вывод полученных приращений на экран}
writeln; {пропуск пустой строки}
Writeln(output,'Priraschenie po abscisse: ',dX:6:3);{вывод полученных приращений в файл}
Writeln(output); {пропуск пустой строки в файле}
Writeln(output,'Priraschenie po ordinate: ',dY:6:3); {вывод полученных приращений на экран}
Writeln(output); {пропуск пустой строки в файле}
end;
Begin
r:=arctan(abs(dY/dX)); {вычисление румба}
Writeln('Velichina rumba: ',r:6:3); {вывод румба на экран}
Writeln; {пропуск пустой строки}
Writeln(output,'Velichina rumba: ',r:6:3); {вывод румба в файл}
Writeln(output); {пропуск пустой строки в файле}
end;
Begin
If (dX>0) and (dY>0) then Begin {вычисление дирекционного угла в зависимости от знаков приращений}
DirRad:=r;
Writeln('Rumb I chetverti');
Writeln(output,'Rumb I chetverti');
end;
If (dX<0) and (dY>0) then Begin
DirRad:=Pi-r;
Writeln('Rumb II chetverti');Writeln;
Writeln(output,'Rumb II chetverti');Writeln(output);
end;
If (dX<0) and (dY<0) then Begin
DirRad:=Pi+r;
Writeln('Rumb III chetverti');Writeln;
Writeln(output,'Rumb III chetverti');Writeln(output);
end;
If (dX>0) and (dY<0) then Begin
DirRad:=2*Pi-r;
Writeln('Rumb IV chetverti');Writeln;
Writeln(output,'Rumb IV chetveri');Writeln(output);
end;
end;
PerevodRadDeg(DirRad); {перевод дирекционного угла из радиан в градусы с использованием подпрограммы}
Begin
S:=sqrt((sqr(dX)+sqr(dY))); {вычисление горизонтального проложения}
Writeln('Gorizontalnoe prolodgenie: ',S:6:3); {вывод горизонтального проложения на экран}
Writeln; {пропуск пустой строки}
Writeln(output,'Gorizontalnoe prokodgenie: ',S:6:3); {вывод горизонтального проложения в файл}
Writeln(output); {пропуск пустой строки в файле}
end;
writeln;writeln;writeln;writeln; {добавление личной подписи}
writeln(output);writeln(output);writeln(output);writeln(output);
Writeln('Made by Moiseev Andrei, GG-09-2');
Writeln('All rights are reserved');
Writeln(output,'Made by Moiseev Andrei, GG-09-2');
Writeln(output,'All rights are reserved');
Close(input); {закрытие файла исходных значений}
Close(output); {закрытие файла полученных результатов}
Readkey; {добавление временной задержки}
end.{конец программы}
1.6 Результаты работы программы
А)
Priraschenie po abscisse: 658.660
Priraschenie po ordinate: -1657.870
Velichina rumba: 1.193
Rumb IV chetveri
291 gradusov 40 minut 3 secund
Gorizontalnoe prolodgenie: 1783.919
В)
Priraschenie po abscisse: -1571.650
Priraschenie po ordinate: -268.280
Velichina rumba: 0.169
Rumb III chetverti
189 gradusov 41 minut 13 secund
Gorizontalnoe prolodgenie: 1594.383
Рис.1.3 Результат работы программы
1.7. Проверка в MS Excel
Рис. 1.4 Excel-расчеты
Рис. 1.5 Проверка в MS Excel
Рис. 1.6 Проверка в MS Excel
Рис.1.7 Проведение промежуточных вычислений при проверке
1.8. Проверка в MathCad
Рис. 1.8 Расчеты в мат.пакете MathCad
1.9 Анализ результатов
Для решения поставленной задачи были использованы следующие приложения: математический пакет MathCad, табличный редактор MS Excel и язык программирования Turbo Pascal. Сравнивая полученные результаты, можно сделать вывод о правильности работы программы.
2. Прямая угловая засечка
2.1 Теоретические сведения
Прямая угловая (геодезическая) засечка - такое название носит способ определения координат точки местности Р , если на плоскости дана система точек геодезической сети с известными координатами и на этих точках измерены горизонтальные углы (рис.2.1.).
Р
Р
Рис. 2.1. Схемы прямой геодезической засечки.
Большое значение имеет величина угла при вершине треугольника - угла засечки ?, от которого во многом зависит точность определения координат. В инструкциях по проведению геодезической съемки указывается, что угол засечки не должен быть меньше 30о и больше 150о.
Для определения координат точки Р можно использовать формулы Юнга или формулы Гаусса. Чаще используются формулы Юнга, которые еще называют формулами котангенсов внутренних углов треугольника.
(2.1)
(2.2)
Широко используются и формулы Гаусса. В этом случае исходными данными являются не только координаты пунктов А1 и А2 и измеренные горизонтальные углы ??????, но и вычисленный дирекционный угол ??стороны А1 А2.
(2.3)
(2.4)
Если пунктов геодезической сети более двух (рис.2.1б), то исходные данные являются избыточными, т.к. для определения искомых координат точки Р достаточно знать координаты и углы двух точек одного треугольника. Но в инструкции по выполнению геодезических работ требуют, чтобы координаты точки Р определялись как минимум из двух треугольников.
Избыточность исходных данных позволяет повысить надежность определения окончательных значений искомых величин за счет применения правила арифметического среднего.
(2.5)
(2.6)
где XP k , YP k координаты, определенные из k-того треугольника.
2.2 Постановка задачи
Определить координаты точки P по трем точкам с известными координатами и 4 углам. (2 треугольникам)
2.3 Исходные данные
Табл. 2.2Исходные данные
2.5 Текст программы
Файл исходных данных
Пункт №1:
Координата X:
5951.77
Координата Y:
5440.33
Горизонтальный угол B1:
Градусы
94
Минуты
58
Секунды
38
-------------------------------
Пункт №2:
Координата X:
5648.54
Координата Y:
5101.47
Горизонтальный угол B1:
Градусы
56
Минуты
16
Секунды
35
Горизонтальный угол B2:
Градусы
40
Минуты
31
Секунды
5
-------------------------------
Пункт №3:
Координата X:
5177.15
Координата Y:
5431.80
Горизонтальный угол B2:
Градусы
68
Минуты
1
Секунды
58
-------------------------------
Program Zadacha_2;
Uses CRT;
Var
GB1P1,MB1P1,SB1P1,GB1P2,MB1P2,SB1P2,GB2P2,MB2P2,SB2P2,GB2P3,MB2P3,SB2P3:integer;
x1,y1,x2,y2,x3,y3:real;
Dx12,Dy12,Dx23,Dy23,R12,R23,Alfa12,Alfa23:real;
AlfaG12,AlfaGr12,AlfaG23,AlfaGr23,AlfaM12,AlfaMi12,AlfaM23,AlfaMi23,AlfaS23,AlfaS12:real;
RB1P1,RB1P2,RB2P2,RB2P3,xP12,yP12,xP23,yP23,SRx,SRy:real;
t1,t2:text;
Procedure Gradus(Var Alfa12:real); {подпрограмма для перевода дирекционного угла из радиан в градусы}
Var AlfaM12,AlfaMi12,AlfaS12,AlfaGr12:real; {объявляем тип переменных, используемых в процедуре}
Begin
AlfaG12:=(180*Alfa12)/Pi; {переводим угол в градусы}
AlfaGr12:=int(AlfaG12); {выделяем целое количество градусов из полученного угла}
AlfaM12:=60*(AlfaG12-AlfaGr12); {промежуточное вычисление}
AlfaMi12:=int(AlfaM12); {выделяем целое количество минут}
AlfaS12:=int(60*(AlfaM12-AlfaMi12));{выделяем целое количество секунд}
Writeln('Дирекционный угол равен'); {вывод на экран надписи}
Writeln(t2,'Дирекционный угол равен:'); {вывод в файл надписи}
Writeln(AlfaGr12:3:0,'градусов',AlfaMi12:3:0,'минут',AlfaS12:3:0,'секунд'); {вывод полученного значения на экран}
writeln; {пропуск пустой строки}
Writeln(t2,AlfaGr12:3:0,' градусов',AlfaMi12:3:0,' минут',AlfaS12:3:0,' секунд'); {вывод полученного значения в файл}
writeln(t2);
end; {завершение подпрограммы}
Begin {начало основной программы}
ClrScr; {очистка экрана}
Assign (t1,'in.txt'); {связывание переменной с файлом}
Assign (t2,'out.txt');{связывание переменной с файлом}
Reset (t1); {обозначение файла для чтения}
Rewrite (t2); {обозначение файла для записи}
{чтение из фаила исходных значений}
Readln(t1);
Readln(t1);
Readln(t1,x1);
Readln(t1);
Readln(t1,y1);
Readln(t1);
Readln(t1);
Readln(t1,GB1P1);
Readln(t1);
Readln(t1,MB1P1);
Readln(t1);
Readln(t1,SB1P1);
Readln(t1);
Readln(t1);
Readln(t1);
Readln(t1,x2);
Readln(t1);
Readln(t1,y2);
Readln(t1);
Readln(t1);
Readln(t1,GB1P2);
Readln(t1);
Readln(t1,MB1P2);
Readln(t1);
Readln(t1,SB1P2);
Readln(t1);
Readln(t1);
Readln(t1,GB2P2);
Readln(t1);
Readln(t1,MB2P2);
Readln(t1);
Readln(t1,SB2P2);
Readln(t1);
Readln(t1);
Readln(t1);
Readln(t1,x3);
Readln(t1);
Readln(t1,y3);
Readln(t1);
Readln(t1);
Readln(t1,GB2P3);
Readln(t1);
Readln(t1,MB2P3);
Readln(t1);
Readln(t1,SB2P3);
Begin
{определение приращений координат}
Dy12:=y2-y1;{для Y}
Dx12:=x2-x1;{для X}
Dy23:=y3-y2;{для Y}
Dx23:=x3-x2;{для X}
{проведение контроля полученных значений}
Writeln('Приращения');{вывод на экран надписи "Приращения"}
Writeln(t2,'Приращения');{вывод в фаил надписи "Приращения"}
Writeln('По оси X для 1-2');{вывод на экран надписи "По оси X"}
Writeln(t2,'По оси X для 1-2');{вывод в фаил надписи "По оси X"}
Writeln(Dx12:6:2);{вывод значения для X на экран}
writeln;
Writeln(t2,Dx12:6:2);{вывод значения для X в фаил}
Writeln(t2);
Writeln('По оси Y для 1-2');{вывод на экран надписи "По оси Y"}
Writeln(t2,'По оси Y для 1-2');{вывод в фаил надписи "По оси Y"}
Writeln(Dy12:6:2);{вывод значения для Y на экран}
writeln;
Writeln(t2,Dy12:6:2);{вывод значения для Y в фаил}
Writeln(t2);
Writeln('По оси X для 2-3');{вывод на экран надписи "По оси X"}
Writeln(t2,'По оси X для 2-3');{вывод в фаил надписи "По оси X"}
Writeln(Dx23:6:2);{вывод значения для X на экран}
writeln;
Writeln(t2,Dx23:6:2);{вывод значения для X в фаил}
Writeln(t2);
Writeln('По оси Y для 2-3');{вывод на экран надписи "По оси Y"}
Writeln(t2,'По оси Y для 2-3');{вывод в фаил надписи "По оси Y"}
Writeln(Dy23:6:2);{вывод значения для Y на экран}
writeln;
Writeln(t2,Dy23:6:2);{вывод значения для Y в фаил}
writeln(t2);
End;
Begin
{нахождение величины румбов}
R12:=arctan(abs(Dy12/Dx12));
R23:=arctan(abs(Dy23/Dx23));
{проведение контроля полученных значений}
Writeln('Румб 1-2');{вывод на экран надписи "Румб"}
Writeln(t2,'Румб 1-2');{вывод в фаил надписи "Румб"}
Writeln(R12:6:6);{вывод значения на экран}
writeln;
Writeln(t2,R12:6:6);{вывод значения в фаил}
Writeln(t2);
Writeln('Румб 2-3');{вывод на экран надписи "Румб"}
Writeln(t2,'Румб 2-3');{вывод в фаил надписи "Румб"}
Writeln(R23:6:6);{вывод значения на экран}
Writeln;
Writeln(t2,R23:6:6);{вывод значения в фаил}
writeln(t2);
End;
Begin
{определение значения дирекционного угла(1) и четверти}
If (Dx12>0) and (Dy12>0) Then
Begin
Alfa12:=R12;{?}
Writeln('Для 1-2');
Writeln(t2,'Для 1-2');
Writeln('I четверть');
Writeln(t2,'I четверть');
Writeln('Дирекционный угол равен:');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa12:6:3);
Writeln(t2,Alfa12:6:3);{??}
End;
If (Dx12<0) and (Dy12>0) Then
Begin
Alfa12:=Pi-R12;{?}
Writeln('Для 1-2');
Writeln(t2,'Для 1-2');
Writeln('II четверть');
Writeln(t2,'II четверть');
Writeln('Дирекционный угол равен(в радианах):');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa12:6:3);{??}
Writeln(t2,Alfa12:6:3);{??}
End;
If (Dx12<0) and (Dy12<0) Then
Begin
Alfa12:=Pi+R12;{?}
Writeln('Для 1-2');
Writeln(t2,'Для 1-2');
Writeln('III четверть');
Writeln(t2,'III четверть');
Writeln('Дирекционный угол равен(в радианах):');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa12:6:3);{??}
Writeln(t2,Alfa12:6:3);{??}
End;
If (Dx12>0) and (Dy12<0) Then
Begin
Alfa12:=(2*(Pi)+R12);{?}
Writeln('Для 1-2');
Writeln(t2,'Для 1-2');
Writeln('IV четверть');
Writeln(t2,'IV четверть');
Writeln('Дирекционный угол равен(в радианах):');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa12:6:3);{??}
Writeln(t2,Alfa12:6:3);{??}
End;
Writeln('Для 1-2:');
Gradus(Alfa12); {использование подпрограммы для перевода значений из радиан в градусы}
writeln;
{определение значения дирекционного угла(2) и четверти}
If (Dx23>0) and (Dy23>0) Then
Begin
Alfa23:=R23;{?}
Writeln('Для 2-3');
Writeln(t2,'Для 2-3');
Writeln('I четверть');
Writeln(t2,'I четверть');
Writeln('Дирекционный угол равен:');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa23:6:3);{??}
Writeln(t2,Alfa23:6:3);{??}
End;
If (Dx23<0) and (Dy23>0) Then
Begin
Alfa23:=Pi-R23;{?}
Writeln('Для 2-3');
Writeln(t2,'Для 2-3');
Writeln('II четверть');
Writeln(t2,'II четверть');
Writeln('Дирекционный угол равен(в радианах):');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa23:6:3);{??}
Writeln(t2,Alfa23:6:3);{??}
End;
If (Dx23<0) and (Dy23<0) Then
Begin
Alfa23:=Pi+R23;{?}
Writeln('Для 2-3');
Writeln(t2,'Для 2-3');
Writeln('III четверть');
Writeln(t2,'III четверть');
Writeln('Дирекционный угол равен(в радианах):');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa23:6:3);
Writeln(t2,Alfa23:6:3);{??}
End;
If (Dx23>0) and (Dy23<0) Then
Begin
Alfa23:=(2*(Pi)+R23);{?}
Writeln('Для 2-3');
Writeln(t2,'Для 2-3');
Writeln('IV четверть');
Writeln(t2,'IV четверть');
Writeln('Дирекционный угол равен(в радианах):');
Writeln(t2,'Дирекционный угол равен(в радианах):');
Writeln(Alfa23:6:3);{??}
Writeln(t2,Alfa23:6:3);{??}
End;
End;
Writeln('Для 2-3:');
Gradus(Alfa23);{использование подпрограммы для перевода значений из радиан в градусы}
writeln; {пропуск пустой строки}
Begin
{Координаты искомого пункта}
RB1P1:=(((Pi)/180)*(GB1P1+(MB1P1/60)+(SB1P1/3600)));
RB1P2:=(((Pi)/180)*(GB1P2+(MB1P2/60)+(SB1P2/3600)));
RB2P2:=(((Pi)/180)*(GB2P2+(MB2P2/60)+(SB2P2/3600)));
RB2P3:=(((Pi)/180)*(GB2P3+(MB2P3/60)+(SB2P3/3600)));
xP12:=x1+(((y2-y1)*sin(RB2P2))/(sin(Alfa12)*sin(RB1P1+RB2P2)))*cos(Alfa12-RB1P1);
yP12:=y1+(((y2-y1)*sin(RB2P2))/(sin(Alfa12)*sin(RB1P1+RB2P2)))*sin(Alfa12-RB1P1);
xP23:=x2+(((y3-y2)*sin(RB2P3))/(sin(Alfa23)*sin(RB1P2+RB2P3)))*cos(Alfa23-RB1P2);
yP23:=y2+(((y3-y2)*sin(RB2P3))/(sin(Alfa23)*sin(RB1P2+RB2P3)))*sin(Alfa23-RB1P2);
Writeln('Координаты искомого пункта');
writeln;
Writeln(t2,'Координаты искомого пункта');
writeln(t2);
Writeln('x1-2=');
Writeln(t2,'x1-2=');
Writeln(xP12:6:2);
Writeln(t2,xP12:6:2);
Writeln('y1-2=');
Writeln(t2,'y1-2=');
Writeln(yP12:6:2);
Writeln(t2,yP12:6:2);
Writeln('x2-3=');
Writeln(t2,'x2-3=');
Writeln(xP23:6:2);
Writeln(t2,xP23:6:2);
Writeln('y2-3=');
Writeln(t2,'y2-3=');
Writeln(yP23:6:2);
Writeln(t2,yP23:6:2);
srX:=(xP12+xP23)/2;
srY:=(yP12+yP23)/2;
Writeln('Среднее X');
writeln;
Writeln(t2,'Среднее X');
writeln(t2);
Writeln(srX:6:2);
Writeln(t2,srX:6:2);
Writeln('Среднее Y');
Writeln(t2,'Среднее Y');
Writeln(srY:6:2);
Writeln(t2,srY:6:2);
writeln;writeln;writeln; {добавление личной подписи}
writeln(t2);writeln(t2);writeln(t2);
writeln('All rights are reserved');
writeln('Made by MOISEEV ANDREI GG-09-2');
End;
Close (t1); {закрытие файлов}
Close (t2);
Readkey;
End.
2.6 Результаты работы программы
Рис.2.3 Результат работы программы
Приращения
По оси X для 1-2
-303.23
По оси Y для 1-2
-338.86
По оси X для 2-3
-471.39
По оси Y для 2-3
330.33
Румб 1-2
0.840832
Румб 2-3
0.611234
Для 1-2
III четверть
Дирекционный угол равен:
228 градусов 10 минут 34 секунд
Для 2-3
II четверть
Дирекционный угол равен(в радианах):
2.530
Дирекционный угол равен:
144 градусов 58 минут 43 секунд
Координаты искомого пункта
x1-2=
5663.27
y1-2=
5747.57
x2-3=
5663.17
y2-3=
5747.57
Среднее X 5663.22
Среднее Y 5747.57
2.7 Проверка в MS Excel
Рис. 2.4 Проверка в MS Excel
Рис. 2.5 Лист Excel в режиме отображения формул
Рис. 2.6 Лист Excel в режиме отображения формул
Рис. 2.7 Проведение промежуточных расчетов
2.8. Проверка в MathCad
Рис. 2.8 Проверка в MathCad
2.9 Анализ результатов
Сравнивая результаты работы программы с проверкой в табличном редакторе Excel и математическом пакете MathCad, можно удостовериться в правильности работы программы и выборе алгоритма ее работы.
3. Обратная геодезическая засечка
3.1 Теоретические сведения
На плоскости задана система точек с известными координатами (xi, yi ). При использовании обратной геодезической засечки теодолит располагают непосредственно на точке Р , координаты которой требуется определить. На точки с известными координатами (их должно быть не менее трех) устанавливают визирные цели, после чего измеряют горизонтальные углы ??????? (рис.3.1).
Для однозначного определения координат точки Р достаточно рассмотреть два треугольника, однако в этом случае решение задачи является бесконтрольным. Инструкции по проведению геодезических измерений требуют включать, как минимум, четыре точки с известными координатами и определять координаты вставляемой точки, соответственно, по трем или более треугольникам.
Избыточность исходных данных позволяет повысить надежность определения окончательных значений искомых величин за счет применения правила арифметического среднего.
Для определения координат вставляемой точки предварительно определяем вспомогательные величины n и m.
(3.1)
(3.2)
Далее находим углы и определяем координаты вставляемой точки.
(3.3)
(3.4)
3.2 Постановка задачи
Обратная геодезическая засечка. Требуется определить координаты точки P по трем точкам с известными координатами и двум известным углам (каждый угол - угол мужду 2 соседними точками с вершиной в точке P).
3.3 Исходные данные
Табл. 3.1
Пункты |
Направления |
X |
Y |
|
Хутор |
0 0 0 |
11327.11 |
9315.82 |
|
Крутик |
75 46 14 |
11588.28 |
11619.02 |
|
Юрьево |
168 7 51 |
8901.34 |
11230.33 |
|
Локно |
278 52 25 |
9054.58 |
7892.42 |
3.4 Блок-схема алгоритма
3.5Текст программы
Файл исходных данных
Пункт #1(Хутор)
Направление({Градусы}пробел{Минуты}пробел{Секунды}):
0 0 0
Координата X:
11327.11
Координата Y:
9315.82
Пункт #2(Крутик)
Направление({Градусы}пробел{Минуты}пробел{Секунды}):
75 46 14
Координата X:
11588.28
Координата Y:
11619.02
Пункт #3(Юрьево)
Направление({Градусы}пробел{Минуты}пробел{Секунды}):
168 7 51
Координата X:
8901.34
Координата Y:
11230.33
Пункт #4(Локно)
Направление({Градусы}пробел{Минуты}пробел{Секунды}):
278 52 25
Координата X:
9054.58
Координата Y:
7892.42
Program Zadacha3;
Uses CRT;
Var
g1,m1,s1,g2,m2,s2,g3,m3,s3,g4,m4,s4:integer; {описание используемых переменных}
x1,y1,x2,y2,x3,y3,x4,y4,vm1,vn1,vm2,vn2:real;
ra1,ra2,ra3,ra4,yg21,yg32,yg43,ct21,ct32,ct43:real;
Fi1,Fi2,Fi3,Fi4,De1,De2,De3,De4:real;
kipX1,kipX2,CredX,kipY1,kipY2,CredY:real;
t1,t2:text;
Begin
ClrScr; {очистка экрана}
Assign (t1,'data.txt'); {связывание переменной с именем файла}
Assign (t2,'result.txt'); {связывание переменной с именем файла}
Reset (t1); {обозначения файла для чтения}
Rewrite (t2); {обозначения файла для записи}
{чтение из фаила исходных значений}
Readln(t1);
Readln(t1);
Readln(t1,g1,m1,s1);
Readln(t1);
Readln(t1,x1);
Readln(t1);
Readln(t1,y1);
Readln(t1);
Readln(t1);
Readln(t1,g2,m2,s2);
Readln(t1);
Readln(t1,x2);
Readln(t1);
Readln(t1,y2);
Readln(t1);
Readln(t1);
Readln(t1,g3,m3,s3);
Readln(t1);
Readln(t1,x3);
Readln(t1);
Readln(t1,y3);
Readln(t1);
Readln(t1);
Readln(t1,g4,m4,s4);
Readln(t1);
Readln(t1,x4);
Readln(t1);
Readln(t1,y4);
Begin
{Данные в радианах}
ra1:=((Pi)/180)*(g1+(m1/60)+(s1/3600));
ra2:=((Pi)/180)*(g2+(m2/60)+(s2/3600));
ra3:=((Pi)/180)*(g3+(m3/60)+(s3/3600));
ra4:=((Pi)/180)*(g4+(m4/60)+(s4/3600));
End;
Writeln(t2); Writeln(t2); Writeln(t2); Writeln(t2,'Reshenie:'); Writeln(t2);
Writeln('Reshenie:');
Writeln(t2,'Napravlenie 1 v radianah:',ra1:6:2,';'); {вывод значений на экран и в файл}
Writeln(t2,'Napravlenie 2 v radianah:',ra2:6:2,';');
Writeln(t2,'Napravlenie 3 v radianah:',ra3:6:2,';');
Writeln(t2,'Napravlenie 4 v radianah:',ra4:6:2,' .');
Writeln('Napravlenie 1 v radianah:',ra1:6:2,';');
Writeln('Napravlenie 2 v radianah:',ra2:6:2,';');
Writeln('Napravlenie 3 v radianah:',ra3:6:2,';');
Writeln('Napravlenie 4 v radianah:',ra4:6:2,' .');
Begin
{Углы}
yg21:=ra2-ra1;
yg32:=ra3-ra2;
yg43:=ra4-ra3;
End;
Writeln(t2);
Writeln(t2,'ugol 2-1 (v radianah)=',yg21:6:2,';'); {вывод значений на экран и в файл}
Writeln(t2,'ugol 3-2 (v radianah)=',yg32:6:2,';');
Writeln(t2,'ugol 4-3 (v radianah)=',yg43:6:2,' .');
Writeln;
Writeln('ugol 2-1 (v radianah)=',yg21:6:2,';');
Writeln('ugol 3-2 (v radianah)=',yg32:6:2,';');
Writeln('ugol 4-3 (v radianah)=',yg43:6:2,' .');
Begin
{Котангенсы углов}
ct21:=(cos(yg21)/sin(yg21));
ct32:=(cos(yg32)/sin(yg32));
ct43:=(cos(yg43)/sin(yg43));
End;
Writeln(t2);
Writeln(t2,'kotangens ugla 2-1 =',ct21:6:2,';'); {вывод значений на экран и в файл}
Writeln(t2,'kotangens ugla 3-2 =',ct32:6:2,';');
Writeln(t2,'kotangens ugla 4-3 =',ct43:6:2,' .');
Writeln;
Writeln('kotangens ugla 2-1 =',ct21:6:2,';');
Writeln('kotangens ugla 3-2 =',ct32:6:2,';');
Writeln('kotangens ugla 4-3 =',ct43:6:2,' .');
Begin
{Вспомогательные величины}
vm1:=y1*ct21+y2*(-(ct21)-(ct32))+y3*ct32+x1-x3;
vm2:=y2*ct32+y3*(-(ct32)-(ct43))+y4*ct43+x2-x4;
vn1:=x1*ct21+x2*(-(ct21)-(ct32))+x3*ct32-y1+y3;
vn2:=x2*ct32+x3*(-(ct32)-(ct43))+x4*ct43-y2+y4;
End;
Writeln(t2);
Writeln(t2,'Vspomogatelnayaя velichina m1 = ',vm1:6:2,';'); {вывод значений на экран и в файл}
Writeln(t2,'Vspomogatelnayaя velichina n1 = ',vn1:6:2,';');
Writeln(t2,'Vspomogatelnayaя velichina m2 = ',vm2:6:2,';');
Writeln(t2,'Vspomogatelnayaя velichina n2 = ',vn2:6:2,' .');
Writeln;
Writeln('Vspomogatelnayaя velichina m1 = ',vm1:6:2,';');
Writeln('Vspomogatelnayaя velichina n1 = ',vn1:6:2,';');
Writeln('Vspomogatelnayaя velichina m2 = ',vm2:6:2,';');
Writeln('Vspomogatelnayaя velichina n2 = ',vn2:6:2,' .');
Begin
Fi1:=arctan(vm1/vn1);
Fi2:=(sin(Fi1)/cos(Fi1));
Fi3:=arctan(vm2/vn2);
Fi4:=(sin(Fi3)/cos(Fi3));
De1:=Fi1-yg21;
De2:=(sin(De1)/cos(De1));
De3:=Fi3-yg32;
De4:=(sin(De3)/cos(De3));
End;
Writeln(t2);
Writeln(t2,'Фи 1 = ',Fi1:6:2,'; Делта 1 = ',De1:6:2,';'); {вывод значений на экран и в файл}
Writeln(t2,'Фи 2 = ',Fi2:6:2,'; Делта 2 = ',De2:6:2,';');
Writeln(t2,'Фи 3 = ',Fi3:6:2,'; Делта 3 = ',De3:6:2,';');
Writeln(t2,'Фи 4 = ',Fi4:6:2,'; Делта 4 = ',De4:6:2,' .');
Writeln;
Writeln('Фи 1 = ',Fi1:6:2,'; Делта 1 = ',De1:6:2,';');
Writeln('Фи 2 = ',Fi2:6:2,'; Делта 2 = ',De2:6:2,';');
Writeln('Фи 3 = ',Fi3:6:2,'; Делта 3 = ',De3:6:2,';');
Writeln('Фи 4 = ',Fi4:6:2,'; Делта 4 = ',De4:6:2,' .');
Begin
{Координаты искомого пункта}
kipX1:=(x1*De2-x2*Fi2+y2-y1)/(De2-Fi2);
kipX2:=(x2*De4-x3*Fi4+y3-y2)/(De4-Fi4);
{Среднее для X}
CredX:=(kipX1+kipX2)/2;
kipY1:=(kipX1-x2)*Fi2+y2;
kipY2:=(kipX2-x3)*Fi4+y3;
{Среднее для Y}
CredY:=(kipY1+kipY2)/2;
End;
Writeln(t2);
Writeln(t2,'Координата X искомого пункта 1: ',kipX1:6:2,';'); {вывод значений на экран и в файл}
Writeln(t2,'Координата X искомого пункта 2: ',kipX2:6:2,';');
Writeln(t2,' Среднее значение X: ',CredX:6:2,';');
Writeln(t2,'Координата Y искомого пункта 1: ',kipY1:6:2,';');
Writeln(t2,'Координата Y искомого пункта 2: ',kipY2:6:2,';');
Writeln(t2,' Среднее значение Y: ',CredY:6:2,' .');
Writeln;
Writeln('Координата X искомого пункта 1: ',kipX1:6:2,';');
Writeln('Координата X искомого пункта 2: ',kipX2:6:2,';');
Writeln(' Среднее значение X: ',CredX:6:2,';');
Writeln('Координата Y искомого пункта 1: ',kipY1:6:2,';');
Writeln('Координата Y искомого пункта 2: ',kipY2:6:2,';');
Writeln(' Среднее значение Y: ',CredY:6:2,' .');
Writeln;Writeln;Writeln;
writeln(t2);writeln(t2);writeln(t2);
writeln('All rights are reserved'); {добавление личной подписи}
writeln('Made by MOISEEV ANDREI GG-09-2');
writeln(t2,'All rights are reserved');
writeln(t2,'Made by MOISEEV ANDREI GG-09-2');
Close (t1);
Close (t2);
Readkey; End.
3.6 Результаты работы программы
Рис.3.3 Результат работы программы
Reshenie:
Napravlenie 1 v radianah: 0.00;
Napravlenie 2 v radianah: 1.32;
Napravlenie 3 v radianah: 2.93;
Napravlenie 4 v radianah: 4.87 .
ugol 2-1 (v radianah)= 1.32;
ugol 3-2 (v radianah)= 1.61;
ugol 4-3 (v radianah)= 1.93 .
kotangens ugla 2-1 = 0.25;
kotangens ugla 3-2 = -0.04;
kotangens ugla 4-3 = -0.38 .
Vspomogatelnayaя velichina m1 = 1857.73;
Vspomogatelnayaя velichina n1 = 1959.03;
Vspomogatelnayaя velichina m2 = 3781.82;
Vspomogatelnayaя velichina n2 = -3895.39 .
Фи 1 = 0.76; Делта 1 = -0.56;
Фи 2 = 0.95; Делта 2 = -0.63;
Фи 3 = -0.77; Делта 3 = -2.38;
Фи 4 = -0.97; Делта 4 = 0.95 .
Координата X искомого пункта 1: 10026.34;
Координата X искомого пункта 2: 10026.69;
Среднее значение X: 10026.51;
Координата Y искомого пункта 1: 10137.84;
Координата Y искомого пункта 2: 10137.79;
Среднее значение Y: 10137.82 .
All rights are reserved
Made by MOISEEV ANDREI GG-09-2
3.7 Проверка в MS Excel
Рис. 3.4 Проверка в MS Excel
Рис. 3.5 Лист Excel в режиме отображения формул
Рис. 3.6 Лист Excel в режиме отображения формул
Рис. 3.7 Проведение промежуточных расчетов
3.8 Проверка в MathCad
Рис.3.8 Проверка в MathCad
3.9 Анализ результатов
Сравнивая результаты работы программы с проверкой в табличном редакторе Excel и математическом пакете MathCad, можно удостовериться в правильности работы программы и выборе алгоритма ее работы.
4. Решение СЛАУ методом Гаусса
4.1 Теоретические сведения
Рассмотрим один из наиболее известных и широко применяемых прямых методов решения систем линейных уравнений. Обычно этот метод называют методом исключения или методом Гаусса.
Чтобы проиллюстрировать этот метод, рассмотрим сначала систему из трех уравнений с тремя неизвестными:
(4.1)
В такой системе по крайней мере один из коэффициентов ,,должен быть отличен от нуля, иначе бы мы имели бы дело в этих трех уравнениях только с двумя неизвестными. Если , то можно переставить уравнения так, чтобы коэффициент при в первом уравнении был отличен от нуля. Очевидно, что перестановка уравнений оставляет систему неизменной: ее решение остается прежним.
Теперь введем множитель .
Умножим первое уравнение системы (4.1) на и вычтем его из второго уравнения системы. («Первое» и «второе» уравнения берем уже после перестановки, если она была необходима). Результат вычитания равен:
Так как ,
фактически исключается из второго уравнения (именно для достижения такого результата и было выбрано значение ).
Определим теперь новые коэффициенты
Тогда второе уравнение системы приобретает вид
(4.2)
Заменим второе из первоначальных уравнений уравнением (4.2) и введем множитель для третьего уравнения
.
Умножим первое уравнение на этот множитель и вычтем его из третьего. Коэффициент при снова становится нулевым, и третье уравнение приобретает вид
(4.3)
где
.
Если теперь в исходной системе уравнений (4.1) заменить третье уравнение на (4.3), то новая система выглядит так:
(4.4)
Эти новые уравнения полностью эквивалентны исходным уравнениям с тем преимуществом, что входит только в первое уравнение и не входит ни во второе, ни в третье. Таким образом, два последних уравнения представляют собой систему из двух уравнений с двумя неизвестными; если теперь найти решение этой системы, т.е. определить и , то результат можно подставить в первое уравнение и найти . Иначе говоря, задача сведена к решению системы из двух уравнений с двумя неизвестными.
Попытаемся теперь исключить из двух последних уравнений. Если, то снова мы переставим уравнения так, чтобы было отлично от нуля (если и , то система вырождена и либо вовсе не имеет решения, либо имеет бесчисленное множество решений).
Введем новый множитель
.
Умножим второе уравнение полученной системы (4.4) на и вычтем его из третьего. Результат вычитания равен
В силу выбора
.
Полагая, что
окончательно получим
(4.5)
Третье уравнение полученной системы (4.4) можно заменить уравнением (4.5), после чего система уравнений приобретает следующий вид:
(4.6)
Такая система уравнений (4.6) иногда называется треугольной из-за своего внешнего вида.
Для решения необходимо определить из третьего уравнения системы (4.6), подставить этот результат во второе уравнение и определить. Полученные значения и подставить в первое уравнение и определить. Этот процесс, который обычно называется обратной подстановкой (обратный ход), определяется формулами:
(4.7)
.
Необходимо отметить, если , то система уравнений вырождена.
Теперь можно обобщить этот метод на случай системы из n - уравнений с n-неизвестными. Ниже записана система уравнений, приведенная к треугольному виду (4.8).
(4.8)
Формулы для вычисления неизвестных (обратный ход) будут иметь вид:
(4.9)
4.2 Постановка задачи
Решение системы линейных алгебраических уравнений методом Гаусса.
4.3 Исходные данные
4.4 Блок-схема алгоритма
Блок-схема процедуры «Gaus»:
Рис. 4.2 Блок-схема процедуры «Gaus»
4.5 Текст программы
Файл исходных данных
1 -1 1 -3
2 18 0 5
1 5 2 6
0 1 1 2
15 83 18 8
Program Zadacha6;
Uses CRT;
Type matrix=array [1..10,1..10] of real;
vector=array [1..10] of real;
Var
i,j:integer;
a:matrix;
x,b:vector;
t1,t:text;
Procedure Gaus (Var a:matrix; Var b:vector; x:vector);
Var k,i,j,q:integer;
d:real;
t:text;
Begin
For i:=1 to 4 do
a[i,5]:=B[i];
Assign(t,'reshenie.txt');
Rewrite(t);
Writeln('Reshenie sistemy lineinygh algebraicheskigh uravneniy');
Writeln('(kolichestvo uravneniy 4)');
Writeln('Sistema uravneniy:');
Writeln(t,'Reshenie sistemy lineinygh algebraicheskigh uravneniy');
Writeln(t,'(kolichestvo uravneniy 4)');
Writeln(t,'Sistema uravneniy:');
For i:=1 to 4 do
Begin
For j:=1 to 4 do
Write(t,a[i,j]:6:1,'x[',j,'] ');
Writeln(t,b[i]:6:1);
End;
For i:=1 to 4 do
Begin
For j:=1 to 4 do
Write(a[i,j]:6:1,'x[',j,'] ');
Writeln(b[i]:6:1);
End;
For i:=1 to 4 do Begin
d:=a[i,i];{Поиск максимума в столбце}
q:=i;
For j:=i to 4 do
If abs(a[j,i])>abs(d) then
Begin
D:=a[j,i];
q:=j;
End;
{Обмен строк}
If i<>q Then
Begin
For j:=i to 5 do
Begin
D:=a[i,j];
a[i,j]:=a[q,j];
a[q,j]:=d;
End;
End;
{Создание строки}
For j:=5 downto i do
a[i,j]:=a[i,j]/a[i,i];
{зануление столбцов, вычисление А}
For k:=i+1 to 4 do
For j:=5 downto i do
a[k,j]:=a[k,j]-a[i,j]*a[k,i];
End;{Обратный ход}
x[4]:=a[4,5];
For i:=4-1 downto 1 do begin
D:=0;
For j:=4 downto i+1 do
d:=d+a[i,j]*x[j];
x[i]:=a[i,5]-d;
end;
Writeln(t,'Vector X:');
Writeln('Vector X:');
For i:=1 to 4 do
Write(t, x[i]:5:3,' ');
Writeln(t);
close(t);
Begin
For i:=1 to 4 do
Write(x[i]:5:3,' ');
Writeln;
End;
End;
Begin
Clrscr;
assign(t1,'clay.txt');
reset(t1);
For i:=1 to 4 do
For j:=1 to 4 do
Read(t1,a[i,j]);
For i:=1 to 4 do read(t1,b[i]);
Gaus(a,b,x);
Readkey;
End.
4.6 Результаты работы программы
Рис.4.3 Результат работы программы
Reshenie sistemy lineinygh algebraicheskigh uravneniy
(kolichestvo uravneniy 4)
Sistema uravneniy:
1.0x[1] -1.0x[2] 1.0x[3] -3.0x[4] 15.0
2.0x[1] 18.0x[2] 0.0x[3] 5.0x[4] 83.0
1.0x[1] 5.0x[2] 2.0x[3] 6.0x[4] 18.0
0.0x[1] 1.0x[2] 1.0x[3] 2.0x[4] 8.0
Вектор Х:
-7.671 7.063 12.456 -5.759
4.7 Проверка в MS Excel
Рис.4.4 Проверка в MS Excel
Рис.4.5 Лист Excel в режиме отображения формул
4.8 Проверка в MathCad
Рис.4.6 Проверка методом Гаусса
Рис.4.7 Проверка методом Крамера
Рис.4.8 Проверка методом приведения матрицы к треугольному виду
Рис.4.9 Проверка с использованием обратной матрицы
4.9 Анализ результатов
На рис. 4.5 - 4.10 Выполнена проверка решения системы линейных алгебраических уравнений разными методами. Сравнивая полученные результаты с результатами работы программы и ее проверки в табличном редакторе MS Excel, можно сделать вывод о правильности работы программы и правильности выбора алгоритма решения поставленной задачи.
Заключение
В ходе выполнения курсовой работы было выполнено четыре задания: три типовые геодезические задачи («Обратная геодезическая задача», «Прямая угловая засечка», «Обратная геодезическая засечка»), и одна математическая задача «Решение системы линейных алгебраических уравнений методом Гаусса». Поставленные задачи решались с помощью языка программирования Turbo Pascal с последующей проверкой в математическом пакете MathCad 14.0 и табличном процессоре MS Excel 2007. Судя по полученным результатам и их проверки можно удостовериться в правильности работы предложенных программ.
Библиографический список
1. Информатика: Программа и методические указания по выполнению курсовой работы для студентов специальности "Маркшейдерское дело" дневной формы обучения / Санкт-Петербургский горный ин-т. Сост.: А.П. Кондрашов, Т.Р. Косовцева, В.В. Петров, - СПб, 2004 . 51 с.
2. Информатика. Учебник. Под редакцией Н.В. Макаровой. М., 2001.
3. Правила оформления курсовых и квалификационных работ / Санкт-Петербургский горный ин-т. Сост. И.О. Онушкина, П.Г. Талалай, - СПб, 2004, 50 стр.
4. Информатика. Работа в пакете MathCad. / СПГГИ(ТУ), Сост. О.Г. Быкова, СПб, 2005, 46 стр.
5. Ян Белицкий Turbo Pascal с графикой для персональных компьютеров. М.:1991г.
Подобные документы
Разработка программ с помощью Turbo Pascal для решения задач, входящих в камеральные работы маркшейдера: решение обратной геодезической задачи и системы линейных уравнений методом Гаусса, определение координат прямой угловой засечки и теодолитного хода.
курсовая работа [1,5 M], добавлен 05.03.2013Камеральная обработка результатов геодезических измерений. Получение координат пунктов геодезической сети. Определение значения дирекционного угла. Табличные вычисления MS Excel, вычисления в MathCad. Определение правильности алгоритма для Turbo Pascal.
курсовая работа [7,7 M], добавлен 11.01.2011Методика решения некоторых геодезических задач с помощью программ MS Excel, MathCad, MatLab и Visual Basic. Расчет неприступного расстояния. Решение прямой угловой засечки по формулам Юнга и Гаусса. Решение обратной засечки по формулам Пранис-Праневича.
курсовая работа [782,2 K], добавлен 03.11.2014Решение систем алгебраических линейных уравнений методом Гаусса. Вычисление обратной матрицы и определителя. Декомпозиция задачи. Схема взаимодействия интерфейсных форм. Описание процедур и функций. Тестирование разработанного программного продукта.
курсовая работа [1,1 M], добавлен 05.06.2012Решение циклических программ и программ вычисления функции с условием. Уравнение в табличном редакторе Microsoft Excel и в Turbo Pascal. Вычисление определенного интеграла методом прямоугольников, трапеции, Симпсона. Линейные и нелинейные уравнения.
курсовая работа [233,6 K], добавлен 27.12.2009История развития и функции линейного программирования. Исследование условий типовых задач и возможностей табличного процессора. Решение задач о рационе питания, плане производства, раскрое материалов и рациональной перевозке груза в среде MS Excel.
курсовая работа [3,3 M], добавлен 28.04.2014Преобразование матрицы системы линейных алгебраических уравнений (СЛАУ) с помощью алгоритма Гаусса. Решение задачи методом простой итерации. Создание блок-схемы и текста программы для решения СЛАУ, реализованной на языке программирования Turbo Pascal.
курсовая работа [1,2 M], добавлен 15.06.2013Характеристика принципов решения инженерных задач с помощью различных информационных компьютерных комплексов. Решение задачи на языке программирования Pascal, с помощью средств математического пакета MathCAD, так же с помощь табличного процессора Excel.
курсовая работа [218,1 K], добавлен 22.08.2013Системы линейных алгебраических уравнений. Решение систем уравнений графическим способом. Разработка программного кода модуля, реализующего приближенное решение систем линейных уравнений графическим способом. Отладка программного модуля "Метод Гаусса".
курсовая работа [858,5 K], добавлен 01.12.2013Изучение систем линейных алгебраических уравнений (СЛАУ) с использованием табличного процессора MS Excel 2007. Пример решения системы линейных алгебраических уравнений методом Крамера. Прикладное программное обеспечение, применяемое для решения СЛАУ.
курсовая работа [184,5 K], добавлен 20.11.2013