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

СИСТЕМИ НЕЛІНІЙНИХ РІВНЯНЬ. МЕТОД НЬЮТОНА ТА АЛГОРИТМ

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

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

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

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютерні методи дослідження систем керування
Група:
СІ-22
Варіант:
6

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

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ Національний університет “Львівська політехніка” / Звіт до лабораторної роботи №4 СИСТЕМИ НЕЛІНІЙНИХ РІВНЯНЬ. МЕТОД НЬЮТОНА ТА -АЛГОРИТМ З курсу «Комп’ютерні методи дослідження систем керування» Варіант №6 Виконав: Ст. гр. СІ-22 Перевірив: Львів-2009 Мета роботи: ознайомитися з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона та екстраполяційним методом – -алгоритмом. Завдання: № п/п Завдання (метод та початкові наближення коренів) відносна похибка у відсотках %, для -алгоритму: ,    Група 1 Група 2 Група 3  6 Стандартний метод Ньютона (оберт.матриці методом Гауса з вибор. гол. ел-тів по рядку ) Метод січних (оберт.матриці методом Гауса з вибор. гол. ел-тів по стовпцю ) -алгоритм   №6  поч. наближення  Короткі теоретичні відомості: / Опис алгоритму На початку алгоритму задаємо початкове наближення , для , та відносну похибку  у відсотках. Встановлюємо значення для одиничної матриці . Обчислюємо значення елементів вектора функцій  та елементів матриці Якобі . Здійснюємо обертання матриці Якобі  методом Гауса (з вибором головного елемента по рядку, стовпцю чи по всій матриці). Алгоритм обертання матриці методом Гауса наведено в інструкції до лабораторної роботи № 2. Єдиною модифікацією є  (замість базової матриці  беремо ). Згідно ітераційної формули обчислюємо наступне наближення , для . Здійснюємо перевірку умови збіжності. Якщо вона не виконується, то процес уточнення повторюємо (п.3). Для перевірки вірності роботи алгоритму підставляємо наші знайдені значення  в систему рівнянь . Значення функцій , для , мають бути близькими нулю, в залежності від вибраного значення . Список ідентифікаторів, констант, змінних, функцій, методів, використаних у програмі та їх пояснення: #include "math.h"- включення математичної бібліотеки; x[2] – матриця-стовпець розв`язку системи рівнянь, J[2][2] – матриця Якобі, ee=0.0001 – константа, значення відносної похибки, n=2– кількість рівнянь в системі, V[2][2], C[2][2] – матриці, що використовуються при обертанні матриці Якобі, Е – одинична матриця, f [i] – вектор функцій, pow – функція піднесення до степеня, fabs – обчислення модуля TForm1 *Form1 – глобальний показчик на форму; exp – обчислення значення експоненти; Текст програми: //--------------------------------------------------------------------------- #include <vcl.h> #include <math.h> #pragma hdrstop #include "Lab4_6.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double x[2]={1,1}, x_old[2]={1,1}, J[2][2],f[2], ee=0.0001; bool cond_N; int n=2; double INVERS[2][2], E[2][2],EE[2][2]; double V[2][2], C[2][2], P[2], X[2], Y[2]; for (int i=0; i<n; i++) for (int j=0; j<n; j++) if (i==j) E[i][j]=1; else E[i][j]=0; do { cond_N=false; f[0]=x[0]/(pow(x[0],2)+pow(x[1],2))+0.4-x[0]; f[1]=-x[1]/(pow(x[0],2)+pow(x[1],2))+1.4-x[1]; J[0][0]=(pow(x[1],2)-pow(x[0],2))/pow((pow(x[1],2)+pow(x[0],2)),2)-1; J[0][1]=-x[0]*2*x[1]/pow((pow(x[1],2)+pow(x[0],2)),2); J[1][0]=x[1]*2*x[0]/pow((pow(x[1],2)+pow(x[0],2)),2); J[1][1]=-(pow(x[0],2)-pow(x[1],2))/pow((pow(x[1],2)+pow(x[0],2)),2)-1; for (int b=0; b<n; b++) { for (int i=0; i<n; i++) for (int j=0; j<n; j++) {V[i][j]=J[i][j]; P[i]=E[i][b];} for (int k=0; k<n; k++) { Y[k]=P[k]/V[k][k]; for (int i=k+1; i<n; i++) { P[i]+=-V[i][k]*Y[k]; for (int j=k+1; j<n; j++) { C[k][j]=V[k][j]/V[k][k]; V[i][j]+=-V[i][k]*C[k][j]; } } } X[n-1]=Y[n-1]; for (int i=n-2; i>=0; i--) { X[i]=0; for (int j=i+1; j<n; j++) X[i]+=C[i][j]*X[j]; X[i]=Y[i]-X[i]; } for (int i=0; i<n;i++) INVERS[i][b]=X[i]; } for (int i=0; i<n; i++) for (int j=0; j<n; j++) { EE[i][j]=0; for (int k=0; k<n; k++) EE[i][j]+=J[i][k]*INVERS[k][j]; } for (int i=0; i<n; i++) { x[i]=0; for (int j=0; j<n; j++) x[i]+=INVERS[i][j]*f[j]; x[i]=x_old[i]-x[i]; } for (int i=0; i<n; i++) Memo1->Lines->Add(x[i]); for (int i=0; i<n; i++) { cond_N=cond_N||(fabs((x[i]-x_old[i])/x[i]*100)>ee); x_old[i]=x[i]; } } while (cond_N); Memo1->Lines->Add("rozviazok sustemu"); for (int i=0; i<n; i++) Memo1->Lines->Add(x[i]); Memo1->Lines->Add("perevirka"); f[0]=x[0]/(pow(x[0],2)+pow(x[1],2))+0.4-x[0]; f[1]=-x[1]/(pow(x[0],2)+pow(x[1],2))+1.4-x[1]; Memo1->Lines->Add(f[0]); Memo1->Lines->Add(f[1]); } //--------------------------------------------------------------------------- Результати роботи програми: /
Антиботан аватар за замовчуванням

2015

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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