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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Заполнение квадратной матрицы http://www.cyberforum.ru/cpp-beginners/thread985926.html
Здравствуйте. Нужно написать программу заполнения правого верхнего треугольника квадратной матрицы, включая диагональ, последовательностью натуральных чисел, а нижнего левого - нулями. Есть...
C++ Динамический одномерный массив, запоминать до конца ввода Здравствуйте, уважаемые программисты! Как сделать, чтобы вводимые символы запоминались до нажатия клавиши "Enter"???(массив динамический) char *mas=new char ; for (i=0; ??? ; i++) cin >> mas; http://www.cyberforum.ru/cpp-beginners/thread985912.html
Ребят, как разобраться в составлении программы на Си. Прошу C++
Здравствуйте ребят! Не могли бы вы мне объяснить или показать с чего конкретно начинать по одной задачи. Как этот алгоритм построить, точнее блок-схему. Дана задача : При покупке товара на...
C++ Отображение Пуанкаре для системы Хенона-Хейлеса и метод Рунге Кутта
Здравствуйте, столкнулся с такой проблемой, не могу понять ошибку, то ли сам метод не понимаю, то ли где то прокралась. Вообщем суть задачи, отрисовать точки сечения Пуанкаре системы:...
C++ Как сделать что бы пробел считался и программа не зависала? http://www.cyberforum.ru/cpp-beginners/thread985890.html
Здравствуйте! Помогите с вводом данных в файл. Как сделать что бы пробел считался и программа не зависала? Спасибо за помощь! void ad() { cout <<"Пункт меню создание объявления на продажу...
C++ Из группы подряд идущих элементов с одинаковыми значениями оставить только первый Почему не работает программа? не находит сторожа, хотя я их объявляю) //Дан список из n целых чисел a1,a2,..,an. Из группы подряд идущих элементов с одинаковыми значениями оставить только первый.... подробнее

Показать сообщение отдельно
Sampti
Сообщений: n/a

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

23.10.2013, 19:33. Просмотров 239. Ответов 0
Метки (Все метки)

Доброго времени суток. помогите, пожалуйста, дополнить этот код (метод гаусса) методом зейделя. знаю, что тем было много по этому поводу, но я не смог сам додуматься
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
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru