Методика оценки устойчивости линейных динамических систем по критерию В.И. Зубова
Характеристики основных элементов цифровых и непрерывных систем управления. Исследование устойчивости линейных систем автоматического управления по алгебраическим и частотным критериям. Рассмотрение основ метода функционально преобразованных матриц.
Рубрика | Экономико-математическое моделирование |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.12.2014 |
Размер файла | 918,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Введение
Цель расчётно-графической работы по «Основы теории управления» состоит в обеспечении условий углубленного усвоения лекционного материала, приобретения навыков анализа и синтеза систем управления с использованием ЭВМ.
Темы расчётно-графических работ охватывают весь спектр тем, представленных в рабочей программе по данному курсу: характеристики основных элементов цифровых и непрерывных систем управления; исследование частотных характеристик систем автоматического управления; исследование устойчивости линейных систем автоматического управления по алгебраическим и частотным критериям; изучение методики расчета оптимального управления.
Расчётно-графическая работа выполняется в соответствии с выданным заданием и завершается оформлением отчета.
цифровой матрица алгебраический
1. Постановка задачи
Краткая теория
Цель работы.
Изучение методики оценки устойчивости линейных динамических систем по критерию В.И.Зубова, получение практических навыков в применении этого критерия.
Содержание работы
а) Изучение теоретических основ метода функционально преобразованных матриц и анализа и устойчивости систем на его основе.
б) Анализ устойчивости системы по критерию В.И. Зубова.
в) Выводы.
Теоретические основы работы
Поведение некоторой САУ описывается системой
(5.1)
где A - матрица коэффициентов размера n x n , - n-мерный вектор-столбец фазовых координат, F(t) - вектор - функция внешних воздействий (n x 1).
Критерий устойчивости В.И. Зубова, основан на методе функционально преобразованных матриц [1] и позволяет решить задачу определения устойчивости линейных динамических систем по исходной матрице А без определения коэффициентов характеристического уравнения. Критерий формулируется следующим образом [1]: для того, чтобы система (5.1) была асимптотически устойчивой, необходимо и достаточно, чтобы для матрицы
(5.2)
выполнялось условие
при , (5.3)
где 0 - нулевая матрица.
В работе [1] показано, что данный критерий справедлив во всех случаях, если матрица (Е - А) неособая, т.е, когда det(Е-А)0.
Изучение степени матрицы В (k = 1,2,3,...) следует вести до тех пор, пока не будет соблюдаться неравенство
где - элемент матрицы Вk ().
Более экономичная оценка возможна на основе рассмотрения матричных норм. Так, нормы матрицы В имеют вид:
(5.4)
(5.5)
(5.6)
(5.7)
Для того, чтобы система (5.1) была асимптотически устойчива и при , достаточно, чтобы любая из норм (5.4)-(5.7) была меньше единицы, т.е. достаточно выполнения условия
(5.8)
Однако, если условие (5.8): не соблюдается, то из этого не следует, что исследуемая точка пространства параметров системы является неустойчивой. Вопрос об устойчивости должен быть исследован дополнительно путём рассмотрения степеней матрицы Bk.
2. Порядок выполнения работы
Из данной матрицы А необходимо вычислить матрицу В по формуле
.
Вычисляем поэтапно данное выражение.
Вычитаем из единичной матрицы Е исходную матрицу А
Находим дополнения для каждого элемента полученной матрицы и составляем матрицу дополнений.
Транспонируем её и делим каждый элемент на определитель исходной матрицы (Е-А) и получаем обратную.
Отнимаем от единичной матрицы обратную умноженную на число 2. Тем самым получаем формулу
После нахождения матрицы В необходимо вычислить её нормы по формулам приведённым в теоретическом описании.
Проверяем условием асимптотической устойчивости системы.
Если , то система устойчива.
Если соотношения не выполняется, то матрицу В следует возводить в степень и рассматривать нормы последовательных степеней: ||В2||, ||В4||,…,||Вk||. Если при некотором фиксированном k какая-либо из норм стала меньше единицы ||Вk||<1, то условие устойчивости выполняется.
3. Алгоритм метода
Для САУ, описываемой системой линейных дифференциальных уравнений вида (5.1), сконструировать матрицу В вида (5.2). Для полученной матрицы В определить нормы (5.4)-(5.7) и проверить выполнение условия (5.8). Если , то исследуемая точка пространства параметров принадлежит области устойчивости. Если соотношения (5.8) не выполняется, то матрицу В следует возводить в степень и рассматривать нормы последовательных степеней: ||В2||, ||В4||,…,||Вk||. Если при некотором фиксированном k какая-либо из норм стала меньше единицы ||Вk||<1, то условие устойчивости (5.3) выполняется.
4. Результат решения задачи
Из данной матрицы А необходимо вычислить матрицу В по формуле . Результат решения приведён ниже
А=
Действия при вычислении формулы: вычитаем из единичной матрицы Е исходную матрицу А. Обозначим как матрица 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
Размещено на Allbest.ru
Подобные документы
Линеаризация математической модели регулирования. Исследование динамических характеристик объекта управления по математической модели. Исследование устойчивости замкнутой системы управления линейной системы. Определение устойчивости системы управления.
курсовая работа [1,6 M], добавлен 07.08.2013Методика формирования математической модели в операторной форме, а также в форме дифференциального уравнения и в пространстве состояний. Построение графа системы. Оценка устойчивости, управляемости, наблюдаемости системы автоматического управления.
контрольная работа [200,4 K], добавлен 03.12.2012Представление матрицы в виде произведения унитарной и верхнетреугольной матрицы. Листинг программы. Зависимость погрешности от размерности матрицы на примере метода Холецкого. Приближенные методы решения алгебраических систем. Суть метода Зейделя.
контрольная работа [630,5 K], добавлен 19.05.2014Особенности создания непрерывных структурированных моделей. Схема выражения передаточной функции. Методы интегрирования систем дифференциальных уравнений. Структурная схема систем управления с учетом запаздывания в ЭВМ. Расчет непрерывной SS-модели.
курсовая работа [242,6 K], добавлен 16.11.2009Классификация систем (по отношению ко времени и среде, обусловленности поведения, сложности), их основные свойства. Виды процессов в динамических системах. Кибернетические системы и законы их функционирования. Особенности нелинейных динамических систем.
презентация [204,4 K], добавлен 19.12.2013Построение асимптотических логарифмических амплитудно- и фазочастотных характеристик. Расчет оптимального плана и экстремального значения функции цели с помощью симплекс-метода. Нахождение экстремума заданной функции с учетом системы ограничений.
курсовая работа [3,2 M], добавлен 25.05.2015Методы оценки эффективности систем управления. Использование экспертных методов. Мнение экспертов и решение проблемы. Этапы подготовки к проведению экспертизы. Подходы к оценке компетентности экспертов. Зависимость достоверности от количества экспертов.
реферат [43,2 K], добавлен 30.11.2009Особенности управления состоянием сложных систем. Способы нахождения математической модели объекта (системы) методом площадей в виде звена 2-го и 3-го порядков. Формы определения устойчивости ЗСАУ. Нахождение переходной характеристики ЗСАУ и основных ПКР.
курсовая работа [112,5 K], добавлен 04.02.2011Понятие системы управления, ее назначение и целевые функции. Суть параметрического метода исследования на основе научного аппарата системного анализа. Проведение исследования системы управления на предприятии "Атлант", выявление динамики объема продаж.
курсовая работа [367,1 K], добавлен 09.06.2010Анализ влияния шага на ошибки интегрирования и число итераций, а также сравнение решения обычных и жестких систем. Решение линейных систем алгебраических уравнений методом Эйлера итерационным методом с помощью составления программы на языке MatLAB.
контрольная работа [474,2 K], добавлен 19.05.2014