- •Обзор методов решения систем линейных алгебраических уравнений
- •1.1 Прямые методы решения
- •1.2 Вариационные методы
- •Метод Якоби
- •Решение на однопроцессорных компьютерах
- •Решение на многопроцессорных компьютерах
- •Основные функции mpi
- •Численный эксперимент
- •Расчет на однопроцессорных компьютерах
- •4.2 Расчет на многопроцессорных компьютерах
- •Литература
Численный эксперимент
Расчет на однопроцессорных компьютерах
#include <fstream>
#include <math.h>
#include <iomanip>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <time.h>
using namespace std;
double x[100], x0[1001], b[1001], a[1001][1001], s, d, eps=1e-8, m, k, h, pi=3.1415926;
int n, i, j ;
void work(int n)
{
clock_t t0, t1;
//Засекаем время.
t0 = clock();
h=1.0/n;
memset(a,0,sizeof(a));
for (i=1;i<=n-1;i++)
{
if (i>1) a[i][i-1]=1;
a[i][i]=-2;
if(i<n-1) a[i][i+1]=1;
b[i]=-4*pi*pi*h*h*sin(2*pi*i*h);
}
k=0;
for (i=1;i<=n-1;i++) x[i]=0; // Начальное приближение
do
{ k++;
for (i=1;i<=n-1;i++) x0[i]=x[i];
m=0;
for (i=1;i<=n-1;i++)
{ s=0;
for (j=1;j<=n;j++) if (i!=j) s=s+a[i][j]*x0[j];
x[i]=(b[i]-s)/a[i][i];
d=fabs(x[i]-x0[i]); if (m<d) m=d;
}
} while (m>eps);
for (i=1;i<=n-1;i++) printf("%6.2lf",x[i]);
cout<<endl;
for (i=1;i<=n-1;i++) printf("%6.2lf",sin(2*pi*i*h));
cout<<endl<<"k="<<k<<endl;
cout<<"d="<<d<<endl;
t1 = clock();
cout << "t: " <<(t1 - t0)/CLOCKS_PER_SEC << "\n";
}
void main()
{
// freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
work(50);
//work(100);
//work(101);
//work(1000);
getch();
}
4.2 Расчет на многопроцессорных компьютерах
Не успела.
Литература
А. А. Букатов, В. Н. Дацюк, А. И. Жегуло “Программирование многопроцессорных вычислительных систем”
Л. И. Турчак “Основы численных методов”
А. А. Самарский “Введение в теорию разностных схем”
А. А. Самарский, А. В. Гулин “Численные методы”
1
2