Содержание
Содержание
ВВЕДЕНИЕ3
СКАЛЯРНЫЕ ПРОИЗВЕДЕНИЯ И ТРАНСПОНИРОВАНИЕ4
СКАЛЯРНЫЕ ПРОИЗВЕДЕНИЯ И НЕРАВЕНСТВО ШВАРЦА6
ТРАНСПОНИРОВАНИЕ МАТРИЦЫ8
ПРОЕКЦИИ НА ПОДПРОСТРАНСТВА И АППРОКСИМАЦИИ ПО МЕТОДУ НАИМЕНЬШИХ КВАДРАТОВ9
Упражнение 3.2.1.10
Упражнение 3.2.2.11
МНОГОМЕРНЫЕ ЗАДАЧИ О НАИМЕНЬШИХ КВАДРАТАХ12
МАТРИЦЫ ПРОЕКТИРОВАНИЯ15
ПОДГОНКА ДАННЫХ МЕТОДОМ НАИМЕНЬШИХ КВАДРАТОВ17
ЗАКЛЮЧЕНИЕ21
Список использованной литературы22
Выдержка из текста работы
Одним из способов преодоления сложности данной задачи является использование технологии разработки программ «сверху-вниз». Этот подход позволяет путем декомпозиции исходной задачи свести ее к последовательному решению более простых задач. Его использование позволяет уменьшить затраты на отладку и повысить надёжность программы. Также существенным моментом технологии «сверху-вниз» является её акцент на повторное использование уже существующих модулей, а не разработку их «с нуля».
В начале основной части отчёта приводится точная формализованная постановка задачи с указанием полного набора операций, выполнение которых должна обеспечивать прикладная программа.
В руководстве пользователя раскрывается назначение программы, ее возможности и выполняемые операции. Подробно объясняются правила пользования программой, и приводятся конкретные примеры диалога с пользователем
В руководстве программиста рассматриваются вопросы внутренней организации программы, в том числе состав ее модулей и их взаимодействие. Кроме этого описываются используемые структуры данных и наиболее важные и интересные с точки зрения их реализации алгоритмы.
В заключении делаются выводы о полноте решения поставленной задачи, а так же приводится ряд соображений по возможным направлениям доработки программы.
Так же приведена техническая информация, включающая листинги всех модулей программы.
алгебраический гаусс видеотека алгоритм
2.Постановка задачи
Метод Гаусса при решении системы уравнений можно разделить на два этапа: прямой и обратный ход. Процесс последовательного исключения неизвестных называется прямым ходом метода Гаусса. После завершения прямого хода появляется возможность вычислить неизвестную переменную, находящуюся в последнем уравнении. С ее помощью из предпоследнего уравнения находим следующую неизвестную переменную и так далее. Процесс последовательного нахождения неизвестных переменных при движении от последнего уравнения к первому называется обратным ходом метода Гаусса.
Пусть дана система:
Метод Гаусса состоит в последовательном исключении неизвестных из этой системы. Последовательно умножая первое уравнение на и складывая с i-м уравнение, исключим из всех уравнений кроме первого. Получим систему
Аналогичным образом из полученной системы исключим . Последовательно, исключая все неизвестные, получим систему треугольного вида
Описанная процедура называется прямым ходом метода Гаусса. Заметим, что ее выполнение было возможно при условии, что все , не равны нулю.
Выполняя последовательные подстановки в последней системе, (начиная с последнего уравнения) можно получить все значения неизвестных.
3.Руководство пользователя
Программа предназначена для работы с матрицами размерностью n*n.
Запуск программы осуществляется либо набором в командной строке имени программы Метод Гаусса.exe с последующим нажатием клавиши « Enter» либо другим способом ,зависящем от конкретной операционной системы.
После запуска программы на экране появляется информационное сообщение о программе
Enter NUM of equations:
Программа является интерактивным консольным приложением. Весь диалог с пользователем осуществляется в текстовом режиме
При вводе недопустимого значения ничего не происходит и программа ждёт ввода правильного значения.
Далее пользователю предлагается ввести коэффициенты при x системы линейных уравнений:
a[%d][%d] =
А так же свободные члены системы линейных уравнений:
b[%d] =
После на экран выводится получившаяся матрица А и столбец свободных членов В:
See input
Matrix A:
Vector B:
Solving on Gauss method
После линейных преобразований строк на экран выводится преобразованная в ступенчатую матрицу А и преобразованный столбец свободных членов В.
Forvard Gauss course
Matrix A:
Vector B:
Далее выполняется последовательное нахождение неизвестных х и вывод результата:
Back Gauss course
Results:
После пользователю предлагается ввести символ для продолжения использования программы. При нажатии другого символа программа завершает работу.
4.Руководство программиста
.1.Структура программы
Прикладная программа разработана с использованием принципов модульного программирования. Она является совокупностью взаимодействующих модулей. Модули объединяются в единую программу путем компоновки соответствующих объектных файлов. Структура программы:
1.Main.cpp-головной модуль
2.show_vector.cpp, show_vector.h- служит для вывода столбцом свободных членов. матрицы на экран
3.pryamoi_hod.cpp,pryamoi_hod.h-модуль служит для вывода получившейся матрицы путем линейных преобразований на экран
4.obratni_hod.cpp, obratni_hod.h-модуль служит для нахождения неизвестных и вывода результата на экран
5.Заключение
В результате выполнения курсового проекта были разработаны решение простейших задач линейной алгебры. Число этих функций сравнительно невелико, однако можно легко добавить в более сложные функции, построенные на базе уже имеющихся. Программа позволяет работать с матрицами и векторами, элементы которых могут быть любого типа, однако на практике чаще всего используется целый тип и тип чисел с плавающей запятой. Программа написана на языке С++, однако может быть легко переписана на любом из современных языков программирования, так как приведены довольно простые алгоритмы всех компонентных функций. Были максимально предусмотрены всевозможные ошибки, которые могут возникнуть при использовании функций . Особое внимание уделялось разумному выделению памяти подобъекты во время выполнения программы, поэтому все функции были тщательно отлажены.Данные функции могут быть эффективно применены на практике в задачах, требующих операций с матрицами и векторами, а также связанных с решением систем линейных алгебраических уравнений.
6.Список рекомендуемой литературы
1. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер. с анг.- М.: Вильямс, 2006.
. С.А. Орлов. Технологии разработки программного обеспечения. Учебное пособие. 2-е изд. — СПб.: Питер, 2003. — 480 с.: ил.
. Шилдт, Герберт. Полный справочник по С, 4-е издание.: Пер. с анг.- М.: Вильямс, 2005.
. Борисенко В.В. Основы программирования — Интернет-университет информационных технологий — ИНТУИТ.ру, 328 стр. — 2005 г.
. Костюкова Н.И., Калинина Н.А. Язык Си и особенности работы с ним — Интернет-университет информационных технологий — ИНТУИТ.ру, 208 стр. 2006 г.
. Крутицкая Н.И., Тихонравов А.В., Шишкин А.А., Аналитическая геометрия и линейная алгебра с приложениями
7.Приложение
.1.Основная программа
// main.cpp
// головной модуль приложения
#include <stdio.h> //i/o
#include <conio.h> //getch
#include <math.h>
#include "obratni_hod.h"
#include "pryamoi_hod.h"
#include "show_vector.h"
main()
{i,j,n;**a, *b, *x;
{("Enter NUM of equations: ");
scanf("%d",&n);
//Выделяем память под матрицу А и векторы В и Х
a = (double **)malloc(n*sizeof(double));= (double *)malloc(n*sizeof(double));= (double *)malloc(n*sizeof(double));(i = 0; i < n; i++)
{[i] = (double *)malloc(n*sizeof(double));
//Ввод a(j = 0; j < n; j++)
{("a[%d][%d] = ",i + 1,j + 1);("%lf",&a[i][j]);
}
//Ввод b(i = 0; i < n; i++)
{("b[%d] = ",i + 1);("%lf",&b[i]);
("\tSee input\r\n");("Matrix A:\r\n");(i = 0; i < n; i++)(n, a[i]);("Vector B:\r\n");(n, b);
("\tSolving on Gauss method\r\n");(n, a, b);("Forvard Gauss course\r\n");//Прямой ход("Matrix A:\r\n");(i = 0; i < n; i++)(n, a[i]);("Vector B:\r\n");(n, b);
(n, a, b, x);("Back Gauss course\r\n");//Обратный ход("Matrix A:\r\n");(i = 0; i < n; i++)(n, a[i]);("Vector B:\r\n");(n, b);
("Results :\r\n");(n, x);
("Press Y for new input\r\n");
//Чистим память((void *)a);((void *)b);((void *)x);
}(toupper(getch()) == ‘Y’);0;
7.2.Модуль «obratni_hod»
// obratni_hod.h
// интерфейс модуля "obratni_hod.h "
#ifndef obratni_vector_h
#define obratni_vector_h
#include <stdio.h>ObratniHod(int n, double **a, double *b, double *x);
#endif
// obratni_hod.cpp
// реализация модуля "obratni_hod "
#include "obratni_hod.h"
ObratniHod(int n, double **a, double *b, double *x)
{s = 0;[n — 1] = 1.0*b[n — 1]/a[n — 1][n — 1];(int i = n — 2, j; 0 <= i; i—)
{= 0;(j = i + 1; j < n; j++)
{= s+a[i][j]*x[j];
}[i] = 1.0*(b[i] — s)/a[i][i];
7.3.Модуль «pryamoi_hod»
// pryamoi_hod.h
// интерфейс модуля " pryamoi_hod.h"
#ifndef pryamoi_hod_h
#define pryamoi_hod_h
#include <stdio.h> //i/oShowVector(int n, double * vec);
#endif
// pryamoi_hod.cpp
// реализация модуля " pryamoi_hod"
#include "pryamoi_hod.h"
PryamoiHod(int n, double **a, double *b)
{v;(int k = 0,i,j,im; k < n — 1; k++)
{= k;(i = k + 1; i < n; i++)
{= i;
}
}(im != k)
{(j = 0; j < n; j++)
{= a[im][j];[im][j] = a[k][j];[k][j] = v;
}= b[im];[im] = b[k];[k] = v;
}(i = k + 1; i < n; i++)
{= 1.0*a[i][k]/a[k][k];[i][k] = 0;[i] = b[i] — v*b[k];(v != 0)(j = k + 1; j < n; j++)
{[i][j] = a[i][j] — v*a[k][j];
.4.Модуль «show_vector»
// show_vector.h
// интерфейс модуля " show_vector"
#ifndef show_vector_h
#define show_vector_h
#include <stdio.h>
#include <math.h>
PryamoiHod(int n, double **a, double *b);
#endif
// show_vector.cpp
// реализация модуля "show_vector"
#include "show_vector.h"
ShowVector(int n, double * vec)
{(int i = 0; i < n; i++)("%.3f ",vec[i]);("\r\n");