Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Звіт до лабораторної роботи №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;
}
РЕЗУЛЬТАТ
/
/
Висновок: виконуючи цю роботу, я вивчив методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, а саме: поліноми Лагранжа, Тейлора та кубічні сплайни; навчився записувати програми у вигляді універсальних процедур для апроксимації нелінійних характеристик.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!