Лабораторная работа по курсу «Численные методы в инженерных расчётах»

Автор работы: Пользователь скрыл имя, 06 Февраля 2014 в 14:12, лабораторная работа

Краткое описание

Условие:
Написать на одном из языков программирования высокого уровня метод Гаусса. Проверить работоспособность программы на конкретной системе. Сравнить результаты работы программы с данными, полученными в MathCad.

Вложенные файлы: 1 файл

Записка Лаба 2.docx

— 39.90 Кб (Скачать файл)

Министерство образования  Республики Беларусь

ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ  УНИВЕРСИТЕТ

 

 

Кафедра технологий программирования

 

 

 

 

 

 

Отчет по лабораторной работе №2

«ПРЯМЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ»

 по курсу 

«Численные методы в инженерных расчётах»

 

 

 

 

 

 

 

 

Выполнил:                                                                            студент группы 11-ИТ-1       Косов А. В.

   Проверила:                                                                            Мурашкевич О.Н.

 

 

 

 

 

Полоцк  2013

 

 

Условие

Написать на одном из языков программирования высокого уровня метод Гаусса. Проверить  работоспособность программы на конкретной системе. Сравнить результаты работы программы с данными, полученными  в MathCad.

Теория

Метод Гаусса

Процесс решения СЛАУ по методу Гаусса состоит  из двух этапов. На первом этапе – прямой ход – система (1) приводится к треугольному виду. На втором этапе – обратный ход – происходит последовательное вычисление искомых неизвестных, начиная с xn.

Практическая  часть

/****************************************************************************

*                                                                          *

* File    : main.c                                                         *

*                                                                          *

* Purpose : Console mode (command line) program.                           *

*                                                                          *

* History : Date      Reason                                               *

*           00/00/00  Created                                              *

*                                                                          *

****************************************************************************/

 

#include <stdio.h>

#include <stdlib.h>

 

/****************************************************************************

*                                                                          *

* Function: main                                                           *

*                                                                          *

* Purpose : Main entry point.                                              *

*                                                                          *

* History : Date      Reason                                               *

*           00/00/00  Created                                              *

*                                                                          *

****************************************************************************/

int n=50;

void printmass(double arr[][n]) ;

 

int main(int argc, char *argv[])

{ int num;

int i=0, j=0, k=0;

double A[n][n];

double B[n], X[n]; 

printf("Vvedite 1-s faila, 2-random\n");

scanf("%d",&num);

 

if(num==1){

for(i=0;i<n;i++)

for(j=0;j<n;j++)A[i][j]=rand()%10;

    FILE *f=fopen("1.txt", "w");

    for (i=0;i<n;i++){

for (j=0;j<n;j++)

fprintf(f,"%lf\t",A[i][j]);

            fprintf(f,"\n");}

fclose(f);  

for(i=0;i<n;i++){

int sb=rand()%10;

B[i]=sb;}

    FILE *f1=fopen("2.txt", "w");

    for (i=0;i<n;i++){

fprintf(f,"%lf\n",B[i]);

            }

fclose(f);

 

}else

{if(num==2){ 

double temp;

FILE *f=fopen("RandA.txt", "r");

while (!feof(f))

{

 

fscanf(f,"%lf",&temp);

i++;

}

 

//Ввод матрицы А

f=fopen("RandA.txt","r");

if (f==NULL) return -1;

for (i=0;i<n;i++)

for (j=0;j<n;j++)

fscanf(f,"%lf",&A[i][j]);

fclose(f);

//Дополнение матрици  А вектором F

f=fopen ("RandB.txt","r");

if (f==NULL) return -1;

for (i=0;i<n;i++)

fscanf(f,"%lf",&B[i]);

fclose(f);

}else {printf("error\n"); return -1;}

}

 

printmass(A);

    printf("\n");

printf("\n"); printf("\n");printf("\n");printf("\n");printf("\n");

    for(j=0;j<n;j++) printf("%0.2lf\t",B[j]);

printf("\n");

double km;

for(i=0;i<n-1;i++){

for(j=i+1;j<n;j++){

if(A[i][i]!=0) km=-A[j][i]/A[i][i]; else break;

for(k=i;k<n;k++){

A[j][k]=A[j][k]+km*A[i][k];

}

B[j]=B[j]+km*B[i];

}

}

printmass(A);

   

// обратный ход

km=0;

for(i=n -1;i>=0;i--){

X[i]=(B[i]-km)/A[i][i];

km=0;

for(j=n-1;j>=i;j--) km+=X[j]*A[i-1][j];

 

for(j=0;j<n;j++) printf("%0.3lf\t",X[j]);

 

    return 0;

}

 

void printmass(double arr[][n])

{

printf("\n");

for(int i=0;i<n;i++){

for(int j=0;j<n;j++) printf("%0.2lf\t",arr[i][j]);

printf("\n");

}

printf("\n");

 

}

 

 

Работа программы:

 

 

Решение в МаthCad:

 

Вывод: В результате выполнения лабораторной работы мы реализовали метод Гаусса.


Информация о работе Лабораторная работа по курсу «Численные методы в инженерных расчётах»