Результат решения задачи - Методика оценки устойчивости линейных динамических систем по критерию В. И. Зубова
Из данной матрицы А необходимо вычислить матрицу В по формуле. Результат решения приведен ниже
А=
Действия при вычислении формулы: вычитаем из единичной матрицы Е исходную матрицу А. Обозначим как матрица G
G=- =
Находим матрицу обратную полученной при помощи ее определителя. Нахождение определителя приведено ниже;
=1,9*-3,1*+
+0,2*=31,447
Находим дополнение для каждого элемента полученной матрицы.
G11==19,15
G 12==1,88
G 13==4,45
G 21==13,01
G 22==8,01
G 23==0,56
G 31==9,22
G 32==6,16
G 33==7,89
Получаем матрицу из дополнений.
GV=
Транспонируем ее и делим каждый ее элемент на определитель исходной матрицы G, тем самым получаем обратную матрицу. Проверка верности нахождения обратной матрицы осуществлена в приложении 4.
(GV)Т=
=G-1 ==
Вычитаем из единичной матрицы обратную умноженную на число 2. Тем самым получаем формулу искомую матрицу B.
В=-2*=
После нахождения матрицы В необходимо вычислить ее нормы по формулам приведенным в теоретическом описании.
А) Максимальная по сумме элементов строка.
=0,2179+0,8274+0,5864=1.6317
Б) Максимальный по сумме элементов столбец.
=0,8274+0,4906+0,0356=1.4764
В) Квадратный корень из суммы квадратов элементов матрицы
= 1.0686
Г) Максимальное значение элемента матрицы В
=0,5864
Условием асимптотической устойчивости системы является условие
,
Которое наблюдается в одном случае.
=0,5864 <1
Но для надежности возведем в квадрат каждый элемент матрицы В и заново вычислим нормы.
В^2=
А) Максимальная по сумме элементов строка.
=0,0783+0,3535+0,3173=0,7491
Б) Максимальный по сумме элементов столбец.
=0,1598+0,3173+0,4281= 0,9052
В) Квадратный корень из суммы квадратов элементов матрицы
= 0,5813
Г) Максимальное значение элемента матрицы В
=0,4281
В данном случае все нормы матрицы меньше единицы, что является условием асимптотической устойчивости системы.
Полученные выше значения выражений, вычислены в математической программе MatLab. Исходный код представлен в приложении 3. Эти значения могут отличатся от полученных в результате любого другого способа вычисления в связи с тем, что MatLab более профессионально решает даные выражения. В написанной мной программе в независимости от того, что алгоритм решения соблюдался, были замечены некоторые несоответствия, однако они не повлияли на определение окончательного результата исследования. Итоговые данные приведены на рисунках 1-3.
Рисунок 1 Первое действие
Рисунок 2 Нахождение обратной матрицы
Рисунок 3 Окончательные вычисления
Список литературы
- 1. Бессекерский В. А., Попов Е. П. Теория систем автоматического регулирования.- М: Наука, 1972. - 767 с. 2. Меркин Д. Р. Введение в теорию устойчивости движения. - М.: Наука, 1981.-312с. 3. Фельдбаум А. А., Бутковский А. Г. Методы теории автоматического управления. - М.: Наука, 1971. - 743с. 4. Цыпкин Я. З. Основы теории автоматического управления. - М.: Наука, 1977. - 559с. 5. Демидович Б. П., Марон И. А. Основы вычислительной математики. - М.: Наука, 1970. - 659с.
Приложение 1
Описание процедур.
Модуль Skoba. pas
Procedure tform1.norm1;
Данная процедура вычисляет первую норму матрицы. Локальные переменные приведены ниже в таблице 1.
Алгоритм.
Переменной n1 присваиваем сумму элементов первой строки.
Переменной n2 присваиваем сумму элементов второй строки.
Переменной n3 присваиваем сумму элементов третьей строки.
Далее попарно сравниваем суммы элементов строк и при условии, что одна из них больше других двух выводим ее значение в текстовое поле.
Таблица 1 Локальные переменные
Идентификатор |
Тип |
Назначение |
N1 |
Extended |
Сумма элементов первой строки |
N2 |
Extended |
Сумма элементов второй строки |
N3 |
Extended |
Сумма элементов третьей строки |
Procedure tform1.norm2;
Данная процедура вычисляет вторую норму матрицы. Локальные переменные приведены ниже в таблице 2.
Алгоритм. Переменной n1 присваиваем сумму элементов первого столбца. Переменной n2 присваиваем сумму элементов второго столбца.
Переменной n3 присваиваем сумму элементов третьего столбца.
Далее попарно сравниваем суммы элементов столбцов и при условии, что одна из строк больше других двух выводим ее значение в текстовое поле.
Таблица 2 Локальные переменные
Идентификатор |
Тип |
Назначение |
N1 |
Extended |
Сумма элементов первого столбца |
N2 |
Extended |
Сумма элементов второго столбца |
N3 |
Extended |
Сумма элементов третьего столбца |
Procedure tform1.norm3;
Данная процедура вычисляет третью норму матрицы. Локальная переменная приведена ниже в таблице 3.
Алгоритм.
Переменной n присваиваем значение формулы, по которой вычисляется данная матрица.
Выводим ее значение в текстовое поле.
Таблица 3 Локальные переменные
Идентификатор |
Тип |
Назначение |
N |
Extended |
Квадратный корень из суммы квадратов элементов матрицы |
Procedure tform1.norm4;
Данная процедура вычисляет четвертую норму матрицы. Локальные переменные приведены ниже в таблице 4.
Алгоритм. Заносим значения элементов матрицы в двумерный массив n. Производим сортировку массива и наименьшее значение выводим в текстовое поле.
Таблица 4 Локальные переменные
Идентификатор |
Тип |
Назначение |
Max |
Extended |
Элемент матрицы |
N |
Array[0..2,0..2] of extended; |
Двумерный массив применяемый для сортировки элементов |
Procedure TForm1.FormCreate(Sender: TObject);
Процедура запускается при создании окна и прописывает в элементах StringGrid1 и StringGrid3 начальную матрицу и единичную, необходимую при решении, соответственно. Процедура содержит входную переменную Sender - тип tobject, этот параметр определяет, какой объект программы вызывает данную процедуру.
Procedure TForm1.RadioGroup1Click(Sender: TObject);
Данная процедура управляет появлением или исчезанием элементов интерфейса необходимых при решении формулы по действиям. Следующее действие можно выполнить только при условии выполнения предыдущего. Также в этой процедуре реализовано нахождение дополнений к матрице и прописывание в элементе StringGrid5 транспонированной матрицы дополнений из полученной, необходимую для вычисления обратной матрицы.
Procedure TForm1.Button6Click(Sender: TObject);
Процедура закрывает программу при подтверждении появляющегося сообщения.
Procedure TForm1.Button1Click(Sender: TObject);
Процедура вычисляет разность единичной и начальной матрицы.
Procedure TForm1.Button2Click(Sender: TObject);
Процедура вычисляет обратную матрицу, путем деления каждого элемента матрицы полученной в процедуре RadioGroup1Click на определитель исходной матрицы.
Procedure TForm1.Button5Click(Sender: TObject);
Вычисляет определитель матрицы.
Procedure TForm1.Button3Click(Sender: TObject);
Умножает на число 2 обратную матрицу.
Procedure TForm1.Button4Click(Sender: TObject);
Вычитает из единичной матрицы, матрицу, полученную в приведенных выше вычислениях. Тем самым вычисляем необходимую формулу.
Procedure TForm1.SpeedButton1Click(Sender: TObject);
Данная процедура производит все предыдущие действия сразу при нажатии на одну кнопку. То есть из начальной сразу получаем необходимую.
Procedure TForm1.Button7Click(Sender: TObject);
Возводит каждый член матрицы в квадрат. При повторном нажатии возводит каждый член полученной матрицы в квадрат и так далее.
Procedure TForm1.SpeedButton2Click(Sender: TObject);
Процедура вычисляет нормы матрицы и выводит итог исследования.
Алгоритм.
Запускаем по очереди все процедуры вычисления норм.
Если хотя бы одна из них по модулю меньше единицы в текстовом поле появляется запись о том, данная система асимптотически устойчива.
В обратном случае выводится сообщение, данная система асимптотически не устойчива. Необходимо возвести в квадрат каждый член матрицы и вычислить нормы по новой, до тех пор пока хотя бы одна не станет меньше единицы.
Procedure TForm1.Image1Click(Sender: TObject);
Procedure TForm1.Image2Click(Sender: TObject);
Procedure TForm1.Image3Click(Sender: TObject);
Procedure TForm1.Image4Click(Sender: TObject);
Процедуры приведенные выше сходны по своему значению. Каждая из них при на нажатии на картинку выводит норму матрицы, изображенную на ней в текстовое поле напротив.
Глобальные переменные, используемы в программе, приведены в таблице 5.
Таблица 5 Глобальные переменные
Идентификатор |
Тип |
Назначение |
Form1 |
TForm1 |
Идентификатор формы приложения |
X |
Integer |
Номер строки матрицы |
Y |
Integer |
Номер столбца матрицы |
G11 |
Extended |
Дополнение первого элемента матрицы (Е-А) |
G12 |
Extended |
Дополнение второго элемента матрицы (Е-А) |
G13 |
Extended |
Дополнение третьего элемента матрицы (Е-А) |
G21 |
Extended |
Дополнение четвертого элемента матрицы (Е-А) |
G22 |
Extended |
Дополнение пятого элемента матрицы (Е-А) |
G23 |
Extended |
Дополнение шестого элемента матрицы (Е-А) |
G31 |
Extended |
Дополнение седьмого элемента матрицы (Е-А) |
G32 |
Extended |
Дополнение восьмого элемента матрицы (Е-А) |
G33 |
Extended |
Дополнение девятого элемента матрицы (Е-А) |
Приложение 2
Листинг программы.
Модуль Skoba. pas
Unit Skoba;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, ExtCtrls, jpeg;
Type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
StringGrid1: TStringGrid;
GroupBox2: TGroupBox;
StaticText1: TStaticText;
GroupBox3: TGroupBox;
StringGrid2: TStringGrid;
SpeedButton1: TSpeedButton;
Bevel1: TBevel;
RadioGroup1: TRadioGroup;
Edit1: TEdit;
Label1: TLabel;
GroupBox4: TGroupBox;
Button1: TButton;
StringGrid4: TStringGrid;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
StringGrid5: TStringGrid;
StringGrid6: TStringGrid;
Button2: TButton;
GroupBox8: TGroupBox;
StringGrid7: TStringGrid;
Button3: TButton;
GroupBox9: TGroupBox;
StringGrid8: TStringGrid;
Button4: TButton;
StringGrid3: TStringGrid;
GroupBox10: TGroupBox;
StringGrid9: TStringGrid;
Button5: TButton;
Bevel2: TBevel;
Label2: TLabel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
SpeedButton2: TSpeedButton;
Label3: TLabel;
Button6: TButton;
Memo1: TMemo;
Memo2: TMemo;
Button7: TButton;
Bevel3: TBevel;
Label4: TLabel;
Procedure FormCreate(Sender: TObject);
Procedure RadioGroup1Click(Sender: TObject);
Procedure Button6Click(Sender: TObject);
Procedure Button1Click(Sender: TObject);
Procedure Button2Click(Sender: TObject);
Procedure Button5Click(Sender: TObject);
Procedure Button3Click(Sender: TObject);
Procedure Button4Click(Sender: TObject);
Procedure SpeedButton1Click(Sender: TObject);
Procedure SpeedButton2Click(Sender: TObject);
Procedure Image3Click(Sender: TObject);
Procedure norm1;
Procedure norm2;
Procedure norm3;
Procedure norm4;
Procedure Image4Click(Sender: TObject);
Procedure Image1Click(Sender: TObject);
Procedure Image2Click(Sender: TObject);
Procedure Button7Click(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Var
Form1: TForm1;
X, y:integer;
G11,g12,g13,g21,g22,g23,g31,g32,g33:extended;
Implementation
{$R *.dfm}
Procedure tform1.norm1;
Var
N1,n2,n3:extended;
Begin
N1:=abs(strtofloat(stringgrid2.Cells[0,0]))+abs(strtofloat(stringgrid2.Cells[1,0]))+abs(strtofloat(stringgrid2.Cells[2,0]));
N3:=abs(strtofloat(stringgrid2.Cells[0,2]))+abs(strtofloat(stringgrid2.Cells[1,2]))+abs(strtofloat(stringgrid2.Cells[2,2]));
N2:=abs(strtofloat(stringgrid2.Cells[0,1]))+abs(strtofloat(stringgrid2.Cells[1,1]))+abs(strtofloat(stringgrid2.Cells[2,1]));
If (n1>n2) and (n1>n3) then
Edit2.Text:=floattostr(n1);
If (n2>n1) and (n2>n3) then
Edit2.Text:=floattostr(n2);
If (n3>n2) and (n3>n1) then
Edit2.Text:=floattostr(n3);
End;
Procedure tform1.norm2;
Var
N1,n2,n3:extended;
Begin
N1:=abs(strtofloat(stringgrid2.Cells[0,0]))+abs(strtofloat(stringgrid2.Cells[0,1]))+abs(strtofloat(stringgrid2.Cells[0,2]));
N3:=abs(strtofloat(stringgrid2.Cells[1,0]))+abs(strtofloat(stringgrid2.Cells[1,1]))+abs(strtofloat(stringgrid2.Cells[1,2]));
N2:=abs(strtofloat(stringgrid2.Cells[2,0]))+abs(strtofloat(stringgrid2.Cells[2,1]))+abs(strtofloat(stringgrid2.Cells[2,2]));
If (n1>n2) and (n1>n3) then
Edit3.Text:=floattostr(n1);
If (n2>n1) and (n2>n3) then
Edit3.Text:=floattostr(n2);
If (n3>n2) and (n3>n1) then
Edit3.Text:=floattostr(n3);
End;
Procedure tform1.norm3;
Var
N:extended;
Begin
N:=sqrt(sqr(strtofloat(stringgrid2.Cells[0,0]))+sqr(strtofloat(stringgrid2.Cells[0,1]))+sqr(strtofloat(stringgrid2.Cells[0,2]))+
Sqr(strtofloat(stringgrid2.Cells[1,0]))+sqr(strtofloat(stringgrid2.Cells[1,1]))+sqr(strtofloat(stringgrid2.Cells[1,2]))+
Sqr(strtofloat(stringgrid2.Cells[2,0]))+sqr(strtofloat(stringgrid2.Cells[2,1]))+sqr(strtofloat(stringgrid2.Cells[2,2])));
Edit4.Text:=floattostr(n);
End;
Procedure tform1.norm4;
Var
Max:extended;
N:array[0..2,0..2] of extended;
Begin
For x:=0 to StringGrid2.ColCount-1 do
For y:=0 to StringGrid2.RowCount-1 do
N[x, y]:=strtofloat(StringGrid2.Cells[x, y]);
Max:=n[0,0];
For x:=0 to StringGrid2.ColCount-1 do
For y:=0 to StringGrid2.RowCount-1 do
If max<n[x, y] then
Max:=n[x, y];
Edit5.Text:=floattostr(max);
End;
-------------
Procedure TForm1.FormCreate(Sender: TObject);
Begin
StringGrid1.Cells[0,0]:='-0,9';
StringGrid1.Cells[1,0]:='3,1';
StringGrid1.Cells[2,0]:='-0,2';
StringGrid1.Cells[0,1]:='-0,4';
StringGrid1.Cells[1,1]:='-2,5';
StringGrid1.Cells[2,1]:='3,2';
StringGrid1.Cells[0,2]:='1,1';
StringGrid1.Cells[1,2]:='-1,5';
StringGrid1.Cells[2,2]:='-3,1';
StringGrid3.Cells[0,0]:='1';
StringGrid3.Cells[1,0]:='0';
StringGrid3.Cells[2,0]:='0';
StringGrid3.Cells[0,1]:='0';
StringGrid3.Cells[1,1]:='1';
StringGrid3.Cells[2,1]:='0';
StringGrid3.Cells[0,2]:='0';
StringGrid3.Cells[1,2]:='0';
StringGrid3.Cells[2,2]:='1';
End;
Procedure TForm1.RadioGroup1Click(Sender: TObject);
Begin
Case RadioGroup1.ItemIndex of
0: begin
GroupBox4.Visible:=true;
GroupBox5.Visible:=true;
Stringgrid4.Visible:=true;
Button1.Visible:=true;
GroupBox6.Visible:=false;
GroupBox7.Visible:=false;
Button2.Visible:=false;
GroupBox8.Visible:=false;
GroupBox9.Visible:=false;
Button3.Visible:=false;
Button4.Visible:=false;
GroupBox10.Visible:=false;
Edit1.Visible:=false;
Button5.Visible:=false;
Label1.Visible:=false;
Memo1.Visible:=false;
End;
1:begin
Try
------------------------------Вычисляем дополнения ----------------------------------
G11:=strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[1,2]);
G12:=strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[0,2]);
G13:=strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[1,2])-strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[0,2]);
G21:=strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[1,2]);
G22:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[0,2]);
G23:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[1,2])-strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[0,2]);
G31:=strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[2,1])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[1,1]);
G32:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[2,1])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[0,1]);
G33:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[1,1])-strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[0,1]);
------------------------------Вычислили дополнения ----------------------------------
StringGrid5.Cells[0,0]:=floattostr(g11);
StringGrid5.Cells[1,0]:=floattostr(-g21);
StringGrid5.Cells[2,0]:=floattostr(g31);
StringGrid5.Cells[0,1]:=floattostr(-g12);
StringGrid5.Cells[1,1]:=floattostr(g22);
StringGrid5.Cells[2,1]:=floattostr(-g32);
StringGrid5.Cells[0,2]:=floattostr(g13);
StringGrid5.Cells[1,2]:=floattostr(-g23);
StringGrid5.Cells[2,2]:=floattostr(g33);
If stringGrid5.cells[1,1]='' then
MessageBox(0,'Сделайте предыдущее действие','Внимание',MB_OK or MB_iconinformation);
Memo1.visible:=true;
Memo1.Clear;
Memo1.lines. Add('Для того, чтобы вычислить обратную матрицу, необходимо разделить каждый член полученной транспонированой матрицы на определитель исходной');
GroupBox6.Visible:=true;
GroupBox7.Visible:=true;
Button2.Visible:=true;
GroupBox4.Visible:=false;
GroupBox5.Visible:=false;
Stringgrid4.Visible:=false;
Button1.Visible:=false;
GroupBox8.Visible:=false;
GroupBox9.Visible:=false;
Button3.Visible:=false;
GroupBox10.Visible:=false;
Button4.Visible:=false;
Edit1.Visible:=true;
Button5.Visible:=true;
Label1.Visible:=true;
Except
MessageBox(0,'Сделайте предыдущее действие','Внимание',MB_OK or MB_iconinformation);
End
End;
2: begin
GroupBox8.Visible:=true;
GroupBox9.Visible:=true;
Button3.Visible:=true;
GroupBox10.Visible:=false;
Button4.Visible:=false;
Edit1.Visible:=false;
Button5.Visible:=false;
Label1.Visible:=false;
If stringGrid7.cells[1,1]='' then
MessageBox(0,'Сделайте предидущее действие','Внимание',MB_OK or MB_iconinformation);
Memo1.visible:=false;
End;
3: begin
GroupBox4.Visible:=true;
Button4.Visible:=true;
GroupBox9.Visible:=true;
GroupBox5.Visible:=false;
GroupBox6.Visible:=false;
GroupBox8.Visible:=false;
GroupBox10.Visible:=true;
Edit1.Visible:=false;
Button5.Visible:=false;
Label1.Visible:=false;
If stringGrid8.cells[1,1]='' then
MessageBox(0,'Сделайте предидущее действие','Внимание',MB_OK or MB_iconinformation);
Memo1.visible:=false;
End;
End;
End;
Procedure TForm1.Button6Click(Sender: TObject);
Var
Btn:integer;
Begin
Btn:=messageBox(0,'Закрыть программу.','Внимание',mb_YESNO);
If btn=IDYes then
Close;
End;
{вычитание матриц вывод E-A}
Procedure TForm1.Button1Click(Sender: TObject);
Begin
For x:=0 to StringGrid4.ColCount-1 do
For y:=0 to StringGrid4.RowCount-1 do
StringGrid4.Cells[x, y]:=floattostr(strtofloat(StringGrid3.Cells[x, y])-strtofloat(StringGrid1.Cells[x, y]));
End;
Procedure TForm1.Button2Click(Sender: TObject);
Begin
If edit1.text='' then
MessageBox(0,'Сначала вычислите определитель матрицы.','Внимание',MB_OK or MB_iconinformation)
Else
Try
For x:=0 to StringGrid6.ColCount-1 do
For y:=0 to StringGrid6.RowCount-1 do
StringGrid6.Cells[x, y]:=floattostr( strtofloat(StringGrid5.Cells[x, y])/(strtofloat(stringgrid4.Cells[0,0])*(strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[1,2])) -
Strtofloat(stringgrid4.Cells[1,0])*(strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[0,2])) +
Strtofloat(stringgrid4.Cells[2,0])*(strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[1,2])-strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[0,2]))));
Except
MessageBox(0,'Сделайте предидущее действие','Внимание',MB_OK or MB_iconinformation);
End;
For x:=0 to StringGrid7.ColCount-1 do
For y:=0 to StringGrid7.RowCount-1 do
StringGrid7.Cells[x, y]:=StringGrid6.Cells[x, y];
End;
{определитель матрицы}
Procedure TForm1.Button5Click(Sender: TObject);
Begin
Try
Edit1.Text:= floattostr(strtofloat(stringgrid4.Cells[0,0])*(strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[2,2])-
Strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[1,2])) -
Strtofloat(stringgrid4.Cells[1,0])*(strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[2,2])-
Strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[0,2])) +
Strtofloat(stringgrid4.Cells[2,0])*(strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[1,2])-
Strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[0,2])));
Except
MessageBox(0,'Нет матрицы. Сделайте предидущее действие.','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Button3Click(Sender: TObject);
Begin
Try
For x:=0 to StringGrid8.ColCount-1 do
For y:=0 to StringGrid8.RowCount-1 do
StringGrid8.Cells[x, y]:=floattostr(strtofloat(StringGrid7.Cells[x, y])*2);
Except
MessageBox(0,'Сделайте предидущее действие','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Button4Click(Sender: TObject);
Begin
Try
For x:=0 to StringGrid9.ColCount-1 do
For y:=0 to StringGrid9.RowCount-1 do
StringGrid9.Cells[x, y]:=floattostr(strtofloat(StringGrid3.Cells[x, y])-strtofloat(StringGrid8.Cells[x, y]));
Except
MessageBox(0,'Сделайте предидущее действие','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.SpeedButton1Click(Sender: TObject);
Begin
For x:=0 to StringGrid4.ColCount-1 do
For y:=0 to StringGrid4.RowCount-1 do
StringGrid4.Cells[x, y]:=floattostr(strtofloat(StringGrid3.Cells[x, y])-strtofloat(StringGrid1.Cells[x, y]));
------------------------------Вычисляем дополнения ----------------------------------
G11:=strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[1,2]);
G12:=strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[0,2]);
G13:=strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[1,2])-strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[0,2]);
G21:=strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[1,2]);
G22:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[0,2]);
G23:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[1,2])-strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[0,2]);
G31:=strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[2,1])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[1,1]);
G32:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[2,1])-strtofloat(stringgrid4.cells[2,0])*strtofloat(stringgrid4.cells[0,1]);
G33:=strtofloat(stringgrid4.cells[0,0])*strtofloat(stringgrid4.cells[1,1])-strtofloat(stringgrid4.cells[1,0])*strtofloat(stringgrid4.cells[0,1]);
------------------------------Вычислили дополнения ----------------------------------
StringGrid5.Cells[0,0]:=floattostr(g11);
StringGrid5.Cells[1,0]:=floattostr(-g21);
StringGrid5.Cells[2,0]:=floattostr(g31);
StringGrid5.Cells[0,1]:=floattostr(-g12);
StringGrid5.Cells[1,1]:=floattostr(g22);
StringGrid5.Cells[2,1]:=floattostr(-g32);
StringGrid5.Cells[0,2]:=floattostr(g13);
StringGrid5.Cells[1,2]:=floattostr(-g23);
StringGrid5.Cells[2,2]:=floattostr(g33);
For x:=0 to StringGrid7.ColCount-1 do
For y:=0 to StringGrid7.RowCount-1 do
StringGrid7.Cells[x, y]:=floattostr( strtofloat(StringGrid5.Cells[x, y])/(strtofloat(stringgrid4.Cells[0,0])*(strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[1,2])) -
Strtofloat(stringgrid4.Cells[1,0])*(strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[2,2])-strtofloat(stringgrid4.cells[2,1])*strtofloat(stringgrid4.cells[0,2])) +
Strtofloat(stringgrid4.Cells[2,0])*(strtofloat(stringgrid4.cells[0,1])*strtofloat(stringgrid4.cells[1,2])-strtofloat(stringgrid4.cells[1,1])*strtofloat(stringgrid4.cells[0,2]))));
For x:=0 to StringGrid8.ColCount-1 do
For y:=0 to StringGrid8.RowCount-1 do
StringGrid8.Cells[x, y]:=floattostr(strtofloat(StringGrid7.Cells[x, y])*2);
For x:=0 to StringGrid9.ColCount-1 do
For y:=0 to StringGrid9.RowCount-1 do
StringGrid2.Cells[x, y]:=floattostr(strtofloat(StringGrid3.Cells[x, y])-strtofloat(StringGrid8.Cells[x, y]));
End;
Procedure TForm1.SpeedButton2Click(Sender: TObject);
Begin
Try
Norm1;
Norm2;
Norm3;
Norm4;
Button7.Visible:=true;
Memo2.Visible:=true;
If (abs(strtofloat(edit3.Text))<1) or (abs(strtofloat(edit3.Text))<1) or (abs(strtofloat(edit4.Text))<1) or (abs(strtofloat(edit5.Text))<1) then
Begin
Memo2.Clear;
Memo2.lines. Add('Данная система асимптотически устойчива.');
End
Else
Begin
Memo2.Clear;
Memo2.lines. Add('Данная система асимптотически не устойчива. Необходимо возвести в квадрат каждый член матрицы и вычислить нормы по новой, до тех пор пока хотя бы одна не станет меньше единицы.');
End
Except
MessageBox(0,'Сначала вычислите матрицу.','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Image3Click(Sender: TObject);
Begin
Try
Norm1;
Except
MessageBox(0,'Сначала вычислите матрицу.','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Image4Click(Sender: TObject);
Begin
Try
Norm2;
Except
MessageBox(0,'Сначала вычислите матрицу.','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Image1Click(Sender: TObject);
Begin
Try
Norm3;
Except
MessageBox(0,'Сначала вычислите матрицу.','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Image2Click(Sender: TObject);
Begin
Try
Norm4;
Except
MessageBox(0,'Сначала вычислите матрицу.','Внимание',MB_OK or MB_iconinformation);
End;
End;
Procedure TForm1.Button7Click(Sender: TObject);
Begin
Try
For x:=0 to StringGrid2.ColCount-1 do
For y:=0 to StringGrid2.RowCount-1 do
StringGrid2.Cells[x, y]:=floattostr(sqr(strtofloat(StringGrid2.Cells[x, y])));
Except
MessageBox(0,'Сделайте предидущее действие','Внимание',MB_OK or MB_iconinformation);
End;
End;
End.
Приложение 3
Листинг вычисления в программе MatLab.
>> A=[-0.9 3.1 -0.2; -0.4 -2.5 3.2; 1.1 -1.5 -3.1]
A =
- -0.9000 3.1000 -0.2000 -0.4000 -2.5000 3.2000 1.1000 -1.5000 -3.1000
>> C=E-A
C =
- 1.9000 -3.1000 0.2000 0.4000 3.5000 -3.2000 -1.1000 1.5000 4.1000
>> q=det(C)
Q =
31.4470
>> A12=[C(2,1) C(2,3); C(3,1) C(3,3)]
A12 =
- 0.4000 -3.2000 -1.1000 4.1000
>> A13=[C(2,1) C(2,2); C(3,1) C(3,2)]
A13 =
- 0.4000 3.5000 -1.1000 1.5000
>> A21=[C(1,2) C(1,3); C(3,2) C(3,3)]
A21 =
- -3.1000 0.2000 1.5000 4.1000
>> A22=[C(1,1) C(1,3); C(3,1) C(3,3)]
A22 =
- 1.9000 0.2000 -1.1000 4.1000
>> A23=[C(1,1) C(1,2); C(3,1) C(3,2)]
A23 =
- 1.9000 -3.1000 -1.1000 1.5000
>> A31=[C(1,2) C(1,3); C(2,2) C(2,3)]
A31 =
- -3.1000 0.2000 3.5000 -3.2000
>> A32=[C(1,1) C(1,3); C(2,1) C(2,3)]
A32 =
- 1.9000 0.2000 0.4000 -3.2000
>> A33=[C(1,1) C(1,2); C(2,1) C(2,2)]
A33 =
- 1.9000 -3.1000 0.4000 3.5000
>> G=[det(A11) - det(A12) det(A13); - det(A21) det(A22) - det(A23); det(A31) - det(A32) det(A33)]
G =
- 19.1500 1.8800 4.4500 13.0100 8.0100 0.5600 9.2200 6.1600 7.8900
>> T=[G(1,1) G(2,1) G(3,1); G(1,2) G(2,2) G(3,2); G(1,3) G(2,3) G(3,3)]
T =
- 19.1500 13.0100 9.2200 1.8800 8.0100 6.1600 4.4500 0.5600 7.8900
>> O=T/q {Обратная матрица}
- O = 0.6090 0.4137 0.2932 0.0598 0.2547 0.1959 0.1415 0.0178 0.2509
>> B=E-2*O
B =
- -0.2179 -0.8274 -0.5864 -0.1196 0.4906 -0.3918 -0.2830 -0.0356 0.4982
>> norm(B,1)
Ans =
1.4764
>> norm(B)
Ans =
1.0686
>> norm(B, inf)
Ans =
1.6317
>> W=B^2 ///Возводим в квадрат
W =
- 0.3124 -0.2047 0.1598 0.0783 0.3535 -0.3173 -0.0751 0.1990 0.4281
>> norm(W,1)
Ans =
0.9052
>> norm(W)
Ans =
0.5813
>> norm(W, inf)
Ans =
0.7491
>> O*C
Ans =
- 1.0000 0.0000 0 0 1.0000 0 0 0 1.0000
Приложение 4
Проверка нахождения обратной матрицы
Для того чтобы проверить правильность нахождения обратной матрицы необходимо получить единичную матрицу при умножении начальной матрицы на ее обратную.
G*G-1=E
* =
Алгоритм умножения матриц таков: умножаем первую строчку первой матрицы на первый столбец второй матрицы по формуле:
Сij=Ai1*B1j+ Ai2*B2j+ Ai3*B3j+ . . . + Ain*Bnj
- 1,9*0,609-3,1*0,058+0,2*0,1415=1 1,9*0,4137-3,1*0,2547+0,2*0, 0178=0 1.9 *0.2932-3.1*0.1959+0.2*0.2509=0 0.4 *0.609+3.5*0.0598-3.2*0.1415=0 0.4 *0.4137+3.5*0.2547-3.2*0.0178=1 0.4 *0.2932+3.5*0.1959-3.2*0.2509=0 -1.1*0.609+1.5*0.0598+4.1*0.1415=0 -1.1*0.4137+1.5*0.2547+4.1*0.0178=0 -1.1*0.2932+1.5*0.1959+4.1*0.2509=1
Похожие статьи
-
Из данной матрицы А необходимо вычислить матрицу В по формуле . Вычисляем поэтапно данное выражение. Вычитаем из единичной матрицы Е исходную матрицу А...
-
Приведем систему ограничений к каноническому виду, для этого необходимо неравенства преобразовать в равенства, с добавлением дополнительных переменных....
-
Решим прямую задачу линейного программирования симплексным методом, с использованием симплексной таблицы. Определим максимальное значение целевой...
-
Известно оптимальное решение X*=(0;0;1;1) задачи линейного программирования: Составьте двойственную задачу и найдите ее оптимальное решение по теореме...
-
Динамическое программирование (ДП) - Методики решения задач линейного и нелинейного программирования
Динамическими называются задачи экономики, организации и управления, в которых необходимо распределять ресурсы на каждом этапе какого - либо промежутка...
-
Определение . Алгебраическим дополнением минора матрицы называется его Дополнительный минор , умноженный на (-1) в степени, равной сумме номеров строк и...
-
Метод кусочно-линейной аппроксимации. В нашей задаче есть такая величина, как коэффициент увеличения затрат при нагрузке, который не использовался нами...
-
Процедура решения задач минимизации издержек - Модель оценки издержек в системе складского комплекса
Пусть Z есть вектор, компонентами которого являются все переменные, по которым проводится оптимизация, то есть все компоненты вектора Z . В соответствии...
-
В разделе 1 курсовой работы требуется: Определить количество закупаемого заданным филиалом фирмы сырья у каждого АО, (xj), максимизируя прибыль филиала....
-
Нелинейное программирование - Методики решения задач линейного и нелинейного программирования
Задача математического программирования называется нелинейной, если нелинейны ограничения или целевая функция. Задачи нелинейного программирования бывают...
-
При решении некоторых задач линейного программирования бывает необходимо получить целочисленное решение, которое находится методами целочисленного...
-
Второй раздел курсовой работы посвящен особенностям постановки и решения общей задачи линейного программирования, а именно, транспортной задаче (ТЗЛП)....
-
Вид сырья Запас сырья Количество единиц сырья, идущих на изготовление единицы продукции P1 P2 P3 P4 S1 4 1 1 1 3 S2 18 2 4 6 1 Прибыль от единицы...
-
Определители (детерминанты) - Методы решения системы линейных уравнений
Определение. Определителем квадратной матрицы А= называется число, которое может быть вычислено по элементам матрицы по формуле: Det A = , где (1) М1к -...
-
Матрицы и определители - Методы решения системы линейных уравнений
Определение. Матрицей размера mn, где m - число строк, n - число столбцов, называется таблица чисел, расположенных в определенном порядке. Эти числа...
-
Задачей линейного программирования (ЛП) называется задача минимизации или максимизации линейного функционала при линейных ограничениях. В литературе...
-
1. Название проекта: "Математические модели в экономике". 2. Руководитель: учитель математики Тыкоцкая Л. И. 3. Учебные предметы: математика, экономика....
-
Наша группа работала над учебным межпредметным проектом "Математические модели в рыночной экономике". Мы покажем применение в экономике систем уравнений....
-
Основная задача линейного программирования: Найти неотрицательное решение системы ограничений обеспечивающее максимум (минимум) целевой функции. Чтобы...
-
Руководитель проекта сообщает тему и цель проекта, знакомит с исполнителями проекта. Акцентирует внимание учащихся на том, что проект носит обучающий...
-
По продаже системного блока компьютера на базе процессора Celeron в одном из магазинов фирмы N за месяц сложилась следующая ситуация: Цена (тыс. рублей)...
-
При неизменности всех прочих факторов снижение цены ведет к соответствующему увеличению спроса и, наоборот, при прочих равных условиях увеличение цены...
-
Исследуем на экстремум функцию: 1. С помощью необходимого существования экстремума, т. е. из системы Найдем координаты стационарных (критических) точек:...
-
Так как целевая функция не является линейной, то эта задача является задачей нелинейного программирования. Найдем ее решение, используя геометрическую...
-
Математическая модель задачи нелинейного программирования (ЗНП) (*) Для ЗНП в отличие от Задачи Линейного Программирования (ЗЛП) нет единого метода...
-
Уравнение графический спрос равновесие С позиций воспитательного аспекта целью данного проекта является помощь учащимся в понимании жизненной...
-
РЕШЕНИЕ ЗАДАЧИ О КОММИВОЯЖЕРЕ МЕТОДОМ ВЕТВЕЙ И ГРАНИЦ: ОСНОВНАЯ СХЕМА - Задача коммивояжера
Пусть - конечное множество и - вещественно-значная функция на нем; требуется найти минимум этой функции и элемент множества, на котором этот минимум...
-
Любая правильная рациональная дробь P(x)/Q(x) может быть единственным образом представлена в виде суммы простейших рациональных дробей. Для этого прежде...
-
Основные формулы интегрирования (табличные интегралы) - Методы решения системы линейных уравнений
1. ?dx = x+C 2. ?xNDx = (xN+1/(n+1))+C (n?-1) 3. ?(dx/x) = ln(x)+C 4. ?aXDx = aXLn(a)+C 5. ?eXDx = eX +C 6. ?sin(x)dx = -...
-
Элементарные преобразования, Миноры - Методы решения системы линейных уравнений
Определение. Элементарными преобразованиями матрицы назовем следующие преобразования: 1) умножение строки на число, отличное от нуля; 2) прибавление к...
-
Покупательский спрос математический программирование Математическое программирование -- область математики, разрабатывающая теорию и численные методы...
-
Свойства операции умножения матриц - Методы решения системы линейных уравнений
1)Умножение матриц не коммутативно, т. е. АВ ВА даже если определены оба произведения. Однако, если для каких - либо матриц соотношение АВ=ВА...
-
Литература - Решение оптимизационных экономических задач методами линейного программирования
1. Карпелович Ф. И., Садовский Л. Е. Элементы линейной алгебры и линейного программирования. - М.: Физматгиз, 1963. 2. Коротков М., Гаврилов М. "Основы...
-
Системы линейных уравнений - Методы решения системы линейных уравнений
Системой m линейных уравнений с n неизвестными называется система вида Где aIj и bI (i=1,...,m; b=1,...,n) - некоторые известные числа, а x1,...,xN -...
-
При написании программ численного интегрирования желательно, чтобы для любой функции распределение узлов являлось оптимальным или близким к нему. Однако...
-
Математическая модель транспортной задачи: F = ??cIjXIj, (1) При условиях: ?xIj = aI, i = 1,2,..., m, (2) ?xIj = bJ, j = 1,2,..., n, (3)...
-
Необходимость введения нового ограничения может возникнуть, например, когда первоначально для сокращения затрат машинного времени некоторые интуитивно...
-
Оптимальное решение модели. - Методика решения задачи целочисленного программирования
Рис. 1 Шаг 1. Исходную задачу 1 заносим в дерево задач. В качестве исходного допустимого решения берем: x1=x2=x3=0. Соответствующее значение целевой...
-
Решение систем линейных уравнений
Постановка задачи Решить Систему линейных уравнений при помощи метода Гаусса и через метод Крамера (вариант 82- 2) Теоретическая часть Матрица -- Таблица...
-
Экономико-математические методы и моделирование в землеустройстве позволяют решать большой круг задач, связанных с оптимизацией территориальной...
Результат решения задачи - Методика оценки устойчивости линейных динамических систем по критерию В. И. Зубова