Форум программистов, компьютерный форум CyberForum.ru

Метод Гауса системы линейных уравнений: разбор кода - C++

Восстановить пароль Регистрация
 
Alen4a
Сообщений: n/a
01.06.2012, 23:42     Метод Гауса системы линейных уравнений: разбор кода #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int obr(int N,double *A)
{
int i,j,ii,J,k,jj,t=1;
double *ish_matr,*obrmatr=NULL,*y, *r,*matr,*b,*prv;
double par,sum;
ish_matr=(double*)malloc(N*N*sizeof(double));
obrmatr=(double*)malloc(N*N*sizeof(double));
y=(double*)malloc(N*sizeof(double));
r=(double*)malloc(N*sizeof(double));
b=(double*)malloc(N*sizeof(double));
matr=(double*)malloc(N*N*sizeof(double));
prv=(double*)malloc(N*N*sizeof(double));
for (J=0;J<N;J++)
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
*(matr+i*N+j)=*(A+i*N+j);
for(i=0;i<N;i++)
{
if(i==J) b[i]=1.0;
else b[i]=0.0;
}
par=0;
for(j=0;j<N-1;j++)
{
if (*(matr+j*N+j)==0)
{
ii=j+1;
do
{
if((*(matr+ii*N+j)!=0)||(ii==N-1))
{
break;
}
ii++;
}
while(true);
if((*(matr+j*N+j)==0)&&(ii==N-1))
{
t=0;
}
for(k=0;k<N;k++)
{
r[k]=*(matr+j*N+k);
*(matr+j*N+k)=*(matr+ii*N+k);
*(matr+ii*N+k)=r[k];
} }
for(i=j+1;i<N;i++)
{
if(*(matr+i*N+j)!=0)
{
par = *(matr+i*N+j)/(*(matr+j*N+j));
for(jj=j;jj<N;jj++)
*(matr+i*N+jj)-=par*(*(matr+j*N+jj));
b[i]-=par*b[j];
}
}
}
for (i=0;i<N;i++)
{
if (*(matr+i*N+i)==0)
{
t=0;
}
}
if(t!=0)
{
for(i=N-1;i>=0;i--)
{
for(j=N-1;j>i;j--)
b[i]-=*(matr+i*N+j)*y[j];
y[i]=b[i]/(*(matr+i*N+i));
}
for(i=0;i<N;i++){
*(obrmatr+i*N+J)=y[i];}
}
else return 0;
}
FILE*fp2;
fp2 = fopen("obr.txt", "wt");
for(i=0;i<N;i++){
fprintf(fp2,"\n");
for(j=0;j<N;j++)
fprintf(fp2," %lf", *(obrmatr+i*N+j));}
fclose(fp2);
FILE*fp3;
fp3 = fopen("proverka.txt","wt");
for(i=0;i<N;i++){
for(j=0;j<N;j++){
*(prv+i*N+j)=0;
for(k=0;k<N;k++)
*(prv+i*N+j)+=*(A+i*N+k)*(*(obrmatr+k*N+j));}}
for(i=0;i<N;i++){
fprintf(fp3,"\n");
for(j=0;j<N;j++)
fprintf(fp2," %lf", *(prv+i*N+j));}
return 1;
}
int main()
{
int l,N,k=0;
double *A;
printf("Vvedite razmer matricy: ");
scanf("%d",&N);
A=(double*)malloc(N*N*sizeof(double));
FILE *fp=fopen("1.txt","rt");
while(fscanf(fp, "%lf", &*(A + k))!=EOF)
{
k++;
if((k%N)==0) printf("\n");
}
l=obr(N,(double*)A);
printf("\n%d", l);
getch();
}
Добавлено через 7 минут
Пмогите=(

Добавлено через 18 минут
Пожалуйста=(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 23:42     Метод Гауса системы линейных уравнений: разбор кода
Посмотрите здесь:

Коэффициенты системы линейных уравнений C++
C++ Метод гауса система ленейных уравнений
решение системы уравнений методом Гауса C++
C++ Решение системы линейных уравнений.
C++ Решение системы линейных уравнений
C++ Метод простых итераций для решения системы линейных уравнений
C++ Решение системы линейных уравнений
C++ Численное решение системы линейных уравнений

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 16:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru