Идентификация и моделирование объектов автоматизации

Автор работы: Пользователь скрыл имя, 26 Марта 2014 в 21:51, курсовая работа

Краткое описание

Задачи курсовой работы включают:
− получение студентами навыков самостоятельной работы;
− освоение технологии разработки и отладки программ, реализующих модели технических объектов;
− более качественное изучение нормативных материалов – государственных стандартов и технических условий;
− более полное изучение базовых средств языков программирования и получение навыков постановки и решения различных задач с помощью ПЭВМ;
− изучение и использование сред численного моделирования и статистического анализа (MatLab, StatGraph и т.п.).

Содержание

Введение …………………………………………………………………………5
Постановка задачи ………………………………………………………………6
Входные и выходные данные ……………………………………………………7
1. Идентификация объектов методом наименьших квадратов ………………8
2. Исследование разомкнутой линейной системы ……………………………19
3. Построение модели с распределенными параметрами ……………………28
4. Численные процедуры оценивания параметров
нелинейных регрессионных моделей ………………………………………………36
Заключение ……………………………

Вложенные файлы: 1 файл

КП_ИМОА.docx

— 216.83 Кб (Скачать файл)

 

Текст программы

 

//---------------------------------------------------------------------------

 

#include <vcl.h>

#include <math.h>

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

double e=0.00000000000001,xz[4]={0,0,0,0};

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

StringGrid1->Cells[0][0]="Y";

StringGrid1->Cells[1][0]="X1";

StringGrid1->Cells[2][0]="X2";

StringGrid1->Cells[3][0]="X3";

 

 

 

StringGrid1->Cells[0][1]="20,8";

StringGrid1->Cells[1][1]="8";

StringGrid1->Cells[2][1]="5";

StringGrid1->Cells[3][1]="1";

 

StringGrid1->Cells[0][2]="14,2";

StringGrid1->Cells[1][2]="2";

StringGrid1->Cells[2][2]="4";

StringGrid1->Cells[3][2]="3";

 

StringGrid1->Cells[0][3]="32,3";

StringGrid1->Cells[1][3]="4";

StringGrid1->Cells[2][3]="9";

StringGrid1->Cells[3][3]="7";

 

StringGrid1->Cells[0][4]="11,5";

StringGrid1->Cells[1][4]="2";

StringGrid1->Cells[2][4]="2";

StringGrid1->Cells[3][4]="4";

 

StringGrid1->Cells[0][5]="8,2";

StringGrid1->Cells[1][5]="2";

StringGrid1->Cells[2][5]="3";

StringGrid1->Cells[3][5]="1";

 

}

//---------------------------------------------------------------------------

double f(double b0,double b1,double b2,double b3){

        double m;

        m=(xz[0]-(b0+xz[1]*b1+xz[2]*b2+xz[3]*b3)) ;

        m=m*m;

        return m;

}

 

bool check(double f,double xl1,double xl2,double xl3,double xl4,double x1,double x2,double x3,double x4)

{

if (f<e)

      return true;

return  false;

}

 

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double h=0.00000001,x1=-1.5397,x2=1.4183,x3=1.8612,x4=1.647;

double Xl1,Xl2,Xl3,Xl4,proizv1,proizv2,proizv3,proizv4;

xz[0]=0;xz[1]=0;xz[2]=0;xz[3]=0;

 

for (int i=1;i<6;i++){

        xz[0]=xz[0]+StrToFloat(StringGrid1->Cells[0][i]);

        xz[1]=xz[1]+StrToFloat(StringGrid1->Cells[1][i]);

        xz[2]=xz[2]+StrToFloat(StringGrid1->Cells[2][i]);

        xz[3]=xz[3]+StrToFloat(StringGrid1->Cells[3][i]);

}

xz[0]=xz[0]/5;xz[1]=xz[1]/5;xz[2]=xz[2]/5;xz[3]=xz[3]/5;

 

do{

        proizv1=(f(x1,x2,x3,x4)-f(x1-h,x2,x3,x4))/h;

        proizv2=(f(x1,x2,x3,x4)-f(x1,x2-h,x3,x4))/h;

        proizv3=(f(x1,x2,x3,x4)-f(x1,x2,x3-h,x4))/h;

        proizv4=(f(x1,x2,x3,x4)-f(x1,x2,x3,x4-h))/h;

        Xl1=x1;Xl2=x2;Xl3=x3;Xl4=x4;

        x1=Xl1-f(x1,x2,x3,x4)/proizv1;

        x2=Xl2-f(x1,x2,x3,x4)/proizv2;

        x3=Xl3-f(x1,x2,x3,x4)/proizv3;

        x4=Xl4-f(x1,x2,x3,x4)/proizv4;

//        Memo1->Lines->Add(FloatToStr(x1)+"   "+FloatToStr(x2)+"   "+FloatToStr(x3)+"   "+FloatToStr(x4));

}while (check(f(x1,x2,x3,x4),Xl1,Xl2,Xl3,Xl4,x1,x2,x3,x4)) ;

        Label1->Caption="b0= "+FloatToStr(x1);

        Label2->Caption="b1= "+FloatToStr(x2);

        Label3->Caption="b2= "+FloatToStr(x3);

        Label4->Caption="b3= "+FloatToStr(x4);

 

 double y;

Series1->Clear();

Series2->Clear();

 

 

 for(int i=1;i<6;i++){

         y=x1+StrToFloat(StringGrid1->Cells[1][i])*x2+StrToFloat(StringGrid1->Cells[2][i])*x3+StrToFloat(StringGrid1->Cells[3][i])*x4;

         Series1->AddXY(i,y);

         Series2->AddXY(i,StrToFloat(StringGrid1->Cells[0][i]));

 }

}

//---------------------------------------------------------------------------

 

 

 

Результаты работы программы

 

 

Вывод:

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

 

 

 

ЗАКЛЮЧЕНИЕ

 

В ходе выполнения курсовой работы были получены практические навыки в построении математических моделей технических объектов, написании программ для решении задач моделирования с использованием математического пакета MATLAB, изучены теоретические основы и особенности выполнения параметрической идентификации различных моделей, реализации алгоритмов линейного и нелинейного регрессионного анализа, планирования эксперимента.

 

 

 

ПЕРЕЧЕНЬ ССЫЛОК

 

1. Автоматизированные системы управления  технологическими процессами. Идентификация  и оптимальное управление / Под  ред. Салнги В.И. − Харьков: «Вища школа», 1976 г. − 180 с.

2. Брикман М.С., Кристинков Д.С. Аналитическая идентификация управляемых систем. − Рига: «Зинатне», 1974 г. − 206 с.

3. Гельфандбейн Я.А. Методы кибернетической диагностики динамических систем. Идентификация функционирующих систем математическими моделями. − Рига: «Зинатне», 1967 г. − 542 с.

4. Дрейпер Н., Смит Г. Прикладной регрессионный анализ. − М.: «Статистика», 1973 г. − 391 с.

5. Демиденко Е.З. Линейная и нелинейная  регрессии. – М.: «Финансы и статистика», 1981 г.

 

 

 

 

 

 

 


Информация о работе Идентификация и моделирование объектов автоматизации