Автор работы: Пользователь скрыл имя, 12 Декабря 2012 в 14:54, курсовая работа
Delphi – быстро развивающая система. Первая версия – Delphi 1 была выпущена в феврале 1995 года. Она была рассчитана на разработку 16-разрядных приложений для Windows 3.11. Начиная с Delphi 2 которая вышла в 1996 году, среда разработки была рассчитана на 32-разрядные приложения.
Введение…………………………………………………………….....2
Описание работы с программой “Метод Крамера”…………………7
Реализация программы на языке программирования Delphi……….13
Текст программы………………………………………………………14
Заключение…………………………………………………………......18
Список литературы…………………………………………………….19
Содержание
Введение…………………………………………………………
Описание работы с программой “Метод Крамера”…………………7
Реализация программы на языке программирования Delphi……….13
Текст программы………………………………………………………
Заключение……………………………………………………
Список литературы…………………………………
Введение
Delphi – быстро развивающая система. Первая версия – Delphi 1 была выпущена в феврале 1995 года. Она была рассчитана на разработку 16-разрядных приложений для Windows 3.11. Начиная с Delphi 2 которая вышла в 1996 году, среда разработки была рассчитана на 32-разрядные приложения.
Delphi – мощная система визуального объектно-ориентированного проектирования, позволяющая решать множество задач, в частности:
Решение СЛАУ является одной из самых распространенных и важных задач вычислительной математики, т.к. к ней сводятся многочисленные научные и практические задачи.
Запишем систему n линейных алгебраических уравнений с n неизвестными.
a11x1 + a12 x2 + … + a1n xn = f1
a21x1 + a22 x2 + … + a2n xn = f2 (1)
. . . . . . . . . . . . . . . . . . .
an1x1 + an2 x2 + … + 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:=
Form1.StringGrid1.ColCount:=
Form1.StringGrid2.RowCount:=
Form1.StringGrid3.ColCount:=
end;
{Начало работы с матрицей}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Label1.Visible:=false;
Form1.SpinEdit1.Visible:=
Form1.Button1.Visible:=false;
Form1.StringGrid1.Visible:=
Form1.StringGrid2.Visible:=
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.
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.
else a[i,j]:=strtofloat(Form1.
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]:=
Form1.StringGrid3.Visible:=
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]:=inttos
end;
for i:=0 to SpinEdit1.Value-1 do
StringGrid2.Cells[0,i]:=
end;
{Закрытие программы}
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.Close;
end;
end.
Заключение
Язык программирования Delphi позволил, благодаря своим возможностям, быстро реализовать программу “Метод Крамера”, используя типизированные файлы.
Список литературы