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

Метод простых итераций (для трехмерной матрицы) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Лексический анализатор http://www.cyberforum.ru/cpp-beginners/thread363888.html
Написал программу, я надеюсь, лексического анализатора для конкретного куска программы. В программе я из текстового файла считывал текст кодируемой программы, потом с помощью функции fgetc() и условных операторов определял лексему, кодировал её целым числом и во второй текстовый файл записывал это число, пробелы и перенос строки учитывался. fgetc() возвращает int-значение символа, поэтому перед...
C++ Моя первая задача, ток с паскаля перешел, подкоректируйте плиз.. #include <iostream> #include <stdlib.h> #include <locale.h> #include <Math.h> using namespace std; void main() { setlocale(LC_CTYPE,""); int k=1;int step=1; double e,sum,otv,x,a; http://www.cyberforum.ru/cpp-beginners/thread363867.html
C++ Не работает прога. Помогите
#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> float f1(float); float f2(float); float f3(float); float sub(float);
решите задание C++
do - while Организовать цикл, который принимает целые числа с клавиатуры и подсчитывает к-во неотрицательных чисел. Окончание цикла - ввод числа < -100.
C++ Заполнение массива случайными числами http://www.cyberforum.ru/cpp-beginners/thread363854.html
Доброго времени суток. Перейду сразу к сути: Надо построить массив из 5000 целых случайных чисел и отсортировать его сортировкой Шелла, я в С++ новичек, ещё толком в языке даже не разобрался, сортировку я нашел на форуме, а вот помогите с созданием такого массива, который будет заполнен случайными числами. И подскажите пожалуйста как вывести массив до и массив после на экран.
C++ Подсчитать количество неотрицательных чисел массива do - while Организовать цикл, который принимает целые числа с клавиатуры и подсчитывает к-во неотрицательных чисел. Окончание цикла - ввод числа < -100. подробнее

Показать сообщение отдельно
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
10.10.2011, 22:15     Метод простых итераций (для трехмерной матрицы)
Кстати, valarray удобно использовать, когда операции с целыми строчками производятся. Вот когда-то писал:
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 <iostream>
#include <cmath>
#include <limits>
#include <valarray>
#include <algorithm>
 
using namespace std;
 
typedef valarray<double> row, column;
typedef valarray<row> matrix;
 
const double inf = numeric_limits<double>::infinity();
 
int main()
{
    int n;
    cout << "n: ";
    cin >> n;
    matrix A(row(n), n);
    column a(n);
    cout << "\nA[1][1] ... A[1][n] a[1]\n"
        "...\n"
        "A[n][1] ... A[n][n] a[n]\n";
    for (int r = 0; r < n; r++)
    {
        for (int c = 0; c < n; c++)
            cin >> A[r][c];
        cin >> a[r];
    }
    double eps;
    cout << "\neps: ";
    cin >> eps;
    column xcur(n);
    cout << "\nxcur: ";
    for (int r = 0; r < n; r++)
        cin >> xcur[r];
 
    matrix B(row(n), n);
    column b(n);
    for (int r = 0; r < n; r++)
    {
        B[r] = -A[r] / A[r][r];
        B[r][r] = 0;
        b[r] = a[r] / A[r][r];
    }
 
    cout << "\nB b:\n";
    for (int r = 0; r < n; r++)
    {
        for (int c = 0; c < n; c++)
            cout << B[r][c] << " ";
        cout << b[r] << "\n";
    }
 
    double Linf = -inf;
    for (int r = 0; r < n; r++)
    {
        double s = 0;
        for (int c = 0; c < n; c++)
            s += fabs(B[r][c]);
        if (s > Linf)
            Linf = s;
    }
    cout << "\nLinf: " << Linf << endl;
 
    double L1 = -inf;
    for (int c = 0; c < n; c++)
    {
        double s = 0;
        for (int r = 0; r < n; r++)
            s += fabs(B[r][c]);
        if (s > L1)
            L1 = s;
    }
    cout << "L1: " << L1 << endl;
 
    double L2 = 0;
    for (int r = 0; r < n; r++)
    {
        for (int c = 0; c < n; c++)
            L2 += B[r][c] * B[r][c];
    }
    cout << "L2: " << L2 << endl;
 
    double L = min(Linf, L1);
    L = min(L, L2);
    if (L >= 1)
    {
        cout << "L >= 1 :-(" << endl;
        return 1;
    }
 
    column xnext = xcur;
    do
    {
        xcur = xnext;
        cout << "\nxcur: \n";
        for (int r = 0; r < n; r++)
            cout << xcur[r] << " ";
        for (int r = 0; r < n; r++)
            xnext[r] = b[r] + (B[r] * xcur[r]).sum();
    } while ((xnext - xcur).apply(fabs).max() >= eps);
    cout << "\nX: \n";
    for (int r = 0; r < n; r++)
        cout << xnext[r] << " ";
    cout << endl;
}
 
Текущее время: 15:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru