Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт до лабораторної роботи №1
з дисципліни «Моделювання процесів
та елементів систем керування»
тема: «Поліноміальна апроксимація
нелінійних характеристик елементів»
Мета роботи – вивчити методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, а саме: поліномами Лагранжа, Тейлора та кубічними сплайнами; навчитися записувати програми у вигляді універсальних процедур для апроксимації нелінійних характеристик.
ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
У випадку коли ми хочемо виконати апроксимацію функції заданої у вигляді таблиці дуже часто використовують сплайн-функції, а найбільш поширеним є кубічний сплайн. Він дозволяє виконати апроксимацію функції за двома точками та значеннями похідних в цих точках. Таким чином, така апроксимація забезпечує проходження функції через задані точки з заданим нахилом. Такий підхід виявися дуже практичним бо дозволяє розбивати табличну функцію на частини і отримувати неперервну і гладку апроксимацію. Гладкість даної апроксимації забезпечується фіксацією першої похідної в усіх заданих точках апроксимації. Якщо розглянути сплайн-функцію 5-го порядку, тоді можна ще зафіксувати і значення другої похідної в точках апроксимації. Це забезпечить гладкість функції за першою похідною.
Формула кубічного сплайну має вигляд
(7)
де - кубічний сплайн; - табличні значення функції; - крок сплайну; - значення похідних в точках апроксимації. Наведемо вирази для коефіцієнтів сплайну
(8)
де - табличні значення аргументу. Між іншим, крок сплайну слід визначати за формулою .
ЗАВДАННЯ ДЛЯ ЛАБОРАТОРНОЇ РОБОТИ
– кубічний сплайн (див. вирази (7), (8))
N п/п
13
0.25
1.1
0.75
37
110
ТЕКСТ ПРОГРАМИ
// лаба 1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream"
#include "fstream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
fstream File("data.txt",ios_base::out|ios_base::trunc);
double b1, b2, b3, b4;
double f1=0.25, f2=1.1, i1=0.75, i2=37, m2=110, m1=3, h=0.85;
double i , di, db1, db2, db3, db4;
for(double f=0; f<=1.1*0.7; f+=0.001)
{
if(f<=f1)
{
i=m1*f;di=m1;
}
if(f>f1&&f<f2)
{
b1=(2*(f-f1)+h)*(f2-f)*(f2-f);
b2=(2*(f2-f)+h)*(f-f1)*(f-f1);
b3=(f-f1)*(f2-f)*(f2-f);
b4=(f-f2)*(f-f1)*(f-f1);
i=((b1*i1+b2*i2)/(h*h*h))+((b3*m1+b4*m2)/(h*h));
/*db1=2.42-6*(f*f)-f-1.7*f;
db2=4.4*f-6*(f*f)+1.7*f+0.125;
db3=1.21-3*(f*f)+0.25;
db4=3*(f*f)-2.2*f-0.0625;*/
db1=(2*(f2*f2))-(4*f2*f1)+(2*(f1*f1));
db2=(4*f2*f)-(6*(f2*f2))+(2*h*f)-(4*f2*f1)+(8*f1*f)-(2*h*f1)-(2*(f1*f1));
db3=(2*f2)-(4*f2*f)+(2*f2*f1)+(3*(f*f))-(2*f1*f);
db4=(3*(f*f))-(2*f2*f)-(4*f1*f)-(2*f2*f1)+(f1*f1);
di=((db1*i1+db2*i2)/(h*h*h))+((db3*m1+db4*m2)/(h*h));
}
if(f>f2)
{
i=m2*f+i2-m2*f2;
di=m2;
}
cout<<f<<" "<<i<<" "<<di<<endl;
File<<f<<" "<<i<<" "<<di<<endl;
}
File.close();
return 0;
}
РЕЗУЛЬТАТ
/
/
Висновок: виконуючи цю роботу, я вивчив методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, а саме: поліноми Лагранжа, Тейлора та кубічні сплайни; навчився записувати програми у вигляді універсальних процедур для апроксимації нелінійних характеристик.