Поліноміальна апроксимація нелінійних характеристик елементів.

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

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

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

Рік:
2008
Тип роботи:
Курсова робота
Предмет:
Моделювання процесів та елементів систем керування
Група:
КС-43
Варіант:
20

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

Міністерство освіти і науки України Національний університет “Львівська політехніка”  Звіт про виконання лабораторної роботи № 1 з дисципліни: „Моделювання процесів та елементів систем керування” на тему: „ Поліноміальна апроксимація нелінійних характеристик елементів ” Варіант № 20 Виконав: студент групи КС-43 Перевірив: Павельчак А.Г. Львів 2008 Мета роботи – вивчити методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, а саме: поліномами Лагранжа, Тейлора та кубічними сплайнами; навчитися записувати програми у вигляді універсальних процедур для апроксимації нелінійних характеристик. Завдання Завдання для лабораторної роботи дають із зазначенням номера апроксимуючої функції та варіанта чисельних значень координат вузлів апроксимації. В даній роботі необхідно виконати апроксимацію кривої намаґнечування. Крива намаґнечування задається двома точками, що відділяють лінійні зони від нелінійної (рис. 1). Координати цих точок позначені А(і1, 1), В(і2, 2). Для того, щоб виконати апроксимацію ділянки АВ поліномом, необхідні ще значення похідних в точках А, В. Для першої точки (А) похідна визначається безпосередньо за значеннями функції і аргументу у вузлі m1 = i1/1, а для другої точки (В) похідна m2 задана. Тоді рівняння лінійної ділянки ОА визначається рівнянням прямої, що проходить через початок координат i() = m1 Рівняння ділянки ВС описує зону насичення феромаґнетного осердя яку також можна вважати лінійною, тому i() = m2 + i0, де вільний член і0 визначаємо за формулою i0 = i2 - m22 . Таким чином, криву намаґнечування апроксимуємо виразом з вибором розрахункової формули, в якій є два рівняння прямої і одна нелінійна функція  Вирази для апроксимуючих функцій 4.  Варіанти чисельних значень вузлів апроксимації Таблиця 1 N п/п       6 1.7 17 5.1 91 11   Блок-схема  Список ідентифікаторів констант, змінних, процедур і функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення. h1 – крок табулювання. a0, a1,a2,a3 – коефіцієнти апроксимуючої функції. i1=i1,i2=i2,si1=Ψ1,si2= Ψ2,m1,m2,h – задані велечини. Ψ – змінна величина. Текст програми Форма  Програма #include <vcl.h> #include <math.h> #include <dstring.h> #include <stdio.h> #include <windows.h> #include <string.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; double x1, x2,y1,y2,m2,h,start,finish; double a[4]; double Matrix[4][4]; double Y[4]; double X[4]; //--------------------------------------------------------------------------- void gaus(void) { double V[4][4], C[4][4],P[4]; int i,j,k; double DY; for(i=0;i<4;i++) { P[i]=Y[i]; for (j=0;j<4;j++) V[i][j]=Matrix[i][j]; } for (k=0;k<4;k++) { Y[k]=P[k]/V[k][k]; for (i=k+1; i<4; i++) { P[i]=P[i]-V[i][k]*Y[k]; for (j=k+1; j<4; j++) { C[k][j]=V[k][j]/V[k][k]; V[i][j]=V[i][j]-V[i][k]*C[k][j]; } } } a[3]=Y[3]; for(i=4-2;i>=0;i--) { DY=0; for(j=i+1; j<4; j++) DY+=C[i][j]*a[j]; a[i]=Y[i]-DY; } } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit5Change(TObject *Sender) { float A; try { A=StrToFloat(Edit5->Text); x2=A; } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід"); } A=A*1.1; Edit11->Text=FloatToStr(A); } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { try { x1=StrToFloat(Edit1->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit2Change(TObject *Sender) { try { y1=StrToFloat(Edit2->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit4Change(TObject *Sender) { try { y2=StrToFloat(Edit4->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit3Change(TObject *Sender) { try { m2=StrToFloat(Edit3->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit9Change(TObject *Sender) { try { h=StrToFloat(Edit9->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit10Change(TObject *Sender) { try { start=StrToFloat(Edit10->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit11Change(TObject *Sender) { try { finish=StrToFloat(Edit11->Text); } catch (EConvertError&) { ShowMessage("Ви ввели помилкове число, повторіть ввід "); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { FILE *F; if ((F = fopen("Text.txt","wt")) == NULL) { ShowMessage("Файл не вдається сворити"); return; } double m1, del,j,y,ys; int i; m1=y1/x1; Y[0]=y1; Y[1]=y2; Y[2]=m1; Y[3]=m2; Matrix[0][0]=1; Matrix[0][1]=pow(x1,2); Matrix[0][2]=pow(x1,4); Matrix[0][3]=pow(x1,6); Matrix[1][0]=1; Matrix[1][1]=pow(x2,2); Matrix[1][2]=pow(x2,4); Matrix[1][3]=pow(x2,6); Matrix[2][0]=0; Matrix[2][1]=2*x1; Matrix[2][2]=4*pow(x1,3); Matrix[2][3]=6*pow(x1,5); Matrix[3][0]=0; Matrix[3][1]=2*x2; Matrix[3][2]=4*pow(x2,3); Matrix[3][3]=6*pow(x2,5); gaus(); Edit6->Text=FloatToStr(a[0]); Edit7->Text=FloatToStr(a[1]); Edit8->Text=FloatToStr(a[2]); Edit12->Text=FloatToStr(a[3]); j=start; while(j<=finish) { if(j<=x1) {y=m1*j; fprintf(F,"%lf %lf %lf \n",j,y,m1);} if((j<x2)&&(j>x1)) { y=a[0]+a[1]*pow(j,2)+a[2]*pow(j,4)+a[3]*pow(j,6); ys=2*a[1]*j+4*a[2]*pow(j,3)+6*a[3]*pow(j,5); fprintf(F,"%lf %lf %lf \n",j,y,ys); } if(j>x2) {y=m2*j+y2-m2*x2; fprintf(F,"%lf %lf %lf \n",j,y,m2);} j+=h; } fclose(F); } Результат програми Текстовий файл ψ i(ψ) di/dψ 0.000000 0.000000 3.000000 0.100000 0.300000 3.000000 0.200000 0.600000 3.000000 0.300000 0.900000 3.000000 0.400000 1.200000 3.000000 0.500000 1.500000 3.000000 0.600000 1.800000 3.000000 0.700000 2.100000 3.000000 0.800000 2.400000 3.000000 0.900000 2.700000 3.000000 1.000000 3.000000 3.000000 1.100000 3.300000 3.000000 1.200000 3.600000 3.000000 1.300000 3.900000 3.000000 1.400000 4.200000 3.000000 1.500000 4.500000 3.000000 1.600000 4.800000 3.000000 1.700000 5.100000 3.000000 1.800000 5.408315 3.166021 1.900000 5.733145 3.330273 2.000000 6.074308 3.492664 2.100000 6.431613 3.653103 2.200000 6.804860 3.811500 2.300000 7.193842 3.967766 2.400000 7.598340 4.121814 2.500000 8.018128 4.273556 2.600000 8.452971 4.422909 2.700000 8.902627 4.569788 2.800000 9.366844 4.714111 2.900000 9.845361 4.855796 3.000000 10.337912 4.994764 3.100000 10.844221 5.130938 3.200000 11.364004 5.264240 3.300000 11.896971 5.394596 3.400000 12.442823 5.521934 3.500000 13.001254 5.646181 3.600000 13.571954 5.767268 3.700000 14.154601 5.885128 3.800000 14.748869 5.999695 3.900000 15.354428 6.110906 4.000000 15.970937 6.218698 4.100000 16.598051 6.323012 4.200000 17.235421 6.423790 4.300000 17.882690 6.520978 4.400000 18.539495 6.614522 4.500000 19.205471 6.704372 4.600000 19.880245 6.790478 4.700000 20.563440 6.872796 4.800000 21.254676 6.951281 4.900000 21.953567 7.025892 5.000000 22.659724 7.096591 5.100000 23.372754 7.163342 5.200000 24.092260 7.226111 5.300000 24.817842 7.284869 5.400000 25.549099 7.339587 5.500000 26.285624 7.390241 5.600000 27.027011 7.436808 5.700000 27.772849 7.479269 5.800000 28.522727 7.517608 5.900000 29.276233 7.551813 6.000000 30.032952 7.581872 6.100000 30.792469 7.607779 6.200000 31.554369 7.629530 6.300000 32.318236 7.647126 6.400000 33.083656 7.660568 6.500000 33.850212 7.669863 6.600000 34.617490 7.675021 6.700000 35.385078 7.676054 6.800000 36.152564 7.672980 6.900000 36.919538 7.665818 7.000000 37.685592 7.654592 7.100000 38.450322 7.639330 7.200000 39.213325 7.620063 7.300000 39.974202 7.596826 7.400000 40.732559 7.569657 7.500000 41.488004 7.538600 7.600000 42.240151 7.503700 7.700000 42.988618 7.465010 7.800000 43.733028 7.422582 7.900000 44.473012 7.376476 8.000000 45.208203 7.326755 8.100000 45.938244 7.273487 8.200000 46.662785 7.216742 8.300000 47.381479 7.156595 8.400000 48.093993 7.093129 8.500000 48.799997 7.026425 8.600000 49.499173 6.956575 8.700000 50.191210 6.883670 8.800000 50.875809 6.807810 8.900000 51.552677 6.729097 9.000000 52.221536 6.647638 9.100000 52.882117 6.563546 9.200000 53.534162 6.476936 9.300000 54.177425 6.387932 9.400000 54.811673 6.296660 9.500000 55.436685 6.203251 9.600000 56.052256 6.107842 9.700000 56.658192 6.010575 9.800000 57.254314 5.911596 9.900000 57.840459 5.811058 10.000000 58.416479 5.709117 10.100000 58.982241 5.605937 10.200000 59.537631 5.501684 10.300000 60.082548 5.396532 10.400000 60.616913 5.290660 10.500000 61.140662 5.184251 10.600000 61.653752 5.077496 10.700000 62.156156 4.970589 10.800000 62.647871 4.863731 10.900000 63.128911 4.757130 11.000000 63.599313 4.650996 11.100000 64.059133 4.545548 11.200000 64.508453 4.441011 11.300000 64.947373 4.337613 11.400000 65.376021 4.235592 11.500000 65.794546 4.135188 11.600000 66.203121 4.036649 11.700000 66.601946 3.940230 11.800000 66.991246 3.846191 11.900000 67.371273 3.754799 12.000000 67.742303 3.666325 12.100000 68.104644 3.581049 12.200000 68.458629 3.499257 12.300000 68.804621 3.421241 12.400000 69.143013 3.347298 12.500000 69.474227 3.277733 12.600000 69.798716 3.212860 12.700000 70.116966 3.152994 12.800000 70.429493 3.098462 12.900000 70.736847 3.049595 13.000000 71.039612 3.006732 13.100000 71.338405 2.970218 13.200000 71.633879 2.940405 13.300000 71.926721 2.917652 13.400000 72.217657 2.902326 13.500000 72.507447 2.894800 13.600000 72.796890 2.895455 13.700000 73.086823 2.904679 13.800000 73.378124 2.922865 13.900000 73.671708 2.950417 14.000000 73.968533 2.987744 14.100000 74.269597 3.035263 14.200000 74.575940 3.093399 14.300000 74.888645 3.162583 14.400000 75.208839 3.243255 14.500000 75.537694 3.335862 14.600000 75.876425 3.440859 14.700000 76.226294 3.558708 14.800000 76.588610 3.689880 14.900000 76.964730 3.834853 15.000000 77.356057 3.994112 15.100000 77.764045 4.168153 15.200000 78.190197 4.357475 15.300000 78.636067 4.562591 15.400000 79.103259 4.784017 15.500000 79.593431 5.022279 15.600000 80.108294 5.277913 15.700000 80.649611 5.551461 15.800000 81.219202 5.843474 15.900000 81.818940 6.154510 16.000000 82.450757 6.485139 16.100000 83.116640 6.835936 16.200000 83.818636 7.207485 16.300000 84.558848 7.600380 16.400000 85.339443 8.015224 16.500000 86.162645 8.452626 16.600000 87.030741 8.913206 16.700000 87.946080 9.397592 16.800000 88.911074 9.906421 16.900000 89.928200 10.440339 17.000000 91.000000 11.000000 17.100000 92.100000 11.000000 17.200000 93.200000 11.000000 17.300000 94.300000 11.000000 17.400000 95.400000 11.000000 17.500000 96.500000 11.000000 17.600000 97.600000 11.000000 17.700000 98.700000 11.000000 17.800000 99.800000 11.000000 17.900000 100.900000 11.000000 18.000000 102.000000 11.000000 18.100000 103.100000 11.000000 18.200000 104.200000 11.000000 18.300000 105.300000 11.000000 18.400000 106.400000 11.000000 18.500000 107.500000 11.000000 18.600000 108.600000 11.000000 18.700000 109.700000 11.000000 Графік      Висновок: в данній лабораторній роботі я написав мовою С++ програму, що реалізує методи наближення нелінійних характеристик елементів систем керування поліноміальними функціями, навчитися записувати програми у вигляді універсальних процедур для апроксимації нелінійних характеристик.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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