DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

ПОЛІНОМІАЛЬНА АПРОКСИМАЦІЯ НЕЛІНІЙНИХ ХАРАКТЕРИСТИК ЕЛЕМЕНТІВ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2018
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Моделювання процесів та елементів систем керування
Варіант:
3

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  ЛАБОРАТОРНА РОБОТА № 1 з курсу “ Моделювання процесів та елементів систем керування ” ПОЛІНОМІАЛЬНА АПРОКСИМАЦІЯ НЕЛІНІЙНИХ ХАРАКТЕРИСТИК ЕЛЕМЕНТІВ Львів – 2017 1. Мета роботи. Вивчити методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, а саме: поліномами Лагранжа, Тейлора та кубічними сплайнами; навчитися записувати програми у вигляді універсальних процедур для апроксимації нелінійних характеристик. 2. Завдання. Завдання для лабораторної роботи дають із зазначенням номера апроксимуючої функції та варіанта чисельних значень координат вузлів апроксимації. В даній роботі необхідно виконати апроксимацію кривої намаґнечування. Крива намаґнечування задається двома точками, що відділяють лінійні зони від нелінійної (рис. 1). Координати цих точок позначені А(і1, 1), В(і2, 2). Для того, щоб виконати апроксимацію ділянки АВ поліномом, необхідні ще значення похідних в точках А, В. Для першої точки (А) похідна визначається безпосередньо за значеннями функції і аргументу у вузлі m1 = i1/1, (18) а для другої точки (В) похідна m2 задана. Тоді рівняння лінійної ділянки ОА визначається рівнянням прямої, що проходить через початок координат i() = m1 (19) Рівняння ділянки ВС описує зону насичення феромаґнетного осердя яку також можна вважати лінійною, тому i() = m2 + i0, (20) де вільний член і0 визначаємо за формулою i0 = i2 - m22 . (21) Таким чином, криву намаґнечування апроксимуємо виразом з вибором розрахункової формули, в якій є два рівняння прямої і одна нелінійна функція  (22) 3. Остаточна версія програми. #include <math.h> #include <vcl.h> #pragma hdrstop #include <fstream.h> #include <iostream.h> #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; void __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; //Для розв'язку поставленої залачі, необхідно знайти коефіцієнти //апроксимаційного полінома a0 + a1*fi + a2*pow(fi,2) + a3*pow(fi,3). //Використаємо метод вибраних точок. //Для цього необхідно мати систему із чотирьох рівнянь. //Для її побудови використаємо значення функції, які задані в точках //fi1 та fi2, а також похідні функції у цих точках. //Початок. Загальний вигляд функції------------------------------------------ //i(fi) = a0 + a1*fi + a2*pow(fi,2) + a3*pow(fi,3). //Кінець. Загальний вигляд функції------------------------------------------- //Початок. Загальний вигляд системи рівнянь---------------------------------- //a0 + a1*fi1 + a2*pow(fi1,2) + a3*pow(fi1,3) = i1. //a0 + a1*fi2 + a2*pow(fi2,2) + a3*pow(fi2,3) = i2. //0 + a1 + 2*a2*fi1 + 3*a3*pow(fi1,2) = m1. //0 + a1 + 2*a2*fi2 + 3*a3*pow(fi2,2) = m2. //Кінець. Загальний вигляд функції------------------------------------------- //Початок. Матриця коефіцієнтів---------------------------------------------- //a0--a1----a2--------------a3-------------------------------------------------- //1 + fi1 + pow(fi1,2) + pow(fi1,3) = i1. //1 + fi2 + pow(fi2,2) + pow(fi2,3) = i2. //0 + 1 + 2*fi1 + 3*pow(fi1,2) = m1. //0 + 1 + 2*fi2 + 3*pow(fi2,2) = m2. //Кінець. Матриця коефіцієнтів----------------------------------------------- //Кінець. Загальний вигляд функції------------------------------------------- //Початок. Параметри системи------------------------------------------------- i1 = 0.8; i2 = 15; fi1 = 0.4; fi2 = 1.2; m1 = i1/fi1; m2 = 40; i0 = i2 - m2*fi2; //Число кроків табулювання--------------------------------------------------- N = 1000; //Крок табулювання----------------------------------------------------------- h = (1.1*fi2)/N; //Матриця коефіцієнтів------------------------------------------------------- A[1][1] = 1; A[1][2] = fi1; A[1][3] = pow(fi1,2); A[1][4] = pow(fi1,3); A[2][1] = 1; A[2][2] = fi2; A[2][3] = pow(fi2,2); A[2][4] = pow(fi2,3); A[3][1] = 0; A[3][2] = 1; A[3][3] = 2*fi1; A[3][4] = 3*pow(fi1,2); A[4][1] = 0; A[4][2] = 1; A[4][3] = 2*fi2; A[4][4] = 3*pow(fi2,2); //Стовпець вільних членів---------------------------------------------------- B[1] = i1; B[2] = i2; B[3] = m1; B[4] = m2; //Кінець. Параметри системи-------------------------------------------------- //Початок. Створюємо та відкриваємо файл для запису даних-------------------- FILE *pFile; pFile = fopen("Lab_1_i_a_fi.dat","w+"); //Кінець. Створюємо та відкриваємо файл для запису даних--------------------- //Початок. Метод Гаусса з вибором елемента по стовпцю------------------------ //Розмірність матриці елементів---------------------------------------------- n = 4; //Початок. Прямий хід-------------------------------------------------------- for(i=1;i<=n;i++) for(j=1;j<=n;j++) { V[i][j] = A[i][j]; P[i] = B[i]; } for(k=1;k<=n;k++) { //Початок. Стовпцеві сортування---------------------------------------------- max = fabs(V[k][k]); w = k; for(l=k+1;l<=n;l++) { if(max < fabs(V[l][k])) { max = fabs(V[l][k]); w = l; } } value = P[k]; P[k] = P[w]; P[w] = value; for(d=1;d<=n;d++) { value = V[k][d]; V[k][d] = V[w][d]; V[w][d] = value; } //Кінець. Стовпцеві сортування---------------------------------------------- Y[k] = P[k]/V[k][k]; for(i=k+1;i<=n;i++) { P[i] = P[i] - V[i][k]*Y[k]; for(j=k+1;j<=n;j++) { C[k][j] = V[k][j]/V[k][k]; V[i][j] = V[i][j] - V[i][k]*C[k][j]; } } } //Кінець. Прямий хід-------------------------------------------------------- //Початок. Обернений хід---------------------------------------------------- X[n] = Y[n]; temp = 0; for(i=n-1;i>=1;i--) { for(j=i+1;j<=n;j++) { temp = temp + C[i][j]*X[j]; } X[i] = Y[i] - temp; temp = 0; } //Кінець. Обернений хід----------------------------------------------------- //Визначення коефіцієнтів поліному------------------------------------------ a0 = X[1]; a1 = X[2]; a2 = X[3]; a3 = X[4]; //Початок. Табулювання функції---------------------------------------------- for(fi=0;fi<=1.1*fi2;fi=fi+h) { //Крива намаґнечування та її похідна---------------------------------------- if(fi<=fi1) { func_i = m1*fi; func_a = m1; } if((fi>fi1)&&(fi<=fi2)) { func_i = a0 + a1*fi + a2*pow(fi,2) + a3*pow(fi,3); func_a = a1 + 2*a2*fi + 3*a3*pow(fi,2); } if(fi>fi2) { func_i = m2*fi + i0; func_a = m2; } //Початок.Записуємо дані у файл---------------------------------------------- fprintf(pFile,"%-10.10f %-10.10f %-10.10f\n",func_i,func_a,fi); //Кінець.Записуємо дані у файл----------------------------------------------- //Початок. Будуємо графіки АФХ, АЧХ, ФЧХ------------------------------------- Series1->AddXY(fi,func_i,"",clRed); Series2->AddXY(fi,func_a,"",clRed); //Кінець. Будуємо графіки АФХ, АЧХ, ФЧХ-------------------------------------- } //Кінець. Табулювання функції----------------------------------------------- fprintf(pFile,"%-10.10f %-10.10f %-10.10f %-10.10f\n",a0,a1,a2,a3); //Початок.Закриваємо файл---------------------------------------------------- fclose(pFile); //Кінець.Закриваємо файл----------------------------------------------------- } 4. Результати роботи програми. Графіки апроксимованої кривої намаґнечування та її похідної   5. Висновки. На даній лабораторній роботі ми вивчали методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, а саме: поліномами Лагранжа, Тейлора та кубічними сплайнами. Для розв’язання поставленої задачі був використаний метод вибраних точок. Система рівнянь із чотирьох невідомих була складена за відомими значеннями функції в двох точках та похідними функції у цих точках. Оскільки матриця коефіцієнтів містила нульові члени, для пошуку коренів був використаний метод Гауса з вибором елемента по стовпцю. Результати роботи програми збережені у файлі. Графіки апроксимованої кривої намаґнечування та її похідної побудовані за допомогою програми GRAPHER.
Антиботан аватар за замовчуванням

01.04.2018 18:55

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!