МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программная реализация модального управления для линейных стационарных систем

    Программная реализация модального управления для линейных стационарных систем

    Курсовая работа:

    «Программная реализация модального управления

    для линейных стационарных систем»

    Постановка задачи:

    1. Для объекта управления с математическим описанием

    [pic], (1) [pic]- задано,

    где [pic] - n-мерный вектор состояния, [pic],

    [pic]- начальный вектор состояния,

    [pic]- скалярное управление,

    [pic]- матрица действительных коэффициентов,

    [pic]- матрица действительных коэффициентов,

    найти управление в функции переменных состояния объекта, т.е.

    [pic], (2)

    где[pic]- матрица обратной связи, такое, чтобы замкнутая система была

    устойчивой.

    2. Корни характеристического уравнения замкнутой системы

    [pic] (3)

    должны выбираться по усмотрению (произвольно) с условием устойчивости

    системы (3).

    Задание:

    1. Разработать алгоритм решения поставленной задачи.

    2. Разработать программу решения поставленной задачи с интерактивным

    экранным интерфейсом в системах Borland Pascal, Turbo Vision, Delphi - по

    выбору.

    3. Разработать программу решения систем дифференциальных уравнений (1) и

    (3) с интерактивным экранным интерфейсом.

    4. Разработать программу графического построения решений систем (1) и (3) с

    интерактивным экранным интерфейсом.

    Введение

    Наряду с общими методами синтеза оптимальных законов управления для

    стационарных объектов всё большее применение находят методы, основанные на

    решении задачи о размещении корней характеристического уравнения замкнутой

    системы в желаемое положение. Этого можно добиться надлежащим выбором

    матрицы обратной связи по состоянию. Решение указанной задачи является

    предметом теории модального управления (термин связан с тем, что корням

    характеристического уравнения соответствуют составляющие свободного

    движения, называемые модами).

    Алгоритм модального управления.

    Соглашения:

    . Задаваемый объект управления математически описывается уравнением

    [pic], (1)

    где [pic] и [pic] - матрицы действительных коэффициентов,

    [pic] - n-мерный вектор состояния

    [pic]- скалярное управление,

    [pic] - порядок системы (1).

    . Обратная связь по состоянию имеет вид

    [pic], (2)

    где[pic]- матрица обратной связи.

    . Система с введенной обратной связью описывается уравнением

    [pic] (3)

    . Характеристическое уравнение системы (1) имеет вид

    [pic] (4)

    . Характеристическое уравнение системы (3) с задаваемыми (желаемыми)

    корнями [pic]имеет вид

    [pic] (5)

    Алгоритм:

    1. Для исходной системы (1) составляем матрицу управляемости

    [pic]

    2. Обращаем матрицу [pic], т.е. вычисляем [pic].

    Если [pic] не существует (т.е. матрица [pic] - вырожденная), то

    прекращаем вычисления: полное управление корнями характеристического

    уравнения (5) не возможно.

    3. Вычисляем матрицу [pic]

    4. Составляем матрицу

    [pic]

    5. Вычисляем матрицу, обратную матрице [pic], т.е. [pic]

    6. Вычисляем матрицу [pic] - матрицу [pic] в канонической форме фазовой

    переменной:

    [pic]

    где [pic]- коэффициенты характеристического уравнения (4).

    Матрица [pic] в канонической форме имеет вид

    [pic]

    7. Составляем вектор [pic] , элементам которого являются коэффициенты

    характеристического уравнения (4), т.е. [pic], [pic],

    где [pic] - элементы матрицы [pic].

    8. Находим коэффициенты характеристического уравнения (5) (см. пояснения) и

    составляем из них вектор [pic].

    9. Вычисляем вектор [pic].

    [pic] - искомая матрица обратной связи системы (3), но она вычислена для

    системы, матрицы которой заданы в канонической форме фазовой переменной

    ([pic] и [pic]).

    10. Для исходной системы (3) матрица обратной связи получается по формуле

    [pic]

    Матрица [pic] - искомая матрица обратной связи.

    Пояснения к алгоритму:

    В данной работе рассматривается случай, когда управление единственно и

    информация о переменных состояния полная. Задача модального управления

    тогда наиболее просто решается, если уравнения объекта заданы в

    канонической форме фазовой переменной.

    Так как управление выбрано в виде линейной функции переменных состояния

    [pic], где [pic] является матрицей строкой [pic]. В таком случае уравнение

    замкнутой системы приобретает вид [pic]. Здесь

    [pic]

    [pic]

    Характеристическое уравнение такой замкнутой системы будет следующим

    [pic]

    Поскольку каждый коэффициент матрицы обратной связи [pic] входит только в

    один коэффициент характеристического уравнения, то очевидно, что выбором

    коэффициентов [pic] можно получить любые коэффициенты характеристического

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

    Если же желаемое характеристическое уравнение имеет вид

    [pic],

    то коэффициенты матрицы обратной связи вычисляются с помощью соотношений:

    [pic]

    Если при наличии одного управления нормальные уравнения объекта заданы не

    в канонической форме (что наиболее вероятно), то, в соответствии с пунктами

    №1-6 алгоритма, от исходной формы с помощью преобразования [pic] или [pic]

    нужно перейти к уравнению [pic] в указанной канонической форме.

    Управление возможно, если выполняется условие полной управляемости (ранг

    матрицы управляемости M должен быть равен n). В алгоритме об управляемости

    системы судится по существованию матрицы [pic]: если она существует, то

    ранг матрицы равен ее порядку (n). Для объекта управления с единственным

    управлением матрица [pic] оказывается также единственной.

    Для нахождения коэффициентов [pic] характеристического уравнения (5), в

    работе используется соотношения между корнями [pic] и коэффициентами

    [pic] линейного алгебраического уравнения степени n:

    [pic], (k = 1, 2, ... , n)

    где многочлены [pic]- элементарные симметрические функции, определяемые

    следующим образом:

    [pic],

    [pic],

    [pic],

    ...

    [pic]

    где Sk - сумма всех [pic] произведений, каждое из которых содержит k

    сомножителей xj с несовпадающими коэффициентами.

    Программная реализация алгоритма.

    Текст программной реализации приведен в ПРИЛОЖЕНИИ №1. Вот несколько

    кратких пояснений.

    . Программа написана на языке Object Pascal при помощи средств Delphi 2.0,

    и состоит из следующих основных файлов:

    KursovayaWork.dpr

    MainUnit.pas

    SubUnit.pas

    Matrix.pas

    Operates.pas

    HelpUnit.pas

    OptsUnit.pas

    . KursovayaWork.dpr - файл проекта, содержащий ссылки на все формы проекта

    и инициализирующий приложение.

    . В модуле MainUnit.pas находится описание главной формы приложения, а

    также сконцентрированы процедуры и функции, поддерживаюшие нужный

    интерфейс программы.

    . Модули SubUnit.pas и Operates.pas содержат процедуры и функции,

    составляющие смысловую часть программной реализации алгоритма, т.е.

    процедуры решения задачи модально управления, процедуры решения систем

    дифференциальных уравнений, процедуры отображения графиков решений систем

    и т.д. Там также находятся процедуры отображения результатов расчетов на

    экран.

    . В модуле Matrix.pas расположено описание класса TMatrix - основа

    матричных данных в программе.

    . Модули HelpUnit.pas и OptsUnit.pas носят в программе вспомогательный

    характер.

    . Для решения систем дифференциальных уравнений использован метод Рунге-

    Кутта четвертого порядка точности с фиксированным шагом. Метод был

    позаимствован из пакета программ NumToolBox и адаптирован под новую

    модель матричных данных.

    . Обращение матриц производится методом исключения по главным диагональным

    элементам (метод Гаусса). Этот метод так же был позаимствован из

    NumToolBox и соответствующе адаптирован.

    Пориложение.

    program KursovayaWork;

    uses

    Forms,

    MainUnit in 'MainUnit.pas' {Form_Main},

    OptsUnit in 'OptsUnit.pas' {Form_Options},

    SubUnit in 'SubUnit.pas',

    Matrix in 'Matrix.pas',

    Operates in 'Operates.pas',

    HelpUnit in 'HelpUnit.pas' {Form_Help};

    {$R *.RES}

    begin

    Application.Initialize;

    Application.Title := 'Модальное управление';

    Application.CreateForm(TForm_Main, Form_Main);

    Application.CreateForm(TForm_Options, Form_Options);

    Application.CreateForm(TForm_Help, Form_Help);

    Application.Run;

    end.

    unit MainUnit;

    interface

    uses

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

    Dialogs,

    ComCtrls, Tabnotbk, Menus, StdCtrls, Spin, ExtCtrls, Buttons, Grids,

    OleCtrls, VCFImprs, GraphSvr, ChartFX {, ChartFX3};

    type

    TForm_Main = class(TForm)

    BevelMain: TBevel;

    TabbedNotebook_Main: TTabbedNotebook;

    SpinEdit_Dim: TSpinEdit;

    BitBtn_Close: TBitBtn;

    BitBtn_Compute: TBitBtn;

    StringGrid_Ap0: TStringGrid;

    StringGrid_Anp0: TStringGrid;

    StringGrid_Roots: TStringGrid;

    StringGrid_Kpp0: TStringGrid;

    StringGrid_Bp0: TStringGrid;

    RadioGroup_RootsType: TRadioGroup;

    Label_A1p0: TLabel;

    Label_Ap0: TLabel;

    Label_mBp0: TLabel;

    Label_Roots: TLabel;

    Label_Kpp0: TLabel;

    BevelLine: TBevel;

    Label_Dim: TLabel;

    StringGrid_Ap1: TStringGrid;

    StringGrid_Bp1: TStringGrid;

    Label_Ap1: TLabel;

    Label_Bp1: TLabel;

    StringGrid_Kpp1: TStringGrid;

    Label_Kpp1: TLabel;

    StringGrid_InCond: TStringGrid;

    Label_InCond: TLabel;

    Label_U: TLabel;

    Edit_U: TEdit;

    BitBtn_Options: TBitBtn;

    BitBtn_Help: TBitBtn;

    StringGrid_ABKpp1: TStringGrid;

    Label_ABKpp1: TLabel;

    Edit_W: TEdit;

    Label_w: TLabel;

    RadioGroupChart: TRadioGroup;

    ChartFX: TChartFX;

    LabelW1: TLabel;

    StringGrid_Solve1: TStringGrid;

    StringGrid_Solve2: TStringGrid;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure BitBtn_CloseClick(Sender: TObject);

    procedure BitBtn_OptionsClick(Sender: TObject);

    procedure BitBtn_ComputeClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure SpinEdit_DimChange(Sender: TObject);

    procedure StringGrid_RootsSetEditText(Sender: TObject; ACol,

    ARow: Longint; const Value: string);

    procedure RadioGroup_RootsTypeClick(Sender: TObject);

    procedure TabbedNotebook_MainChange(Sender: TObject; NewTab: Integer;

    var AllowChange: Boolean);

    procedure StringGrid_SetEditText(Sender: TObject; ACol,

    ARow: Longint; const Value: string);

    procedure BitBtn_HelpClick(Sender: TObject);

    procedure RadioGroupChartClick(Sender: TObject);

    private

    procedure FillFixedCellsInAllGrids;

    procedure FillCellsInAllGrids;

    public

    procedure BindGrids;

    procedure UnBindGrids;

    end;

    var

    Form_Main: TForm_Main;

    implementation

    uses Matrix, SubUnit, OptsUnit, Operates, CFXOCX2, HelpUnit;

    const

    DefOptions = [goFixedVertLine, goFixedHorzLine,

    goVertLine, goHorzLine,

    goColSizing, goEditing,

    goAlwaysShowEditor, goThumbTracking];

    {$R *.DFM}

    procedure TForm_Main.FillFixedCellsInAllGrids;

    var

    Order : TOrder;

    i: byte;

    Str: string;

    begin

    Order := SpinEdit_Dim.Value;

    for i := 1 to Order do

    begin

    Str := IntToStr(i);

    StringGrid_Ap0.Cells[0, i] := Str;

    StringGrid_Ap0.Cells[i, 0] := Str;

    StringGrid_Bp0.Cells[0, i] := Str;

    StringGrid_ANp0.Cells[i, 0] := Str;

    StringGrid_ANp0.Cells[0, i] := Str;

    StringGrid_Roots.Cells[i, 0] := Str;

    StringGrid_Kpp0.Cells[i, 0] := Str;

    StringGrid_Ap1.Cells[0, i] := Str;

    StringGrid_Ap1.Cells[i, 0] := Str;

    StringGrid_Bp1.Cells[0, i] := Str;

    StringGrid_ABKpp1.Cells[i, 0] := Str;

    StringGrid_ABKpp1.Cells[0, i] := Str;

    StringGrid_InCond.Cells[i, 0] := Str;

    StringGrid_Kpp1.Cells[i, 0] := Str;

    StringGrid_Solve1.Cells[i, 0] := 'X' + IntToStr(i);

    StringGrid_Solve2.Cells[i, 0] := 'X' + IntToStr(i);

    StringGrid_Solve1.Cells[0, 0] := 'Время';

    StringGrid_Solve2.Cells[0, 0] := 'Время';

    end;

    end;

    procedure TForm_Main.FillCellsInAllGrids;

    var

    Order : TOrder;

    i, j : byte;

    begin

    Order := SpinEdit_Dim.Value;

    for i := 1 to Order do

    for j := 1 to Order do

    begin

    StringGrid_Ap0.Cells[j, i] := '0';

    StringGrid_Ap0.Cells[i, i] := '1';

    StringGrid_Bp0.Cells[1, i] := '0';

    StringGrid_Roots.Cells[i, 1] := '-1';

    StringGrid_Roots.Cells[i, 2] := '0';

    StringGrid_Kpp0.Cells[i, 1] := '0';

    StringGrid_Ap1.Cells[j, i] := '0';

    StringGrid_Ap1.Cells[i, i] := '1';

    StringGrid_Bp1.Cells[1, i] := '0';

    StringGrid_ABKpp1.Cells[j, i] := '0';

    StringGrid_ABKpp1.Cells[i, i] := '1';

    StringGrid_InCond.Cells[i, 1] := '0';

    StringGrid_Kpp1.Cells[i, 1] := '0';

    end;

    FillFixedCellsInAllGrids;

    StringGrid_Roots.Cells[0, 1] := 'Re';

    StringGrid_Roots.Cells[0, 2] := 'Im';

    StringGrid_Bp1.Cells[1, 0] := '1';

    StringGrid_Bp0.Cells[1, 0] := '1';

    end;

    procedure TForm_Main.BindGrids;

    begin

    CopyGrid(StringGrid_Ap1, StringGrid_Ap0);

    CopyGrid(StringGrid_Bp1, StringGrid_Bp0);

    CopyGrid(StringGrid_Kpp1, StringGrid_Kpp0);

    StringGrid_Ap1.Options := DefOptions - [goEditing];

    StringGrid_Bp1.Options := DefOptions - [goEditing];

    StringGrid_Kpp1.Options := DefOptions - [goEditing];

    end;

    procedure TForm_Main.UnBindGrids;

    begin

    StringGrid_Ap1.Options := DefOptions;

    StringGrid_Bp1.Options := DefOptions;

    StringGrid_Kpp1.Options := DefOptions;

    end;

    procedure TForm_Main.BitBtn_CloseClick(Sender: TObject);

    begin

    Close;

    end;

    procedure TForm_Main.BitBtn_OptionsClick(Sender: TObject);

    var

    V0, V1, V2, V3: LongInt;

    LS: TCheckBoxState;

    begin

    with Form_Options do

    begin

    V0 := SpinEdit0.Value;

    V1 := SpinEdit1.Value;

    V2 := SpinEdit2.Value;

    V3 := SpinEdit3.Value;

    LS := CheckBox_Link.State;

    ShowModal;

    if ModalResult = mrCancel then

    begin

    SpinEdit0.Value := V0;

    SpinEdit1.Value := V1;

    SpinEdit2.Value := V2;

    SpinEdit3.Value := V3;

    CheckBox_Link.State := LS;

    end

    else

    if ((SpinEdit0.Value <> V0) or (SpinEdit1.Value <> V1)) or

    ((SpinEdit2.Value <> V2) or (SpinEdit3.Value <> V3)) then

    begin

    BitBtn_Compute.Enabled := True;

    case BitBtn_Compute.Tag of

    4, 5 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 4;

    6, 7 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 4;

    8, 9 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 8;

    10, 11 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 8;

    12, 13 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 12;

    14, 15 :BitBtn_Compute.Tag := BitBtn_Compute.Tag - 12;

    end;

    end;

    end;

    end;

    procedure TForm_Main.BitBtn_ComputeClick(Sender: TObject);

    begin

    BitBtn_Compute.Enabled := False;

    if Form_Options.CheckBox_Link.State = cbChecked then BindGrids;

    case TabbedNotebook_Main.PageIndex of

    0 : begin

    ComputeFromPage0;

    BitBtn_Compute.Tag := BitBtn_Compute.Tag + 1;

    end;

    1 : begin

    ComputeFromPage1;

    ShowChart(Succ(RadioGroupChart.ItemIndex));

    BitBtn_Compute.Tag := BitBtn_Compute.Tag + 14;

    end;

    2 : begin

    ComputeFromPage2;

    BitBtn_Compute.Tag := BitBtn_Compute.Tag + 4;

    end;

    3 : begin

    ComputeFromPage3;

    BitBtn_Compute.Tag := BitBtn_Compute.Tag + 8;

    end;

    end;

    end;

    procedure TForm_Main.FormCreate(Sender: TObject);

    const

    FirstColWidth = 20;

    begin

    StringGrid_Ap0.ColWidths [0] := FirstColWidth;

    StringGrid_Anp0.ColWidths [0] := FirstColWidth;

    StringGrid_Bp0.ColWidths [0] := FirstColWidth;

    StringGrid_Roots.ColWidths [0] := FirstColWidth;

    StringGrid_Ap1.ColWidths [0] := FirstColWidth;

    StringGrid_ABKpp1.ColWidths [0] := FirstColWidth;

    StringGrid_Bp1.ColWidths [0] := FirstColWidth;

    StringGrid_Kpp0.ColWidths [0] := FirstColWidth;

    StringGrid_Kpp1.ColWidths [0] := FirstColWidth;

    Страницы: 1, 2, 3


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.