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

Как перевести матрицу в трёхдиагональную? - C++

Восстановить пароль Регистрация
 
Marakanec
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 6
16.11.2016, 23:16     Как перевести матрицу в трёхдиагональную? #1
Ребята, кто-то может помочь в реализации алгоритма для програмки. Необходимо реализовать алгоритм во внутрь программы, который переводит любую матрицу в трёх диагональную!!

Голова уже запуталась. А надо срочно

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
// metod.cpp : Defines the entry point for the console application.
 
//metod progonki< dlja dannogo metoda raspologaetsja cto dannaja matrica sistemi trexdiagonaljna,
//koeficienti sistemi raspolozennie ne na glavnoe diagonali i na 1 element v kazduju storonu ot nejo ravni 0
 
#include "stdafx.h"
#include <iostream>
#include "malloc.h"
#include <locale>
#include <time.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");//podkljucenie russkoga jazika dlja konsoli
    float **a;//matrica sistemi
    int n;//kolicestvo peremennih
 
    float **abg;//matrica dlja rascjota koeficientov po metodu progonki
 
    float *x;//vektor neizvestnih
 
    char* bx = new char[10];
 
    cout << "veedite kolicestvo peremennih ";
    cin >> n;
    //videlenie pamjati pod massiv ishodnih dannih
    a = (float **)calloc(n, sizeof(float*)); // n strok v massive
    for (int i = 0; i < n; i++)
        a[i] = (float *)calloc(n + 1, sizeof(float)); //n+1 stolbec
    //videlenie pamjatoi pod vekrot neizvestnih
    x = (float *)calloc(n, sizeof(float));
    //vvod ishodnih dannih
    for (int i = 0; i<n; i++)
        for (int j = 0; j < n + 1; j++)
        {
            if (j == n)//vvod pravoj casti uravnenija
                cout << "b[" << i << "]=";
            else//vvod osnovnih koeficientov
                cout << "a[" << i << "][" << j << "]=";
            cin >> a[i][j];
        }
 
    //videlenie pamjati pod vspomogateljnij massiv
    abg = (float **)calloc(3, sizeof(float*)); // 3 stroki v massive
    for (int i = 0; i < 3; i++)
        abg[i] = (float *)calloc(n, sizeof(float)); //n stolbcob
 
    //rascjot po metodu progonki
    clock_t time;
 
    time = clock();
    //dlja pervoj stroki
    abg[2][0] = a[0][0];//gamma
    abg[1][0] = a[0][n] / abg[2][0];//betta
    //dlja vseh
    for (int i = 1; i<n; i++)
    {
        abg[0][i - 1] = -a[i - 1][i] / abg[2][i - 1];//aljfa preduduwej stroki
        abg[2][i] = a[i][i] + a[i][i - 1] * abg[0][i - 1];//gamma
        abg[1][i] = (a[i][n] - a[i][i - 1] * abg[1][i - 1]) / abg[2][i];//beta
    }
 
    //obratnij hod - vicislenie neizvestnih
    x[n - 1] = abg[1][n - 1];
    for (int i = n - 2; i >= 0; i--)
        x[i] = abg[0][i] * x[i + 1] + abg[1][i];
 
    time = clock() - time;
    //vivod rezuljata
    for (int i = 0; i<n; i++)
        printf("x[%d]=%f\n", i, x[i]);
    cout << "Vremja vipolnenija: " << (float)time / CLOCKS_PER_SEC << endl; //Vremja vipolnenija
    system("pause");//zaderzka ekrana
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2016, 23:16     Как перевести матрицу в трёхдиагональную?
Посмотрите здесь:

Как умножить матрицу на матрицу C++
Как умножить матрицу на матрицу? C++
C++ Builder Как перевести с паскаля в С++??
Как перевести с C на C# C++
C++ Как перевести на С++
C++ Как перевести из 4 сс в 8сс
Как перевести матрицу с enum в char C++
Как разреженную матрицу перевести в формат CRS? C++

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

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

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