Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

VictorCacciari

[Código] Matrizes

Recommended Posts

Essa semana escrevi um pequeno código pra aula de algebra, uma mini-lib para trabalhar com matrizes.

Está dividida em duas classes, uma template class abstrata que implementa uma matriz de tipo "T"

e uma outra, derivada dessa classe abstrata, que implementa matrizes numéricas, usando long long double's.

 

O código é um pouco grande, por isso vou postar num serviço de postagem.

 

Classe base, implementa uma matriz de tipo "T"

File:VMatrix.h

 

Matriz Numérica

File:NMatrix.h

File:NMatrix.cpp

 

Implementação de alguns altoritmos conhecidos, Regra do Chio para calculo de determinantes, Eliminação de Gauss e Resolução de sistemas lineares estão dispníveis aqui:

File:MAlgorithm.h

File:MAlgorithm.cpp

 

Um exemplo de utilização:

include <iostream>
#include "NMatrix.h"
#include "MAlgorithm.h"

/* exemplo de sistemas de equações lineares */
    long double Sistema1(size_t a, size_t B)
    {
    const int myM[4][5] = {
        {1,3,1,0, /* */ 1},
        {1,1,0,0, /* */ 2},
        {3,1,1,1, /* */ 1},
        {0,1,2,1, /* */ 2}
    };
        if (a>4 || b>5)
            return 0;
        else
            return myM[a][b];
    }

    void ResolverSistema()
    {
    NMatrix m1(4, 5);
    NMatrix res;

        m1.Fill(&Sistema1);
        std::cout << "O sistema: \n";
        show<long double>(m1);

        MAlgorithm::GaussEliminationAlgorithm(m1);
        MAlgorithm::LinearSolve(m1, res);

        std::cout << "\nApos a eliminacao de gauss: " << std::endl;
        show<long double>(m1);
        std::cout << "\nPossui como solucoes:" << std::endl;
        show<long double>(res);
    }
/* Exemplo de inversão de matrizes */

    void InverterMatriz()
    {
    NMatrix m1(4);
    NMatrix m2(4);

        m1.Fill(&Sistema1);
        m2.Fill(&Sistema1);

        std::cout << "Dada a matriz:\n";
        show<long double>(m1);

        std::cout << "\n\nA sua inversa:" << std::endl;
        m1.Inverse();
        show<long double>(m1);

        std::cout << "\nPois, uma matriz vezes a sua inversa retorna a itentidade:" << std::endl;
        m2.Multiply(m1);
        show<long double>(m2);
    }

int main()
{
    std::cout << "Manipulacao de matrizes." << std::endl;
    std::cout << "Exemplos:\n" << std::endl;
    InverterMatriz();
    std::cout << "\n\nTecle enter para continuar...\n";
    scanf("%*c");
    ResolverSistema();

    return 0;
}

Manipulacao de matrizes.

Exemplos:

 

Dada a matriz:

1; 3; 1; 0;

1; 1; 0; 0;

3; 1; 1; 1;

0; 1; 2; 1;

 

 

A sua inversa:

1; -3; 1; -1;

-1; 4; -1; 1;

3; -9; 2; -2;

-5; 14; -3; 4;

 

Pois, uma matriz vezes a sua inversa retorna a itentidade:

1; 0; 0; 0;

0; 1; 0; 0;

0; 0; 1; 0;

0; 0; 0; 1;

 

 

Tecle enter para continuar...

 

O sistema:

1; 3; 1; 0; 1;

1; 1; 0; 0; 2;

3; 1; 1; 1; 1;

0; 1; 2; 1; 2;

 

Apos a eliminacao de gauss:

1; 3; 1; 0; 1;

0; -2; -1; 0; 1;

0; 0; 2; 1; -6;

0; 0; 0; 0.25; 7;

 

Possui como solucoes:

-6; 8; -17; 28;

 

 

É isso!

Abraços pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.