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

Методом Гаусса решить систему n линейных алгебраических уравнений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Какой учебник посоветуете мнедля изучения c++. http://www.cyberforum.ru/cpp-beginners/thread351802.html
Здравствуйте я новичек на этом форуме и вообще в c++. Какой учебник посоветуете мнедля изучения c++. (Я скачал wxdevcpp_7.3.1 )
C++ Время работы программы (алгоритма) не получается посчитать время работы алгоритма программы! #include <iostream> using std::cout; using std::cin; using std::endl; #include <cstdlib> using std::rand; using std::srand; http://www.cyberforum.ru/cpp-beginners/thread351793.html
Функция для перевода курсора на заданную координату C++
Как создать функцию для перевода курсора на заданную координату? Помогите!
задача(( C++
помогите пожалуйста((хотя бы просто объсните как это сделать с помощью 2х переменных,что они должны представлять собой: Дано число A. Вычислить A15, используя две вспомогательные переменные и пять операций умножения. Для этого последовательно находить A2, A3, A5, A10, A15. Вывести все найденные степени числа A.
C++ Как из файла txt считать данные в массив? http://www.cyberforum.ru/cpp-beginners/thread351752.html
Добрый день. С с++ у меня очень плохо, но срочно нужно сделать одну вещь. Есть файл file.txt, в нем располагается массив данных, к примеру 10*10 заполненый числами типа "1.40844094061486 -0.182515356102092 0.66699169427249". Нужно чтобы с++ открыл данный файл, и создал массив с размерностью в зависимости от кол-ва чисел в файле. В моем случае размерность примерно 20*10.
C++ Арканоид Нужен арканоид с классами и наследованием, с конструкторами и деструкторами! Уже много где прошелся, но со всем этим его нигде нет!((( Есть у кого-нибудь? подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
15.09.2011, 16:33     Методом Гаусса решить систему n линейных алгебраических уравнений
Цитата Сообщение от lp_4eva Посмотреть сообщение
Помогите пожалуйста написать на с++ методом Гаусса решить систему n линейных алгебраических уравнений.
- Вот код и результат работы
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <windows.h>//malloc, system("pause")
#include <stdio.h>  //i/o
#include <conio.h>  //getch
#include <math.h>
 
void ShowVector(int n, double * vec);
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
    int i,j,n;
    double **a, *b, *x;
    do
    {
        printf("Enter NUM of equations: ");
        scanf("%d",&n);
        //Выделяем память под матрицу А и векторы В и Х
        a = (double **)malloc(n*sizeof(double));
        b = (double *)malloc(n*sizeof(double));
        x = (double *)malloc(n*sizeof(double));
        for(i = 0; i < n; i++)
        {
            a[i] = (double *)malloc(n*sizeof(double));
            //Ввод a
            for(j = 0; j < n; j++)
            {
                printf("a[%d][%d] = ",i + 1,j + 1);
                scanf("%lf",&a[i][j]);
            }
        }
        //Ввод b
        for(i = 0; i < n; i++)
        {
            printf("b[%d] = ",i + 1);
            scanf("%lf",&b[i]);
        }
        
        printf("\tSee input\r\n");
        printf("Matrix A:\r\n");
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        printf("Vector B:\r\n");
        ShowVector(n, b);
        
        printf("\tSolving on Gauss method\r\n");
        PryamoiHod(n, a, b);
        printf("Forvard Gauss course\r\n");//Прямой ход
        printf("Matrix A:\r\n");
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        printf("Vector B:\r\n");
        ShowVector(n, b);
 
        ObratniHod(n, a, b, x);
        printf("Back Gauss course\r\n");//Обратный ход
        printf("Matrix A:\r\n");
        for(i = 0; i < n; i++)
            ShowVector(n, a[i]);
        printf("Vector B:\r\n");
        ShowVector(n, b);
 
        printf("Results :\r\n");
        ShowVector(n, x);
 
        printf("Press Y for new input\r\n");
        //Чистим память
        free((void *)a);
        free((void *)b);
        free((void *)x);
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
void ShowVector(int n, double * vec)
{
    for(int i = 0; i < n; i++)
        printf("%.3f ",vec[i]);
    printf("\r\n");
}
 
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                        if(v != 0)
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][j] = a[i][j] - v*a[k][j];
                        }
                }
        }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
Результаты работы
Enter NUM of equations: 5
a[1][1] = 2
a[1][2] = 0
a[1][3] = 0
a[1][4] = -12
a[1][5] = 3
a[2][1] = 0
a[2][2] = 2
a[2][3] = 0
a[2][4] = 3
a[2][5] = 2
a[3][1] = 0
a[3][2] = 0
a[3][3] = 38
a[3][4] = 5
a[3][5] = 7
a[4][1] = -12
a[4][2] = 13
a[4][3] = 5
a[4][4] = 0
a[4][5] = 0
a[5][1] = 3
a[5][2] = 2
a[5][3] = 7
a[5][4] = 0
a[5][5] = 0
b[1] = 22
b[2] = 14
b[3] = 456
b[4] = 0
b[5] = 5
See input
Matrix A:
2.000 0.000 0.000 -12.000 3.000
0.000 2.000 0.000 3.000 2.000
0.000 0.000 38.000 5.000 7.000
-12.000 13.000 5.000 0.000 0.000
3.000 2.000 7.000 0.000 0.000
Vector B:
22.000 14.000 456.000 0.000 5.000
Solving on Gauss method
Forvard Gauss course
Matrix A:
-12.000 13.000 5.000 0.000 0.000
0.000 5.250 8.250 0.000 0.000
0.000 0.000 38.000 5.000 7.000
0.000 0.000 0.000 -11.662 3.474
0.000 0.000 0.000 0.000 3.596
Vector B:
0.000 5.000 456.000 50.794 64.678
Back Gauss course
Matrix A:
-12.000 13.000 5.000 0.000 0.000
0.000 5.250 8.250 0.000 0.000
0.000 0.000 38.000 5.000 7.000
0.000 0.000 0.000 -11.662 3.474
0.000 0.000 0.000 0.000 3.596
Vector B:
0.000 5.000 456.000 50.794 64.678
Results : <- Это ответы
-9.967 -12.491 8.555 1.002 17.987
Press Y for new input


 Комментарий модератора 
Сколько раз говорилось, такие полотна - под кат!


Добавлено через 45 минут
silent_1991,
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сколько раз говорилось, такие полотна - под кат!
как делать такие поля для скрывания кода???В FAQ и инструкциях по форуму ничего не нашёл по управлению тегами - поэтому и не смог скрыть...
 
Текущее время: 05:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru