Автор работы: Пользователь скрыл имя, 06 Февраля 2014 в 14:12, лабораторная работа
Условие:
Написать на одном из языков программирования высокого уровня метод Гаусса. Проверить работоспособность программы на конкретной системе. Сравнить результаты работы программы с данными, полученными в MathCad.
Министерство образования Республики Беларусь
ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра технологий программирования
по курсу
«Численные методы в инженерных расчётах»
Выполнил:
Проверила:
Полоцк 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()
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");
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]*
}
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:
Вывод: В результате выполнения лабораторной работы мы реализовали метод Гаусса.
Информация о работе Лабораторная работа по курсу «Численные методы в инженерных расчётах»