Решение системы линейных уравнений методом Крамера
Общее понятие о линейных уравнениях и их системах. Разработка программного продукта в среде Delphi 7 для решения методом Крамера квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы. Описание конкретных примеров.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.07.2013 |
Размер файла | 193,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Самарский государственный университет»
Тольяттинский филиал
Кафедра: «Государственное, муниципальное управление»
Направление подготовки: «Бизнес - информатика»
КУРСОВАЯ РАБОТА
Тема: «Решение системы линейных уравнений методом Крамера»
Выполнила студентка
Краснова Анастасия Сергеевна
Научный руководитель
Мантуленко А.В.
Тольятти
2013
Содержание
Введение
Глава 1. Решение линейных уравнений в программировании
1.1 Линейные уравнения
1.1.1 Системы линейных уравнений
1.2 Метод Крамера
1.2.1 Примеры
1.3 Delphi
1.3.1 Циклы с параметром
1.3.2 Условные операторы
1.3.3 Массивы
1.3.4 Переменные и их типы
1.3.5 Компонент Delphi StringGrid
1.3.6 Компонент Delphi Edit
1.3.7 Щелчок мыши и его обработка
1.4 Программа
Список литературы
Введение
Среда программирования Delphi в настоящее время является одной из самых развитых систем визуального объектно-ориентированного программирования. Её возможности отвечают высоким требованиям и подходят для создания приложений любой сложности. Структурированность и простота Delphi делает его одним из совершенных языков программирования.
Везде говориться о стремительном росте информационных технологий. И действительно этот темп впечатляет. Парк персональных компьютеров постоянно увеличивается. Еще с большей скоростью растет число людей использующих компьютер в своей работе.
Для овладения искусством программирования необходима практика. А это значит, только самостоятельно составляя программы можно стать профессионалом своего дела - программистом. Только практика и сопутствующие ошибки могут научить разбираться в программировании.
Научившись хорошо программировать Вы будете на «ты» со своим компьютером. А это в свою очередь залог востребованности на рынке труда и роста карьеры.
Также создание определённой программы может помочь в учёбе. Например составление программ по вычислению различной сложности уравнений и других математических задач. В данной работе рассказывается о программе по вычислению систем линейных уравнений методом Крамера.
Глава 1. Решение линейных уравнений в программировании
1.1 Линейные уравнения
программный линейное уравнение крамер
Линейным уравнением называется уравнение вида ax + b = 0, где x - переменная, a и b - некоторые действительные числа.
Условия:
Если a = b = 0, то решением уравнения ax + b = 0 является любое число.
Если a = 0 и b?0, то уравнение корней не имеет.
Если a?0, то уравнение ax + b = 0 называется линейным и имеет ровно одно решение x= ?ab.
- Пример 1. Решите уравнение x = 5.
Решение. Корнем этого уравнения является число 5, поскольку при подстановке вместо x этого числа получается верное числовое равенство. Ответ. 5.
-Пример 2. Решите уравнение 0x+1=0 .
Решение. Имеем: 0x+1=01=0 . Это уравнение не имеет решений, поскольку ни при каких значениях переменной (которая, очевидно, явно не входит в уравнение) равенство 1 = 0 не имеет место.
Ответ. Нет решений.
-Пример 3. Решите уравнение 0x+1=1 .
Решение. Имеем 0x+1=11=1 . Решением этого уравнения является любое действительное число. В самом деле, при любом значении переменной равенство 1 = 1 является верным.
Ответ. x - любое число [2].
1.1.1 Системы линейных уравнений
Опр. Системой линейных алгебраических уравнений, содержащей m уравнений с n неизвестными, называется система вида
,
Рис.1 Система линейных уравнений
Здесь -- количество уравнений, а -- количество неизвестных.
где числа aij (i=1,2,…,m, j-1,2,…, n) называют коэффициентами системы; числа bi - свободными членами.
Числа xi являются неизвестными.
Такую систему удобно записывать в матричной форме A • X = B.
Здесь А - матрица коэффициентов системы (основная матрица). Х и В - это матрицы-столбцы неизвестных и свободных членов соответственно:
Рис. 2 Матричная форма записи
Опр. Решением системы называется n значений неизвестных x1=c1, x2=c2,…, xn=cn, при подстановке которых все уравнения системы превращаются в верные равенства.
Система называется совместной, если она имеет хотя бы одно решение, и несовместной, если у неё нет ни одного решения.
Совместная система называется определённой, если она имеет единственное решение; если же у неё есть хотя бы два различных решения, то она называется неопределённой [2]. 5
1.2 Метод Крамера
Опр. Метод Крамера (правило Крамера) -- способ решения квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы (причём для таких уравнений решение существует и единственно).
Описание метода.
Для системы линейных уравнений с неизвестными
Рис. 3
с определителем матрицы системы , отличным от нуля, решение записывается в виде
(i-ый столбец матрицы системы заменяется столбцом свободных членов). В другой форме правило Крамера формулируется так: для любых коэффициентов c1, c2, …, cn справедливо равенство:
[1].
1.2.1 Примеры
Система линейных уравнений:
Определители:
Решение:
Пример:
Решение:
1). Запишем в матричной форме:
A = , X = , B = .
2). Выясним, является ли матрица А невырожденной:
,
матрица невырожденная, значит имеет обратную.
3). Вычислим алгебраические дополнения к элементам матрицы А:
А11 = -3; А21= -1;
А12=-7; А22=2. 7
4). Составим обратную матрицу А-1:
А-1 = -1/13•А* =
5). Решением матричного уравнения будет матрица Х: Х = А-1•В.
Х = =
Ответ: {(1;1)} [1].
Наглядное решение и разбор примеров позволит лучше понять, как составлять программу в Delphi, как будет выглядеть её структура, составить алгоритм.
1.3 Delphi
1.3.1 Цикл с параметром
Для составления программы важно понимать её составляющую, корсет, структуру. Знать, какие операторы и циклы необходимо использовать, чтобы программа адекватно работала.
Предлагаю подробно рассмотреть некоторые её части.
Цикл - это разновидность управляющей конструкции в языках программирования, предназначенная для организации многократного 8 исполнения набора инструкций (операторов). Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом [3].
Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (цикла).
Операторами цикла называются операторы, предназначенные для многократного выполнения определенной последовательности команд. У них всегда есть заголовок цикла, задающий число повторений, и тело цикла - набор повторяемых операторов [3].
В нашей программе мы будем использовать оператор цикла (for).
Оператор цикла FOR имеет такую структуру:
for переменная-счетчик : = начальное значение to конечное значение do повторяемые операторы ;
for, to, do - являются зарезервированными словами (по-русски - для, до, выполнить).
Первоначально, до выполнения цикла значение счетчика берется равным "начальное значение". "Конечное значение" - определяет значение счетчика при котором тело цикла будет выполнено в последний раз.
Условие, управляющее работой оператора for, проверяется перед выполнением тела цикла и если условие не выполняется в самом начале, то "повторяемые операторы" не выполнятся ни разу [6].
Выполнив очередной раз тело цикла счетчик увеличивает свое значение на единицу. Затем происходит проверка, если счетчик не превышает конечного значения, то цикл вычислений повторяется, в противном случае работа оператора цикла завершается. Если у нас в начальном или конечном значении находятся вычисляемые выражения, то вычисление происходит однократно при первом проходе [3].
1.3.2 Условный оператор
С помощью условного оператора происходит проверка заданного условия и в зависимости от полученного результата происходит выбор одного из двух действий. Условный оператор представляет собой средство ветвления алгоритмического процесса.
Структура условного оператора представляет собой следующий вид:
if условие then список операторов 1 else список операторов 2 ;
где if, then, else - зарезервированные слова, по-русски означающие - если, то, иначе.
Условие выбора - это логическое выражение (в основном используются операторы сравнения) [3].
В данном случае, в нашей программе ELSE не будет использоваться, исходя из логики задачи.
1.3.3 Массивы
Массивом называется упорядоченная совокупность однотипных элементов, у которых общее имя. Массивы в языке Delphi во многом схожи с аналогичными типами данных в других языках программирования. В состав элементов массива могут входить данные любых типов, в том числе и структурированные. Любой элемент массива определяется именем массива и
индексом (индекс может быть не один, тогда данный массив будет многомерным). Количество индексов определяет размерность массива - одномерный, двумерный ...[7].
Массивы бывают динамические и статические. Статический массив является таким массивом, размерность которого определена еще до компиляции программы. Описание статического типа будет в таком формате:
<Имя> = array [ <список инд.> ] of <тип>;
<Имя> - правильный идентификатор,
array of - зарезервированные слова (по русски - массив из), <список инд.> - список, состоящий из одного или нескольких индексных типов. Которые должны разделяться запятой и находиться в квадратных скобках.
<тип> - любой тип языка Delphi [3].
Динамический массив в составлении данной программы не нужен.
1.3.4 Переменные и их типы
При составлении программы важно помнить о ключевых, важных моментах без которых она не будет работать.
Мы разобрали часть основной составляющей нашей программы, а теперь нужно понять, что является обрамлением всех циклов, операторов и пр. Что объединяет их в единое.
Любая величина в Delphi может быть постоянной или переменной. Её имя (идентификатор) может состоять из комбинации латинских букв, цифр и знака подчёркивания, и начинаться не с цифры. При этом регистр символов значения не имеет.
Место описания данных в программе - вне логических блоков begin / end. В модуле перед ключевым словом implementation есть блок описания:
var Form1: TForm1; Именно здесь, начиная со следующей строки, удобно объявлять глобальные переменные и константы. Как видим, одна (Form1) уже есть [3]!
Команда объявления переменных в языке Delphi: var имя_переменной : тип_переменной ; 11
Слово var - ключевое. Именем может быть любой идентификатор, если он не был описан ранее и не является одним из ключевых или зарезервированных слов языка Delphi. Если нужно описать несколько переменных одного типа, то их перечисляют, отделяя запятой: var A, B, C : Integer [7]; Если несколько описаний следуют друг за другом, то ключевое слово var повторно можно не указывать: var A, B : Integer; C, D : String [6];
Постоянную величину иначе называют константой. Но она встречаться в данной программе не будет.
Числа бывают целые и дробные. Наиболее удобным для использования в программах является тип Delphi Integer.
Дробные числа имеют дробную часть, отделяемую десятичной точкой. Наиболее удобным для использования в программах является тип Delphi Real.
1.3.5 Компонент Delphi StringGrid
Настало время разобрать некоторые компоненты, используемые в нашей программе.
Компонент Delphi StringGrid (Таблица строк) расположен на странице Additional Палитры компонентов.
С помощью компонента StringGrid создаются таблицы, в ячейках которых содержаться произвольные текстовые данные.
Основное свойство компонента StringGrid - это двумерный массив Cells[ACol, ARow : integer] типа String с помощью него можно обращаться к содержимому ячеек и изменять их содержание. ACol устанавливает номер столбца, ARow - задает строку в таблице. Этим свойством можно воспользоваться только во время выполнения программы, оно доступно для записи и чтения. Нумерация строк и столбцов идет с нуля.
Свойство ColCount задает число столбцов, RowCount - число строк [4].
Компонент StringGrid по умолчанию слева и сверху имеет заголовочные области, они имеют серый цвет. Количество подобных строк и столбцов устанавливается в свойствах FixedCols и FixedRow. Если же для таблицы не нужны заголовочные области, то эти свойства должны быть равны нулю.
1.3.6 Компонент Delphi Edit
Компонент Delphi Edit расположен на странице "Standard" Палитры компонентов. Он представляет собой однострочный редактор для ввода, отображения и изменения текста. Основное свойство, содержащее данные введенные пользователем это Text. Оно имеет тип string и может хранить и передавать только текстовые данные. Если необходимо записать какое либо число, то оно будет представлено в текстовом виде.
При создании нового компонента Edit на форме свойство Text будет совпадать с именем (Edit1, Edit2 и далее по нарастающей). Желательно его сразу очистить.
Очистить поле можно командой:
Edit1.Clear;
или присвоить значение пустой строки:
Edit1.Text := '';[4]
Функции IntToStr и FloatToStr переводят соответственно целые и вещественные числа в текстовую строку, а StrToInt и StrToFloat наоборот.
1.3.7 Щелчок мыши и его обработка
Windows приложение сейчас трудно представить без использования компьютерной мыши. Клик (щелчок) мыши в основном меню почти любой программы позволит быстро выполнить необходимое нам действие.
В среде Delphi основной обработчик клика (щелчка) мыши на компоненте это событие onClick. Оно в основном используется в объектах типа переключатель или кнопка. Есть еще одно событие OnDblClick (двойной клик на объекте). Эти события не дают нам информацию о точных координатах указателя мыши [5].
Данное положение вещей не всегда удовлетворяет запросам разработчика.
И поэтому в Delphi присутствуют еще два события - это OnMouseUp (происходит при отпускании кнопки мыши) и OnMouseDown (происходит при нажатии кнопки мыши).
Эти события несут подробную информацию о параметрах клика: точные координаты указателя в пределах клиентской области объекта на котором был выполнен клик, тип клика (двойной или одинарный), состояние системных клавиш SHIFT, ALT и CTRL, какая кнопка мыши была нажата или отпущена.
1.4 Программа
Вот мы и подошли к самой программе. Здесь представлены коды двух программ: первая - с матрицей, размером 2*2, вторая - размером 3*3.
unit matrica;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var b:array [1..2] of integer; a,a1,a2:array [1..2,1..2] of integer; k,k2,k1,x,y:real;
i,j:integer;(перечисляем все переменные, задействованные в данной программе. Определители и конечный результат будут дробными числами)
begin
for i:=1 to 2 do
for j:=1 to 2 do
begin (поясняем элементы массивов матрицы А и столбца свободных членов)
a[i,j]:=strtoint(StringGrid1.Cells[j,i]); b[i]:=strtoint(StringGrid2.Cells[0,i]); end;
k:=a[1,1]*a[2,2]-a[2,1]*a[1,2];(пишем, как находить определитель)
for i:=1 to 2 do
for j:=1 to 2 do
a1[i,j]:=a[i,j];
for i:=1 to 2 do
for j:=1 to 2 do
Внутри двух вложенных циклов,(пробег всех элементов матрицы) мы меняем первый столбец на столбец свободных членов. И получаем дополнительную матрицу а1 и ее определитель к1.
if j=1 then a1[i,j]:=b[i];
k1:=a1[1,1]*a1[2,2]-a1[2,1]*a1[1,2]; (вычисляем новый определитель к1, полученный заменой строки свободных членов)
for i:=1 to 2 do
for j:=1 to 2 do
a2[i,j]:=a[i,j];
for i:=1 to 2 do
for j:=1 to 2 do
if j=2 then a2[i,j]:=b[i];
k2:=a2[1,1]*a2[2,2]-a2[2,1]*a2[1,2]; (вычисляем новый определитель к2, полученный заменой строки свободных членов)
x:=k1/k;(делим полученные определители на исходный,чтобы вычислить х и у)
y:=k2/k;
Edit1.Text:=floattostr(x);
Edit2.Text:=floattostr(y);
end; 16
end.
С матрицей 3*3:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
StringGrid1: TStringGrid;
Button1: TButton;
Label7: TLabel;
Panel2: TPanel;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Label2: TLabel;
StringGrid4: TStringGrid;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMArray =array [0..3] of real;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='1,7';
StringGrid1.Cells[1,0]:='2,8';
StringGrid1.Cells[2,0]:='1,9';
StringGrid1.Cells[3,0]:='0,7';
StringGrid1.Cells[0,1]:='2,1';
StringGrid1.Cells[1,1]:='3,4';
StringGrid1.Cells[2,1]:='1,8';
StringGrid1.Cells[3,1]:='1,1';
StringGrid1.Cells[0,2]:='4,2';
StringGrid1.Cells[1,2]:='-1,7';
StringGrid1.Cells[2,2]:='1,3';
StringGrid1.Cells[3,2]:='2,8';18
end;
!\function podstanov (mas1,mas2,mas3:TMArray):real;
begin
Result:= mas1[0]*mas2[1]*mas3[2]+mas2[0]*mas3[1]*mas1[2]+mas1[1]*mas2[2]*mas3[0]-mas3[0]*mas2[1]*mas1[2]-mas2[0]*mas1[1]*mas3[2]-mas3[1]*mas2[2]*mas1[0];
end;\\
procedure TForm1.Button1Click(Sender: TObject);
var mas1,mas2,mas3:TMArray;
i,j:integer; x1,x2,x3:real;
Delta,Delta1,Delta2,Delta3:real;
Begin
for i:=0 to StringGrid1.ColCount-1 do
begin
mas1[i]:=StrToFloat(StringGrid1.cells[i,0]);
mas2[i]:=StrToFloat(StringGrid1.Cells[i,1]);
mas3[i]:=StrToFloat(StringGrid1.Cells[i,2]);
end;
Delta:=podstanov(mas1,mas2,mas3); //дельта
for j:=0 to StringGrid1.RowCount do
begin
StringGrid2.Cells[0,j]:=StringGrid1.Cells[3,j];
StringGrid2.Cells[1,j]:=StringGrid1.Cells[1,j];
StringGrid2.Cells[2,j]:=StringGrid1.Cells[2,j];
StringGrid2.Cells[3,j]:='0';19
end;
for i:=0 to StringGrid2.ColCount-1 do
begin
mas1[i]:=StrToFloat(StringGrid2.cells[i,0]);
mas2[i]:=StrToFloat(StringGrid2.Cells[i,1]);
mas3[i]:=StrToFloat(StringGrid2.Cells[i,2]);
end;
Delta1:=podstanov(mas1,mas2,mas3); //дельта
for j:=0 to StringGrid3.RowCount do
begin
StringGrid3.Cells[0,j]:=StringGrid1.Cells[0,j];
StringGrid3.Cells[1,j]:=StringGrid1.Cells[3,j];
StringGrid3.Cells[2,j]:=StringGrid1.Cells[2,j];
StringGrid3.Cells[3,j]:='0';
end;
for i:=0 to StringGrid3.ColCount-1 do
begin
mas1[i]:=StrToFloat(StringGrid3.cells[i,0]);
mas2[i]:=StrToFloat(StringGrid3.Cells[i,1]);
mas3[i]:=StrToFloat(StringGrid3.Cells[i,2]);
end;
Delta2:=podstanov(mas1,mas2,mas3);
for j:=0 to StringGrid4.RowCount do
begin20
StringGrid4.Cells[0,j]:=StringGrid1.Cells[0,j];
StringGrid4.Cells[1,j]:=StringGrid1.Cells[1,j];
StringGrid4.Cells[2,j]:=StringGrid1.Cells[3,j];
StringGrid4.Cells[3,j]:='0';
end;
for i:=0 to StringGrid3.ColCount-1 do
begin
mas1[i]:=StrToFloat(StringGrid4.cells[i,0]);
mas2[i]:=StrToFloat(StringGrid4.Cells[i,1]);
mas3[i]:=StrToFloat(StringGrid4.Cells[i,2]);
end;
Delta3:=podstanov(mas1,mas2,mas3);
Label1.Caption:=FloatToStr(Delta1)+#13+'--------------'+#13+FloatToStr(Delta);
Label2.Caption:=FloatToStr(Delta2)+#13+'--------------'+#13+FloatToStr(Delta);
Label3.Caption:=FloatToStr(Delta3)+#13+'--------------'+#13+FloatToStr(Delta);
end;
end.
Список литературы
1. http://ru.wihipedia.org/wiki/Метод_Крамера.
2. Л.Н.Удовенко «Основы линейной алгебры. Часть1» Самара 2008, «Самарский университет».
3. http://delphi-prg.ru
4. http://www.maksakov-sa.ru
5. http://www.delphi-manual.ru
6. Михаил Флёнов «Библия Delphi» 3-е издание, Санкт-Петербург» 2011.
7. Дарахвелидзе П. Г., Марков Е. П. "Программирование в Delphi 7".
Размещено на Allbest.ru
Подобные документы
Разработка программы для решения системы линейных уравнений методом Крамера и с помощью расширенной матрицы на языке С++. Описание метода Крамера. Структура программы: заголовочные файлы, типы данных, переменные, идентификаторы, операторы, массивы.
курсовая работа [32,3 K], добавлен 19.01.2009Требования к языкам программирования, их эффективность, лаконичность, ясность, реальные возможности. Создание языка С#. Применение систем линейных алгебраических уравнений для практических задач, сущность и особенности метода Крамера для их решения.
курсовая работа [118,1 K], добавлен 13.11.2009История развития алгоритмических языков. Создание языка С++. Разработка программы в Visual C++ для решения линейных уравнений методом Крамера. Структура данных, этапы тестирования программного обеспечения на работоспособность и корректность расчетов.
курсовая работа [390,0 K], добавлен 29.12.2014Использование MS Excel для математических расчетов. Описание численных методов решения системы линейных алгебраических уравнений. Решение систем линейных алгебраических уравнений с методами Крамера и Зейделя и с помощью табличного процессора MS Excel.
курсовая работа [1,6 M], добавлен 14.02.2021Решение систем алгебраических линейных уравнений методом Крамера. Сущность метода прогонки. Программная реализация метода: блок-схема алгоритма, листинг программы. Проверка применимости данного способа решения для конкретной системы линейных уравнений.
курсовая работа [581,0 K], добавлен 15.06.2013Сущность матричного метода. Разработка программы решения системы уравнений линейных алгебраических уравнений методом решения через обратную матрицу на языке программирования Delphi. Представление блок-схемы и графического интерфейса программного продукта.
курсовая работа [1,0 M], добавлен 27.09.2014Этапы развития языков программирования. Способы решения системы линейных алгебраических уравнений методом Крамера, рассмотрение особенностей. Анализ языка программирования С++. С # как прямой потомок двух самых успешных в мире компьютерных языков.
курсовая работа [770,2 K], добавлен 27.01.2013Алгоритм решения систем линейных уравнений методом Гаусса, его этапы. Система уравнений для определения коэффициентов сплайна, представляющая собой частный случай систем линейных алгебраических уравнений. Программная реализация, тестовый пример.
курсовая работа [431,8 K], добавлен 15.06.2013Проектирование приложения, позволяющего находить решение системы алгебраических линейных уравнений матричным методом. Выбор количества уравнений, заполнение значений коэффициентов системы уравнений и свободных членов, алгоритм решения линейных уравнений.
курсовая работа [939,4 K], добавлен 16.01.2014Изучение систем линейных алгебраических уравнений (СЛАУ) с использованием табличного процессора MS Excel 2007. Пример решения системы линейных алгебраических уравнений методом Крамера. Прикладное программное обеспечение, применяемое для решения СЛАУ.
курсовая работа [184,5 K], добавлен 20.11.2013