Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Полоцкий государственный университет
Кафедра технологий программирования
Отчет
По лабораторной работе №4
по курсу «Численные методы в инженерных расчетах»
«Метод релаксации»
Выполнила:
студент группы 10-ИТ-1
Бойченко А.В.
Проверила:
Мурашкевич О.Н.
Полоцк, 2012 г.
Метод последовательной верхней релаксации является одним из наиболее эффективных и широко используемых итерационных методов для решения систем линейных алгебраических уравнений с симметричными положительно определенными матрицами А. Этот метод часто называют SOR-методом (successive over relaxation).
Суть метода релаксации состоит в следующем. После вычисления очередной i-й компоненты (k+1)-го приближения по формуле метода Зейделя
Производят дополнительное смещение этой компоненты на величину , где - параметр релаксации. Таким образом i-я компонента (k+1)-го приближения вычисляется по формуле
При = 1 метод релаксации совпадает м методом Зейделя. При > 1 его принято называть методом последовательной верхней релаксации, а при < 1 методом последовательной нижней релаксации.
Если А симметричная положительно определенная матрица, то при любом значении параметра (0 < < 2) метод релаксации сходится. Часто оказывается возможным выбрать Параметр > 1 так, чтобы SOR-метод сходился существенно быстрее, чем методы Якоби и Зейделя. Однако выбор параметра релаксации довольно трудная задача. Во многих случаях она решается экспериментальным путем.
Существуют различные модификации метода релаксации. Распространенный вариант метода связан с использованием различных параметров l для вычисления различных компонент хl, очередного (к + 1)-го приближения к решению.
Пример
с точностью = 10-3 при = 1,12
Сравнение с точным решением x1 = 0.8, x2 = 2, x3 = 1 показывает, что для получения приближения к решению с точностью = 10-3 потребовалось всего 5 итерации. Решая данные уравнения методами Якоби и Зейделя требуется соответственно 13 и 7 итераций.
Листинг программы:
#include <stdio.h>
int main(int argc, char *argv[])
{
int n,k=0;
double A[3][3],B[3]={0},I[3]={0},ARR[3]={0};
double w,sum=0,tochn;
printf("Enter tochnost': \n");
scanf("%lf",&tochn);
printf("Enter Size of Matrix: \n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("Enter element %d %d of Matrix A:\n", i+1, j+1);
scanf("%lf",&A[i][j]);
}
}
for(int i=0;i<n;i++)
{
printf("Enter element %d of matrix B: \n", i+1);
scanf("%lf",&B[i]);
}
for(int i=0;i<n;i++)//преобразование к виду X=Bx+C
{
for(int j=0;j<n;j++)
{
if(i!=j)
{
A[i][j]=-(A[i][j]/A[i][i]);
}
}
B[i]=B[i]/A[i][i];
A[i][i]=0;
}
//вычисление самих итераций
printf("Enter relaxation parameter: \n");
scanf("%lf",&w);
for(int i=0;i<n;i++)
{
printf("Enter %d begining \n",i);
scanf("%lf",&I[i]);
}
for(int i=0;i<n;i++)
{
ARR[i]=I[i];
}
int y=0;
while(k!=n)
{
k=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j)
sum=sum+A[i][j]*I[j];
}
sum=sum+B[i];
I[i]=sum;
ARR[i]=I[i]+(w-1)*(I[i]-ARR[i]);
sum=0;
}
for(int i=0;i<n;i++)
{
if(ARR[i]-I[i]<=tochn)
k++;
}
y++;
}
printf("Otvet!!!\n");
for(int i=0;i<n;i++)
{
printf("%lf\n",ARR[i]);
}
printf("KOLVO ITERACII: %d ", y);
return 0;
}
Тестирование(пример взят из лекции):