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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sampti
Сообщений: n/a
#1

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

23.10.2013, 19:33. Просмотров 240. Ответов 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
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 19:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод Зейделя. С++ (C++):

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод итераций и метод Зейделя - C++
Здравсвуйте программисты! Спасибо всем за помощь в предыдущих темах, осталась последняя лаба, которую нужно решить по предмету &quot;Численные...

Метод Зейделя - C++
решить систему нелинейных уравнений Методом зейделя:

Метод Зейделя - C++
ошибка найдена. тема закрыта

Метод Зейделя - C++
Ребята, каждый из вас уже делал лабы по матрицам. Если у кого-то есть готовая лаба по методу Зейделя, прошу, напишите ее тут и желательно с...

Метод Зейделя - C++
Я написал прогу по методу Зейделя, так вот при матрице 3х3 выдает после 7 итерации правильный ответ) а при матрице 4х4 уже на второй...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 19:33
Привет! Вот еще темы с ответами:

Метод Зейделя: - C++
Здравствуйте, у меня получается на данный момент X1 := -8.32587e+307 X2 := -inf X3 := inf я скопировал сам метод зейделя с...

метод Зейделя - C++
Ребят помогите пожалуйста, а то зачот простаивает)Нужна программка реализующая метод Зейделя(или Зейзеля препод так написал что...

Метод Зейделя в С++ - C++
всем доброго времени суток... у меня такая проблема, есть программа по решению систем линейных уравнений методом Зейделя написали мне...

метод Зейделя. c++ - C++
В цикле do while есть ошибка, из-за неё программа не правильно считает Xold и Xnew. Помогите, пожалуйста, найти ошибку... #pragma once ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru