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

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

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

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

Рік:
2009
Тип роботи:
Звіт до лабораторної роботи
Предмет:
СП
Група:
СІ-22

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

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ Національний університет “Львівська політехніка” / Звіт до лабораторної роботи №4 СИСТЕМИ НЕЛІНІЙНИХ РІВНЯНЬ. МЕТОД НЬЮТОНА ТА -АЛГОРИТМ З курсу «Комп’ютерні методи дослідження систем керування» Варіант №6 Мета роботи: ознайомитися з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона та екстраполяційним методом – -алгоритмом. Завдання: № п/п Завдання (метод та початкові наближення коренів) відносна похибка у відсотках %, для -алгоритму: ,    Група 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]); } //--------------------------------------------------------------------------- Результати роботи програми: /
Антиботан аватар за замовчуванням

16.04.2017 11:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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