Методика оценки устойчивости линейных динамических систем по критерию В.И. Зубова

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

Рубрика Экономико-математическое моделирование
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.