- •Содержание
- •Виды моделей
- •Модель объекта управления
- •Моделирование
- •Построение модели.
- •Получение данных
- •Основные предпосылки мнк: а по мнк должно быть
- •Приведены в пример практические реализации в.Я. Ротыча.
- •Обработка экспериментальных данных
- •Выбор структуры модели
- •Параметрическое оценивание
- •Оценка соответствия полученной модели экспериментальным данным
- •Регрессионный анализ:
- •Имитационное моделирование с применением натурных данных
- •Проверка полезности модели с помощью целевого критерия
- •Проблема некорректности задачи идентификации
- •Имитационное моделирование
- •Общая структура
- •Отображения информации
- •Натурно-модельные обучающие комплексы
- •9.1. Обучающие системы на базе многовариантных структур
- •9.1.1. Структура многоканальной игровой обучающей системы
- •9.1.2. Особенности представления информации в обучающих системах
- •9.1.3. Простой вариант учебной нормативной модели (применительно к управленческим задачам )
- •9.2. Общие структуры тренажеров
- •9.3. Система освоения и исследования методов идентификации, прогнозирования, регулирования
- •9.4. Система освоения и исследования методов идентификации
- •Литературные источники
- •П рактические работы
- •Постановка задачи
- •Приложение 1
- •Постановка задачи Моделирование доменной плавки по каналу «влажность дутья – содержание кремния»
- •Решение
Приложение 1
Код программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
double[] E = new double[150];
double[] Ur = new double[150];
double[] Yu = new double[150];
double[] Y = new double[150];
double[] Yw = new double[150] {0.1,0.2,0.5,0.4,0.2,0.3,0.8,0.5,0.2,0.0,0.4,
0.1,0.2,0.2,0.9,0.0,0.3,0.2,0.6,0.1,0.5,0.0,
0.3,0.6,0.2,0.7,0.3,0.0,0.9,0.6,0.0,0.4,0.7,
0.4,0.2,0.0,0.4,0.7,0.5,0.5,0.6,0.6,0.6,0.5,
0.3,0.2,0.5,0.1,0.3,0.5,0.8,0.3,0.2,0.6,0.5,
0.3,0.6,0.2,0.7,0.3,0.5,0.6,0.6,0.0,0.0,0.9,
0.6,0.0,0.4,0.7,0.2,0.2,0.9,0.0,0.3,0.3,0.6,
0.2,0.7,0.3,0.1,0.2,0.5,0.4,0.5,0.8,0.3,0.2,
0.6,0.5,0.0,0.4,0.7,0.5,0.5,0.2,0.7,0.3,0.0,
0.9,0.6,0.0,0.4,0.7,0.4,0.2,0.0,0.4,0.7,0.5,
0.5,0.1,0.3,0.5,0.8,0.3,0.0,0.4,0.7,0.2,0.2,
0.0,0.4,0.7,0.5,0.5,0.6,0.6,0.6,0.5,0.2,0.5,
0.4,0.5,0.8,0.3,0.2,0.5,0.8,0.3,0.0,0.4,0.3,
0.6,0.2,0.7,0.3,0.5,0.8,0.9};
double Yzad = 1;
double T = 10.00000;
double k = 1.00000;
double tau = 3.00000;
double a1, a2, Kp, Ku, Kn;
double skos = new double();
double[] skos2 = new double[2];
public Form1()
{
InitializeComponent();
}
private void chart1_Click(object sender, EventArgs e)
{
f(Ku, Kn, 1);
}
public void sko()
{
double tempo = new double();
for (int sk = 0; sk < Y.Length; sk++)
{
tempo += (Yzad - Y[sk]) * (Yzad - Y[sk]);
}
skos = tempo / (Y.Length - 1);
}
private void default_f()
{
Ku = 1 / tau;
Kn = T / tau;
f(Ku, Kn, 1);
}
// НАША ФУНКЦИЯ
private double f(double Ku, double Kn, int z)
{
for (int i = 2; i < Y.Length; i++)
{
Ur[i] = Uri(Ur[i - 1], E[i - 1], Ku, Kn);
Yu[i] = Yui(Ur[i], Yu[i - 1]);
Y[i] = Yi(Yu[i], Yw[i]);
E[i] = Ei(Yzad, Y[i]);
if (z == 1)
{
chart1.Series[0].Points.AddXY(i, Y[i]);
}
if (z == 2)
{
chart1.Series[1].Points.AddXY(i, Y[i]);
}
}
sko();
return skos;
}
//НАЧАЛЬНЫЕ ЗНАЧЕНИЯ
private void Form1_Load(object sender, EventArgs e)
{
a1 = k / (T + 1);
a2 = T / (T + 1);
Kp = T / (k + tau);
Ku = 1 / tau;
Kn = T / tau;
f(Ku, Kn, 2);
richTextBox1.AppendText("\n" + "СКО начальное" + "=" + Convert.ToString(skos));
chart2.Series[0].Points.AddXY(Math.Round(Ku, 6), Math.Round(Kn, 6));
chart2.Series[0].Points[0].Label = "0";
}
public double Uri(double Upred, double Epred, double Ku, double Kn)
{
double Uri = new double();
Uri = Upred + (Ku + Kn) * Epred;
return Uri;
}
public double Ei(double Yzad, double Yi)
{
double Ei = new double();
Ei = Yzad - Yi;
return Ei;
}
public double Yui(double Uri, double YuiPred)
{
double Yui = new double();
Yui = a1 * Uri + a2 * YuiPred;
return Yui;
}
public double Yi(double Yui, double Ywn)
{
double Yi = new double();
Yi = Yui + Ywn;
return Yi;
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Pokoordperebor();
}
private void Pokoordperebor()
{
do
{
double stepKn = (T/tau)*0.11;
double stepKu = (1/tau)*0.11;
skos2[1] = skos;
richTextBox1.AppendText("\n" + "\n" + " Ku = " + Convert.ToString(Ku) + " Kn = " + Convert.ToString(Kn));
//Ищем Kn
while (stepKn >= 0.07)
{
richTextBox1.AppendText("\n" + "Ищем Kn с шагом = " + Convert.ToString(stepKn));
if (f(Ku, Kn - stepKn, 0) < f(Ku, Kn, 0))
{
Kn = Kn - stepKn; //Новое значение Kn
}
else
{
if (f(Ku, Kn + stepKn, 0) < f(Ku, Kn, 0))
{
Kn = Kn + stepKn;
}
else
{
stepKn = stepKn * 0.5;
}
}
f(Ku, Kn, 0); //Узнаем значение СКО
richTextBox1.AppendText("\n" + "Kn = " + Convert.ToString(Kn) + " CKO= " + Convert.ToString(skos));
}
richTextBox1.AppendText("\n" + " Ku = " + Convert.ToString(Ku) + " Kn!!! после нахождения= " + Convert.ToString(Kn));
richTextBox1.AppendText("\n" + "______________________________ " + "\n");
chart2.Series[0].Points.AddXY(Math.Round(Ku, 6), Math.Round(Kn, 6));
//Ищем Ku
while (stepKu >= 0.01)
{
richTextBox1.AppendText("\n" + "Ищем Ku с шагом = " + Convert.ToString(stepKu) );
if (f(Ku - stepKu, Kn, 0) < f(Ku, Kn, 0))
{
Ku = Ku - stepKu; //Новое значение Ku
}
else
{
if (f(Ku + stepKu, Kn, 0) < f(Ku, Kn, 0))
{
Ku = Ku + stepKu; //Новое значение Ku
}
else
{
stepKu = stepKu * 0.5;
}
}
f(Ku, Kn, 0); //Узнаем значение СКО
richTextBox1.AppendText("\n" + "Ku = " + Convert.ToString(Ku) + " CKO= " + Convert.ToString(skos));
}
richTextBox1.AppendText("\n" + " Ku!!! после нахождения = " + Convert.ToString(Ku) + " Kn = " + Convert.ToString(Kn));
richTextBox1.AppendText("\n" + "______________________________ " + "\n");
chart2.Series[0].Points.AddXY(Math.Round(Ku, 6), Math.Round(Kn, 6));
f(Ku, Kn, 0);
richTextBox1.AppendText("\n" + " СКО текущее" + "=" + Convert.ToString(skos));
richTextBox1.AppendText("\n" + " СКО предыдущее" + "=" + Convert.ToString(skos2[1]));
} while (Math.Abs(skos2[1] - skos) > 0.05 * skos2[1]);
//Выводим Ku и Kn на форму
richTextBox1.AppendText("\n" + " HOHO Ku = " + Convert.ToString(Ku) + " Kn = " + Convert.ToString(Kn));
textBox1.Text = Convert.ToString(Ku);
textBox2.Text = Convert.ToString(Kn);
}
}
}
Практическая работа №2