Решение системы линейных уравнений методом Крамера

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    136,06 Кб
  • Опубликовано:
    2013-07-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Решение системы линейных уравнений методом Крамера

Министерство образования и науки Российской Федерации

федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Самарский государственный университет»

Тольяттинский филиал

Кафедра: «Государственное, муниципальное управление»

Направление подготовки: «Бизнес - информатика»



КУРСОВАЯ РАБОТА

Тема: «Решение системы линейных уравнений методом Крамера»



Выполнила студентка

Краснова Анастасия Сергеевна

Научный руководитель

Мантуленко А.В.




Тольятти

Содержание

Введение

Глава 1. Решение линейных уравнений в программировании

.1      Линейные уравнения

.1.1   Системы линейных уравнений

.2      Метод Крамера

.2.1   Примеры

1.3    Delphi

.3.1   Циклы с параметром

.3.2   Условные операторы

.3.3   Массивы

.3.4   Переменные и их типы

.3.5   Компонент Delphi StringGrid

.3.6   Компонент Delphi Edit

.3.7   Щелчок мыши и его обработка

.4 Программа

Список литературы

Введение

Среда программирования Delphi в настоящее время является одной из самых развитых систем визуального объектно-ориентированного программирования. Её возможности отвечают высоким требованиям и подходят для создания приложений любой сложности. Структурированность и простота Delphi делает его одним из совершенных языков программирования.

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

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

Научившись хорошо программировать Вы будете на «ты» со своим компьютером. А это в свою очередь залог востребованности на рынке труда и роста карьеры.

Также создание определённой программы может помочь в учёбе. Например составление программ по вычислению различной сложности уравнений и других математических задач. В данной работе рассказывается о программе по вычислению систем линейных уравнений методом Крамера.

Глава 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, при подстановке которых все уравнения системы превращаются в верные равенства.

Система называется совместной <#"656794.files/image005.gif"> линейных уравнений с  неизвестными

Рис. 3

с определителем матрицы системы , отличным от нуля, решение записывается в виде


(i-ый столбец матрицы системы заменяется столбцом свободных членов). В другой форме правило Крамера формулируется так: для любых коэффициентов c1, c2, …, cn справедливо равенство:

[1].

.2.1 Примеры

Система линейных уравнений:


Определители:


Решение:


Пример:

Решение:

). Запишем в матричной форме:

A = , X = , B = .

). Выясним, является ли матрица А невырожденной:

,

матрица невырожденная, значит имеет обратную.

). Вычислим алгебраические дополнения к элементам матрицы А:

А11 = -3; А21= -1;

А12=-7; А22=2. 7

). Составим обратную матрицу А-1:

А-1 = -1/13∙А* =

). Решением матричного уравнения будет матрица Х: Х = А-1∙В.

Х =  =

Ответ: {(1;1)} [1].

Наглядное решение и разбор примеров позволит лучше понять, как составлять программу в Delphi, как будет выглядеть её структура, составить алгоритм.

1.3 Delphi

.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 не будет использоваться, исходя из логики задачи.

.3.3 Массивы

Массивом называется упорядоченная совокупность однотипных элементов, у которых общее имя. Массивы в языке Delphi во многом схожи с аналогичными типами данных в других языках программирования. В состав элементов массива могут входить данные любых типов, в том числе и структурированные. Любой элемент массива определяется именем массива и

индексом (индекс может быть не один, тогда данный массив будет многомерным). Количество индексов определяет размерность массива - одномерный, двумерный ...[7].

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

<Имя> = array [ <список инд.> ] of <тип>;

<Имя> - правильный идентификатор,of - зарезервированные слова (по русски - массив из), <список инд.> - список, состоящий из одного или нескольких индексных типов. Которые должны разделяться запятой и находиться в квадратных скобках.

<тип> - любой тип языка Delphi [3].

Динамический массив в составлении данной программы не нужен.

.3.4 Переменные и их типы

При составлении программы важно помнить о ключевых, важных моментах без которых она не будет работать.

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

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

Место описания данных в программе - вне логических блоков begin / end. В модуле перед ключевым словом implementation есть блок описания: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.

.3.5 Компонент Delphi StringGrid

Настало время разобрать некоторые компоненты, используемые в нашей программе.

Компонент Delphi StringGrid (Таблица строк) расположен на странице Additional Палитры компонентов.

С помощью компонента StringGrid создаются таблицы, в ячейках которых содержаться произвольные текстовые данные.

Свойство ColCount задает число столбцов, RowCount - число строк [4].

Компонент StringGrid по умолчанию слева и сверху имеет заголовочные области, они имеют серый цвет. Количество подобных строк и столбцов устанавливается в свойствах FixedCols и FixedRow. Если же для таблицы не нужны заголовочные области, то эти свойства должны быть равны нулю.

 

.3.6 Компонент Delphi Edit

Компонент Delphi Edit расположен на странице "Standard" Палитры компонентов. Он представляет собой однострочный редактор для ввода, отображения и изменения текста. Основное свойство, содержащее данные введенные пользователем это Text. Оно имеет тип string и может хранить и передавать только текстовые данные. Если необходимо записать какое либо число, то оно будет представлено в текстовом виде.

При создании нового компонента Edit на форме свойство Text будет совпадать с именем (Edit1, Edit2 и далее по нарастающей). Желательно его сразу очистить.

Очистить поле можно командой:.Clear;

или присвоить значение пустой строки:.Text := '';[4]

Функции IntToStr и FloatToStr переводят соответственно целые и вещественные числа в текстовую строку, а StrToInt и StrToFloat наоборот.

 

.3.7 Щелчок мыши и его обработка

Windows приложение сейчас трудно представить без использования компьютерной мыши. Клик (щелчок) мыши в основном меню почти любой программы позволит быстро выполнить необходимое нам действие.

В среде Delphi основной обработчик клика (щелчка) мыши на компоненте это событие onClick. Оно в основном используется в объектах типа переключатель или кнопка. Есть еще одно событие OnDblClick (двойной клик на объекте). Эти события не дают нам информацию о точных координатах указателя мыши [5].

Данное положение вещей не всегда удовлетворяет запросам разработчика.

И поэтому в Delphi присутствуют еще два события - это OnMouseUp (происходит при отпускании кнопки мыши) и OnMouseDown (происходит при нажатии кнопки мыши).

Эти события несут подробную информацию о параметрах клика: точные координаты указателя в пределах клиентской области объекта на котором был выполнен клик, тип клика (двойной или одинарный), состояние системных клавиш SHIFT, ALT и CTRL, какая кнопка мыши была нажата или отпущена.

1.4 Программа

 

Вот мы и подошли к самой программе. Здесь представлены коды двух программ: первая - с матрицей, размером 2*2, вторая - размером 3*3.

unit matrica;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids;= class(TForm): TStringGrid;: TStringGrid;: TButton;: TEdit;: TEdit;Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };

var

Form1: TForm1;

{$R *.dfm}TForm1.Button1Click(Sender: TObject);b:array [1..2] of integer; a,a1,a2:array [1..2,1..2] of integer; k,k2,k1,x,y:real;,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;:=a[1,1]*a[2,2]-a[2,1]*a[1,2];(пишем, как находить определитель)

for i:=1 to 2 doj:=1 to 2 do[i,j]:=a[i,j];i:=1 to 2 do j:=1 to 2 do

Внутри двух вложенных циклов,(пробег всех элементов матрицы) мы меняем первый столбец на столбец свободных членов. И получаем дополнительную матрицу а1 и ее определитель к1.

if j=1 then a1[i,j]:=b[i];1:=a1[1,1]*a1[2,2]-a1[2,1]*a1[1,2]; (вычисляем новый определитель к1, полученный заменой строки свободных членов)

for i:=1 to 2 doj:=1 to 2 do[i,j]:=a[i,j];i:=1 to 2 doj:=1 to 2 do

if j=2 then a2[i,j]:=b[i];2:=a2[1,1]*a2[2,2]-a2[2,1]*a2[1,2]; (вычисляем новый определитель к2, полученный заменой строки свободных членов)

x:=k1/k;(делим полученные определители на исходный,чтобы вычислить х и у)

y:=k2/k;.Text:=floattostr(x);.Text:=floattostr(y);

end; 16

end.

С матрицей 3*3:Unit1;interfaceuses, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, StdCtrls, ExtCtrls, ComCtrls;= class(TForm): TPanel;: TStringGrid;: TButton;: TLabel;: TPanel;: TLabel;: TStringGrid;: TStringGrid;: TLabel;: TStringGrid;: TLabel;

Label4: TLabel;

Label5: TLabel;: TLabel;: TStatusBar;FormCreate(Sender: TObject);Button1Click(Sender: TObject);

private

{ Private declarations }

{ Public declarations };=array [0..3] of real;: TForm1;

{$R *.dfm}TForm1.FormCreate(Sender: TObject);.Cells[0,0]:='1,7';.Cells[1,0]:='2,8';.Cells[2,0]:='1,9';.Cells[3,0]:='0,7';.Cells[0,1]:='2,1';

StringGrid1.Cells[1,1]:='3,4';

StringGrid1.Cells[2,1]:='1,8';.Cells[3,1]:='1,1';.Cells[0,2]:='4,2';.Cells[1,2]:='-1,7';.Cells[2,2]:='1,3';

StringGrid1.Cells[3,2]:='2,8';18

end;

!\function podstanov (mas1,mas2,mas3:TMArray):real;:= 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];;\\TForm1.Button1Click(Sender: TObject);mas1,mas2,mas3:TMArray;,j:integer; x1,x2,x3:real;,Delta1,Delta2,Delta3:real;i:=0 to StringGrid1.ColCount-1 do[i]:=StrToFloat(StringGrid1.cells[i,0]);[i]:=StrToFloat(StringGrid1.Cells[i,1]);[i]:=StrToFloat(StringGrid1.Cells[i,2]);;

Delta:=podstanov(mas1,mas2,mas3); //дельта

for j:=0 to StringGrid1.RowCount do.Cells[0,j]:=StringGrid1.Cells[3,j];.Cells[1,j]:=StringGrid1.Cells[1,j];.Cells[2,j]:=StringGrid1.Cells[2,j];

StringGrid2.Cells[3,j]:='0';19

end;i:=0 to StringGrid2.ColCount-1 do[i]:=StrToFloat(StringGrid2.cells[i,0]);[i]:=StrToFloat(StringGrid2.Cells[i,1]);[i]:=StrToFloat(StringGrid2.Cells[i,2]);;:=podstanov(mas1,mas2,mas3); //дельтаj:=0 to StringGrid3.RowCount do.Cells[0,j]:=StringGrid1.Cells[0,j];.Cells[1,j]:=StringGrid1.Cells[3,j];.Cells[2,j]:=StringGrid1.Cells[2,j];.Cells[3,j]:='0';;i:=0 to StringGrid3.ColCount-1 do

mas1[i]:=StrToFloat(StringGrid3.cells[i,0]);

mas2[i]:=StrToFloat(StringGrid3.Cells[i,1]);[i]:=StrToFloat(StringGrid3.Cells[i,2]);;:=podstanov(mas1,mas2,mas3);j:=0 to StringGrid4.RowCount do

begin20

StringGrid4.Cells[0,j]:=StringGrid1.Cells[0,j];.Cells[1,j]:=StringGrid1.Cells[1,j];.Cells[2,j]:=StringGrid1.Cells[3,j];.Cells[3,j]:='0';;i:=0 to StringGrid3.ColCount-1 do[i]:=StrToFloat(StringGrid4.cells[i,0]);[i]:=StrToFloat(StringGrid4.Cells[i,1]);[i]:=StrToFloat(StringGrid4.Cells[i,2]);;:=podstanov(mas1,mas2,mas3);.Caption:=FloatToStr(Delta1)+#13+'--------------'+#13+FloatToStr(Delta);.Caption:=FloatToStr(Delta2)+#13+'--------------'+#13+FloatToStr(Delta);.Caption:=FloatToStr(Delta3)+#13+'--------------'+#13+FloatToStr(Delta);;

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

.        Михаил Флёнов «Библия Delphi» 3-е издание, Санкт-Петербург» 2011.

.        Дарахвелидзе П. Г., Марков Е. П. "Программирование в Delphi 7".

Похожие работы на - Решение системы линейных уравнений методом Крамера

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!