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

Гаусс( - C++

Восстановить пароль Регистрация
 
Анют- А
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 10
23.12.2010, 18:17     Гаусс( #1
Всем привет! Ребята, пожалуйста помогите мне с решением системы линейных уравнений с помощью метода Гаусса. Хотяб квадратную матрицу, а то не могу ничего сообразить уже второй час (
Пожалуйста, помогите мне...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2010, 18:17     Гаусс(
Посмотрите здесь:

C++ Гаусс для коллекции
C++ Гаусс
C++ Гаусс
C++/CLI Гаусс Visual C++
Гаусс-4, откуда взялись коэффициенты? Fortran
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
23.12.2010, 18:26     Гаусс( #2
Анют- А, http://www.cyberforum.ru/cpp-beginne...ead104788.html
Анют- А
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 10
23.12.2010, 18:32  [ТС]     Гаусс( #3
Я только что изучила функции, а там написано на старом языке (си), и мне не понятно (
c++\noob
 Аватар для c++\noob
-2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 52
24.12.2010, 05:05     Гаусс( #4
Держи, недавно тоже делал. Ввод данных в input.txt ,вывод осуществится в output.txt после нажатия екзешника. Если одного из файлов(input или output) не будет - создашь самостоятельно.Короче, зачем я обьясняю ,ты и сама наверно всё знаешь.)))

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
#include<stdio.h>
int a[50][50],j,i,k,n,m,um[50],rab,x[50],z;
FILE *f,*f1;
 
 int main()
{   
    f=fopen("input.txt","r");
    f1=fopen("output.txt","wt");
    fscanf(f,"%d",&n);
    fscanf(f,"%d",&m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        fscanf(f,"%d",&a[i][j]);
        fscanf(f,"/n");
    }
    //делаем 0 под главной диагональю
    rab=0;
    while(rab<=n-2)
    {
        for(i=rab+1;i<n;i++)
        {
            for(j=0;j<m;j++)
                    um[j]=a[rab][j]*a[i][rab];
            
            for(j=0;j<m;j++)
            {   
                if (a[rab][rab]!=0)
                {
                    a[i][j]=a[i][j]*a[rab][rab];
                    a[i][j]=a[i][j]-um[j];
                }
                
            }
                
        }
        rab++;
    }
 
    //убираем нулевые строки
    for(i=0;i<n;i++)
        {   
            k=0;
            for(j=0;j<m;j++)
                if (a[i][j]==0) k++;
            if (k==m) 
            {
                for(j=0;j<m;j++)
                    a[i][j]=a[n-1][j];
                n=n-1;
                i--;
            }
            
        }
        
    //выводим переделанную матрицу
    fprintf(f1,"переделанная матрица:\n");
    for (i=0;i<n;i++)
        {
            for (j=0;j<m;j++)
            fprintf(f1,"%8d",a[i][j]);
            fprintf(f1,"\n");
        }
    fprintf(f1,"\n");
    //pешаем систему
    fprintf(f1,"Решение\n");
    if (m-1>n) 
    {
        fprintf(f1,"Beckonechno mnogo resheniy");
        z=1;
    }
    if (z==0)
    {
        for(i=0;i<n;i++)
        {   
            k=0;
            for(j=0;j<m-1;j++)
                if (a[i][j]==0) k++;
            if (k==m-1) 
            {
                fprintf(f1,"Net resheniy");
                z=1;
                break;
            }
        }
    }
    
    if (z==0)
    {
        x[m-2]=a[n-1][m-1]/a[n-1][m-2];
        k=2;
        while(m-k!=0)
        {
            for (i=n-2;i>=0;i--)
            {
                a[i][m-k]=a[i][m-k]*x[m-k];
                a[i][m-1]=a[i][m-1]-a[i][m-k];
            }
            x[m-k-1]=a[n-k][m-1]/a[n-k][m-k-1];
            k++;
        }
        for (i=0;i<m-1;i++)
            fprintf(f1,"%8d",x[i]);
    }
        
fclose(f1);fclose(f);
}
Анют- А
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 10
24.12.2010, 18:14  [ТС]     Гаусс( #5
Я накалякала программу на фоне Вашей помощи, но всё равно тугость (( кому не трудно помогите пжалста разобраться в чем ошибка.
Не понимаю
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
void gauss(double A[MAX_SIZE][MAX_SIZE], int &n, int &m)
{
    for (int j = 0; j < n; i++)
    {   
        int t= 0;
        double value = 1E-9;
        for (int i = 0; i < m; j ++)
            if (fabs(A[i][j]) >= value) 
                t++;
        if (fabs(A[i][i]) < value )
        {
            for(i = 0; i < m; j++)
                A[j][i]=A[n-1][i];
            n = n-1;
            j--;
        }
    }
 
        for (int j = i + 1; j < n; j ++)
        {   
            
            double c = -(A[j][i] / A[i][i]);
            for (int k = i; k < m; k++)
            {               
                A[j][k] +=  A[i][k]* c;
            }
        }
 
        print(A, n, m);
        cout << endl;
    }
Мне объяснили что с нулем сравнивать нельзя .. поэтому пишу очень маленькое число..
Yandex
Объявления
24.12.2010, 18:14     Гаусс(
Ответ Создать тему
Опции темы

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