close

Вход

Забыли?

вход по аккаунту

?

laba4-Vinnik-10IT2

код для вставкиСкачать
 МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БУЛАРУСЬ
ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра технологий программирования
Отчет по лабораторной работе №4
по дисциплине: ЧИСЛЕННЫЕ МЕТОДЫ В ИНЖЕНЕРНЫХ РАСЧЕТАХ
Вариант 4
Выполнил:
Винник А.А.
Агородник К.А.
Группа 10-ИТ-2
Проверил:
Мурашкевич О.Н.
Полоцк, 2012
Цель: разобрать методы решения систем линейных уравнений, реализовать один из методов(по варианту) на практике.
Задача: Реализовать Метод Зейделя на практике, проверить работоспособность алгоритма.
Теоретические сведения:
Метод Зейделя представляет собой некоторую модификацию метода простой итерации. Основная идея метода заключается в том, что при вычислении (k+1)-го приближения неизвестной Хi учитываются уже вычисленные ранее (k+1)-ые приближения неизвестных х1, х2, ... хn.
Если имеется приведенная линейная система
x_i=β_i+∑_(j=0)^n▒〖α_ij x_j;(i=1,2,...,n).〗
За начальное приближение выберем нули:
x1 (0), x2 (0), ... , xn (0).
Далее будем вычислять приближения до определенной точности:
Итерация заканчивается по выполнению условия:
Листинг программы:
#define eps 0.00001
#include <stdio.h>
#include <math.h>
int m;
int main(int argc, char *argv[])
{
if (argc<3) {
printf("No input\n");
return -1;
}
int i=0,j=0; double temp;
FILE *f=fopen(argv[1], "r");
while (!feof(f))
{
fscanf(f,"%lf",&temp);
i++;
}
m=(int)sqrt(i);
double A_array[m][m+1];
//Ввод матрицы А
f=fopen(argv[1],"r");
if (f==NULL) return -1;
for (i=0;i<m;i++)
for (j=0;j<m;j++)
fscanf(f,"%lf",&A_array[i][j]);
fclose(f);
//Дополнение матрици А вектором F
f=fopen(argv[2],"r");
if (f==NULL) return -1;
for (i=0;i<m;i++)
fscanf(f,"%lf",&A_array[i][m]);
fclose(f);
/*/Вывод исходной матрицы А
printf("Source Matrix\n");
for (i=0;i<m;i++)
{
for (j=0;j<m+1;j++)
printf(" %9.5lf",A_array[i][j]);
printf("\n");
}*/
//--------------------------------------/
double sum;
double tmpeps, tmpx;
double X_array[m];
for (i = 0; i < m; i++)
X_array[i] = 0.0;
for (i = 0; i < m; i++) //проверка на сходимость
{
sum = 0;
for (j = 0; j < m; j++)
if (j != i)
sum += fabs(A_array[i][j]);
if (sum >= fabs(A_array[i][i]))
{
printf("The SLAE is not convergent\n");
return 0;
}
}
do
{
tmpeps = 0.0;
for (i = 0; i < m; i++)
{
sum = 0.0;
for (j = 0; j < m; j++)
sum += (A_array[i][j])*X_array[j];
tmpx = X_array[i];
X_array[i] -= (1.0*(sum - A_array[i][m]))/A_array[i][i];
if ((fabs(tmpx - X_array[i])) > tmpeps)
tmpeps = fabs(tmpx - X_array[i]);
}
}while (tmpeps > eps);
//--------------------------------------/
printf("\n");
for (i=0;i<m;i++)
printf("x[%d]=%9.5lf\n",i,X_array[i]);
getchar();
return 0;
}
Для проверки корректности работы программы реализуем программу для генерации матриц заданного порядка со случайными значениями элементов. Сформируем матрицу А и вектор F(представлены в прилагаемых файлах RandA.txt и RandB.txt)
На рисунке 1 представлен результат нахождения корней в среде MathCAD_14 и результат подсчетов программы(в консоли) для матрицы порядка 4. Тест по варианту:
Рисунок 1 - тест для матрицы 4х4
Документ
Категория
Рефераты
Просмотров
11
Размер файла
64 Кб
Теги
10it2, laba, vinnik
1/--страниц
Пожаловаться на содержимое документа