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

Автор работы: Пользователь скрыл имя, 26 Февраля 2013 в 17:54, курсовая работа

Описание

Delphi – быстро развивающая система. Первая версия – Delphi 1 была выпущена в феврале 1995 года. Она была рассчитана на разработку 16-разрядных приложений для Windows 3.11. Начиная с Delphi 2 которая вышла в 1996 году, среда разработки была рассчитана на 32-разрядные приложения.

Содержание

Введение…………………………………………………………….....2
Описание работы с программой “Метод Крамера”…………………7
Реализация программы на языке программирования Delphi……….13
Текст программы………………………………………………………14
Заключение…………………………………………………………......18
Список литературы…………………………………………………….19

Работа состоит из  1 файл

Содержание.doc

— 187.00 Кб (Скачать документ)

Содержание

Введение…………………………………………………………….....2

Описание работы с  программой “Метод Крамера”…………………7

Реализация программы  на языке программирования Delphi……….13

Текст программы………………………………………………………14 

Заключение…………………………………………………………......18

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

 

Delphi – быстро развивающая система. Первая версия – Delphi 1 была выпущена в феврале 1995 года. Она была рассчитана на разработку 16-разрядных приложений для Windows 3.11. Начиная с Delphi 2 которая вышла в 1996 году, среда разработки была рассчитана на 32-разрядные приложения.

Delphi – мощная система визуального объектно-ориентированного проектирования, позволяющая решать множество задач, в частности:

  • Создавать законченные приложения для Windows самой различной направленности, от чисто вычислительных и логических, до графических и мультимедиа.
  • Быстро  создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых приложений, написанных на любом языке; интерфейс удовлетворяет всем требованиям Windows и автоматически настраивается на ту систему, которая установлена на компьютере пользователя, поскольку использует многие функции, процедуры, библиотеки Windows.
  • Создавать свои динамически присоединяемые библиотеки (DLL) компонентов, форм, функций, которые затем можно использовать из других языков программирования.
  • Создавать мощные системы работы с локальными и удаленными базами данных любых типов; при этом имеются средства автономной отладки приложений с последующим выходом в сеть.
  • Формировать и печатать сложные отчеты, включающие таблицы, графику.
  • Создавать справочные системы (файлы .hlp), как для своих приложений, так и для любых других, с которыми, можно работать не только из приложений, но и просто через Windows.
  • Создавать профессиональные программы установки для приложений Windows, учитывая все специфику и все требования Windows.

 

Решение СЛАУ является одной  из самых распространенных и важных задач вычислительной математики, т.к. к ней сводятся многочисленные научные и практические задачи.

Запишем систему n линейных алгебраических уравнений с n неизвестными.

a11x1 + a12 x + … + a1n xn = f1

a21x1 + a22 x + … + a2n xn = f2                      (1)

.   .   .   .   .   .   .   .   .   .   .   .  .   .   .   .   .   .   .

an1x1 + an2 x + … + ann xn = fn

В матричном виде система (1) запишется 

AX=f                     (2)

где X=(x1,….xn)T – искомый вектор столбец размерности n, f =(f1,…,fn)T - заданный вектор столбец с вещественными компонентами размерности n, A – квадратная матрица размерности n x n с вещественными коэффициентами ai,j ,  i,j=1,…,n, т.е

       a11 a12 …a1n

А = a21 a22 … a2n

       ……………..

        an1 an2 … ann  

 

Будем предполагать,  что матрица А невырожденная, (т.е.detA=0) и следовательно система (1) имеет единственное решение X=A-1f

Особенность большинства  ЧМ для задачи (1) состоит в отказе от нахождения обратной матрицы. Основное требование к методу решения –  его экономичность.  Под экономичностью метода понимают минимум числа арифметических действий, достаточных для отыскания приближенного решения СЛАУ с заданной точностью e>.0

Выбор метода и его  экономичность зависят от вида от вида матрицы А и типа компьютера. В ряде случаев СЛАУ матрица А  имеет специальный вид.

Например:

1.     ai,j=0  i,j=1,2,…n  - нулевая матрица;

2.     E= ai,j ={1,i=j0,i¹j} –единичная матрица;

3.     A= ai,j  если ai,j= aj,i для любых i,j – симметричная матрица; ее элементы расположены симметрично относительно главной диагонали;

4.     Верхняя треугольная матрица – все элементы, расположенные ниже (левой) диагонали, равны нулю;

5.     Нижняя треугольная матрица – все элементы, расположенные выше (левой) диагонали, равны нулю;

6.     Диагональная матрица – ненулевыми являются только элементы, расположенные на главной диагонали

7.     Ленточная или 2-х, 3-х-диагональная матрица – ненулевые элементы располагаются на главной диагонали и параллельно ей в непосредственной близости;

8.     Клеточные матрицы;

9.     Разреженные матрицы – большинство элементов нулевые, могут быть беспорядочно расположенные.

В перечисленных случаях  решение системы (1) может быть найдено  достаточно просто или специальными методами.

Для решения системы (1) в общем случае могут быть выбраны  прямые или итерационные методы.

Преимущества прямых методов решения СЛАУ

1.     Используют конечные соотношения (формулы) для вычисления неизвестных;

2.     Дают решение после выполнения заранее известного числа действий;

3.     Пригодны для решения широкого класса задач, т.к. обладают сравнительной простотой и универсальностью.

Недостатки  прямых методов решения СЛАУ

1.     Требуют при больших n значительных объемов оперативной памяти для хранения сразу всей матрицы системы;

2.     Не учитывают структуру матрицы (при большом числе нулевых элементов в случае разреженной матрицы , эти элементы занимают ОП и над ними производятся арифметические действия);

3.     Накапливание погрешностей в процессе решения, т.к на любом этапе вычислений используются результаты предыдущих операций;

4.     Точное решение получается только теоретически, т.к. неизбежны погрешности вычислений из-за ограниченности разрядной сетки ЭВМ.

Достоинства итерационных методов 

1.     Не требуют хранения всей матрицы системы в оперативной памяти, хранятся лишь несколько векторов;

2.      Иногда элементы матрицы можно не хранить, а вычислять по мере необходимости;

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

Недостатки итерационных методов 

1.     Алгоритмы обычно более сложные по сравнению с точными методами;

2.     Необходимо задавать начальное приближение;

3.     Объем вычислений заранее определить трудно

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок-схема решения СЛАУ методом Крамера

 

Описание  работы с программой “Метод Крамера”

Программу “Метод Крамера” можно использовать решения систем с n уравнениями и с n неизвестными. При разработке интерфейса необходимо было максимально упростить его и сделать понятным пользователю.

Запустив программу “Метод Крамера” появиться главное окно программы (рис. 1).

 

Рис. 1.

 

Что бы начать заполнение матрицы  коэффициентов нужно выбрать  n и нажать на кнопку “Начать” (рис. 2).

 

Рис. 2

Для заполнения матрицы случайными числами надо нажать кнопку с надписью “Random” (рис. 3).

 

 

 

Рис. 3

 

Так же возможен ввод чисел самостоятельно, кликнув два раза на  требуемую  ячейку.

 

Для того,  что бы начать процесс вычисления нужно нажать на кнопку с надписью “Вычислить”. Внизу программы появится строка ответов. (рис.4)

 

 

Рис. 4

 

 

При неверном вводе числа  или при неполном вводе появится соответствующее сообщение об ошибке (рис. 4а,4б)

 

 

 

 

 

Рис. 4а

 

 

 

 

Рис. 4б 

Реализация  программы на языке программирования Delphi:

 

Для того чтобы решить систему нужно:

 

А. Вычислить определитель ∆ матрицы  коэффициентов системы (1), последовательно  и в полной мере применяя метод  разложения по первому столбцу.: Сначала разложим∆: ∆ = а11 ∆ 1 - а21∆ 2 + … + (-1)n-1аn1 ∆n , затем ∆k = а12∆ k1 - а22∆ k2 + … + (-1)k-2аk-1 2 ∆k k-1 + (-1)k-1аk+1 2 ∆k k+1 +…+ (-1)n- 2аn2 ∆k n

- здесь ∆ km – определитель (минор), полученный из ∆ k путем вычеркивания второго столбца и строки с номером m, m = 1, 2, …, n, m ≠ k, и так далее до определителей второго порядка. Потом обратный ход. Значения определителей 2-го порядка дадут значения определителей 3-го порядка, …, ∆ k

дадут ∆.

 

В. Вычислить ∆ , используя миноры∆ k вычисленные при нахождении ∆ : ∆ (1) = b1 ∆1 - b2 ∆ 2 + … + (-1)n-1bn ∆n.

 

С1. Если ∆ ≠ 0, то x1 = ∆  (1)/ ∆ .

 

С2. Выбрать минор ∆k ≠0, и из системы (1) вычеркнуть уравнение с номером k. Подставив в полученную

систему значение x1 , найденное в С1 и получить систему порядка n-1.

 

С3. Повторить процедуру.

 

D. Если ∆ = 0, ∆ (1)≠ 0, то система (1) не имеет решений.

 

E1. Если ∆ = 0 и ∆ (1)=0, то x1 = p, где р параметр (любое число).

 

E2. Из системы (1) вычеркиваем  любое уравнение. (Желательно, выбрать  минор∆ k≠ 0, если такие имеются, и вычеркнуть уравнение с номером k.) Подставив в полученную систему значение x1=р, получим систему порядка n-1.

 

E3. Вернуться к B, и решать систему  порядка n-1. (Возможны все варианты: B-C, B – D,    B – E).

 

 

 

 

 

 

 

 

 

 

 

 

Текст программы

Программа была написана на языке программирования Delphi версии 7.0.

 

Модуль   Unit1.

 

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, Grids, StdCtrls, Spin;

 

type

  TForm1 = class(TForm)

    Label1: TLabel;

    SpinEdit1: TSpinEdit;

    Button1: TButton;

    StringGrid1: TStringGrid;

    StringGrid2: TStringGrid;

    Label2: TLabel;

    Button2: TButton;

    Button3: TButton;

    StringGrid3: TStringGrid;

    Label3: TLabel;

    Button4: TButton;

    Label4: TLabel;

    procedure SpinEdit1Change(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  private

    { Private declarations }

  public

end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

 

{=================Размерность матрицы=======================}

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

Form1.StringGrid1.RowCount:=SpinEdit1.value;

Form1.StringGrid1.ColCount:=SpinEdit1.value;

Form1.StringGrid2.RowCount:=SpinEdit1.value;

Form1.StringGrid3.ColCount:=SpinEdit1.value;

end;

{===========================================================}

 

{===============Начало работы  с матрицей====================}

procedure TForm1.Button1Click(Sender: TObject);

begin

  Form1.Label1.Visible:=false;

  Form1.SpinEdit1.Visible:=false;

  Form1.Button1.Visible:=false;

  Form1.StringGrid1.Visible:=True;

  Form1.StringGrid2.Visible:=True;

  Form1.Label2.Visible:=true;

  Form1.Button2.Visible:=True;

  Form1.Button3.Visible:=True;

end;

{===========================================================}

  function det(n:integer):real;

     Var i,j,k:integer;

     il,d:real;

     a:array of array of real;

  begin

  try

  setlength(a,Form1.SpinEdit1.Value,Form1.SpinEdit1.Value);

  for i:=0 to Form1.SpinEdit1.Value-1 do

    for j:=0 to Form1.SpinEdit1.Value-1 do

      begin

      if j<>n then a[i,j]:=strtofloat(Form1.StringGrid1.Cells[j,i])

              else a[i,j]:=strtofloat(Form1.StringGrid2.Cells[0,i]);

      end;

  for i:=0 to Form1.SpinEdit1.Value-2 do

    for j:=i+1 to Form1.SpinEdit1.Value-1 do

      begin

      il:=a[j,i]/a[i,i];

      for k:=0 to Form1.SpinEdit1.Value-1 do

         a[j,k]:=a[j,k]-a[i,k]*il;

      end;

  d:=1;

  for i:=0 to Form1.SpinEdit1.Value-1 do d:=d*a[i,i];

  det:=d;

  except

  on EconvertError do ShowMessage('Неверные значения матрицы коэфецентов');

  on EZeroDivide do showmessage('Деление на ноль');

  end;

end;

 

 

 

{===========================================================}

{===================Реализация метода=======================}

procedure TForm1.Button2Click(Sender: TObject);

Var i:integer;

     d:real;

     c,rez:array of real;

begin

 

  Form1.Label4.Visible:=false;

  setlength(rez,SpinEdit1.Value);

  setlength(c,SpinEdit1.Value);

 

{=============Нахождение определителей==============}

  d:=det(-1);

if d<>0 then begin

   for i:=0 to SpinEdit1.Value-1 do

     c[i]:=det(i);

{==============Нахождение решения  системы==============}

  for i:=0 to SpinEdit1.Value-1 do

     rez[i]:=c[i]/d;

   for i:=0 to SpinEdit1.Value-1 do

      StringGrid3.Cells[i,0]:=floattostr(rez[i]);

   Form1.StringGrid3.Visible:=True;

   Form1.Label3.Visible:=true;

  end

         else

     Form1.Label4.Visible:=true;

end;

 

 

 

{==========Заполнене матрицы  случайными числами=============}

procedure TForm1.Button3Click(Sender: TObject);

  Var i,j:integer;

begin

randomize;

  for i:=0 to SpinEdit1.Value-1 do

  for j:=0 to SpinEdit1.Value-1 do

  begin

      StringGrid1.Cells[i,j]:=inttostr(random(10)-5);

  end;

  for i:=0 to SpinEdit1.Value-1 do

    StringGrid2.Cells[0,i]:=inttostr(random(10)-5);

end;

{===========================================================}

 

{====================Закрытие программы=====================}

procedure TForm1.Button4Click(Sender: TObject);

begin

Form1.Close;

end;

{===========================================================}

 

 

 

end.

 

 

 

Заключение

Язык программирования Delphi позволил, благодаря своим возможностям, быстро реализовать программу “Метод Крамера”, используя типизированные файлы.

 

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

  1. Дарахвелидзе П. Г., Марков Е. П.. Программирование в Delphi 7.0. – СПб.: БХВ-Петербург, 2003. – 784 с: ил.
  2. Самарский, Гулин “Численные методы”.
  3. Самарский “Введение в численные методы”.
  4. Турчак “Основа численных методов”.
  5. Манастырский “Сборник задач по методам вычислений”

Информация о работе Метод Крамера