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

Метод Зейделя. С++ - C++

Восстановить пароль Регистрация
 
Sampti
Сообщений: n/a
23.10.2013, 19:33     Метод Зейделя. С++ #1
Доброго времени суток. помогите, пожалуйста, дополнить этот код (метод гаусса) методом зейделя. знаю, что тем было много по этому поводу, но я не смог сам додуматься
p.s.: не понимаю ещё, как использовать точность в методе гаусса, если подскажите - буду очень благодарен. Точность 0,0001

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <stdio.h>
#include <process.h>
#include <iostream>
float **a, *b, *x;
int N;
using namespace std;
 
void freematrix()
{
    int i;
    for (i = 0; i < N; i++)
    {
        delete [] a[i];
    }
    delete [] a;
    delete [] b;
    delete [] x;
}
 
void allocmatrix() //allocate memory for matrixes
{
    int i, j;
    x = new float[N];
    b = new float[N];
    a = new float*[N];
 
    for (i = 0; i < N; i++)
    {
        a[i] = new float[N];
 
    }
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            a[i][j] = 0;
        }
        b[i] = 0;
        x[i] = 0;
    }
}
 
void readmatrix()//read matrixes a and b from input data
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            cin >> a[i][j];
        }
        cin >> b[i];
    }
}
 
void printmatrix()//print matrix "a"
{
    int i, j;
    cout << endl;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            printf(" %+f*X%d", a[i][j], j);
        }
        printf(" =%f\n", b[i]);
    }
}
 
void printresult()
{
    int i;
    printf("\n");
    printf("Result\n");
    for (i = 0; i < N; i++)
    {
        printf("X%d = %f\n", i, x[i]);
    }
}
 
void diagonal()
{
    int i, j, k;
    float temp = 0;
    for (i = 0; i < N; i++)
    {
        if (a[i][i] == 0)
        {
            for (j = 0; j < N; j++)
            {
                if (j == i) continue;
                if (a[j][i] != 0 && a[i][j] != 0)
                {
                    for (k = 0; k < N; k++)
                    {
                        temp = a[j][k];
                        a[j][k] = a[i][k];
                        a[i][k] = temp;
                    }
                    temp = b[j];
                    b[j] = b[i];
                    b[i] = temp;
                    break;
                }
            }
        }
    }
}
void main()
{
    int i = 0, j = 0, k = 0;
    printf("\Enter the number of equations:  ");
    cin >> N;
    allocmatrix();
    //read data
    printf("\nSolving Linear Systems\n");
    printf("\nenter the elements line by line separating by a space, e.g.:\n");
    printf("\na11 a12...a1n b1\n");
    printf("\na21 a22...a2n b2\n");
    printf("\n................\n");
    printf("\nan1 an2...ann bn\n");
    printf("\nEnter the elements:\n");
    readmatrix();
    diagonal();
    printmatrix();
    //process rows
    for (k = 0; k < N; k++)
    {
        for (i = k + 1; i < N; i++)
        {
            float M = a[i][k] / a[k][k];
            for (j = k; j < N; j++)
            {
                a[i][j] -= M * a[k][j];
            }
            b[i] -= M*b[k];
        }
    }
    printmatrix();
    for (i = N - 1; i >= 0; i--)
    {
        float s = 0;
        for (j = i; j < N; j++)
        {
            s = s + a[i][j] * x[j];
        }
        x[i] = (b[i] - s) / a[i][i];
    }
    printresult();//print the result
    system("pause");//Pause
    freematrix();//Clear
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 19:33     Метод Зейделя. С++
Посмотрите здесь:

Метод Зейделя C++
C++ Метод итераций и метод Зейделя
метод зейделя C++
C++ Метод Зейделя
C++ Метод Зейделя в С++
Метод Зейделя C++
C++ метод Зейделя. c++
C++ СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя

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

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

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