Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Звіт
До лабораторної роботи №4
З курсу:
Комп’ютені методи дослідження систем керування
На тему:
СИСТЕМИ НЕЛІНІЙНИХ РІВНЯНЬ.
МЕТОД НЬЮТОНА ТА -АЛГОРИТМ
Мета роботи: ознайомитися з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона та екстраполяційним методом – -алгоритмом.
Завдання:
9
Метод Ньютона з кінцево-різницевою матрицею Якобі
(оберт.матриці методом Гауса з вибор. гол. ел-тів по стовпцю)
№9
поч. наближення
Текст програми:
#include "stdafx.h"
#include<iomanip>
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
void Func(double*x,double*f)
{
f[0]=pow(x[0],2)-pow(x[1],2)+0.1-x[0];
f[1]=2.0*x[0]*x[1]-0.1-x[1];
}
void main()
{int n=2;
bool cond_N;
double x[2] = {1, 1}, x_old[2] = {1, 1}, J[2][2], ee,x_[2],f_[2],h=1e-6;
double INVERS[2][2], E[2][2], V[2][2], C[2][2], P[2], X[2], Y[2], f[2], inx[2];
ee=0.00001;
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;
Func(x,f);
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
x_[k]=x[k];
x_[j]=x[j]+h;
Func(x_,f_);
J[i][j]=(f_[i]-f[i])/h;
}
double A[2][2], B[2];
for (int b=0;b<n;b++)
{
for (int i=0;i<n;i++)
inx[i]=i;
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]=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][j]-V[i][k]*C[k][j];
}
}
}
X[n-1]=Y[n-1];
for (int i=n-2;i>=0;i--)
{ // обернений хід
double Scx=0;
for (int j=i+1;j<n;j++)
{
Scx=Scx+C[i][j]*X[j];
}
X[i]=Y[i]-Scx;
}
for (int i=0;i<n;i++)
INVERS[i][b]=X[i];
}
double Sinvf;
for (int i=0;i<n;i++)
{
Sinvf=0;
for (int j=0;j<n;j++)
Sinvf=Sinvf+INVERS[i][j]*f[j];
x[i]=x_old[i]-Sinvf;
}
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);
cout<<"rozvazok"<<endl;
for(int i=0; i<n; i++)
cout<<x[i]<<endl;
cout<<"Perevirka"<<endl;
f[0]=pow(x[0],2)-pow(x[1],2)-0.1-x[0];
f[1]=2.0*x[1]*x[0]+0.1-x[1];
cout<<f[0];
cout<<f[1];
getch();
}
РЕЗУЛЬТАТ ПРОГРАМИ:
/
Висновок:
Під час лабораторної роботи я ознайомився з найпоширенішим ітераційним методом розв’язування систем нелінійних рівнянь – методом Ньютона та екстраполяційним методом – -алгоритмом.