Ir para conteúdo

POWERED BY:

Arquivado

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

Iam_master

Biblioteca para o dev c++ que resolva matriz inversa

Recommended Posts

Sou novo aqui no forum e na programaçao.

To precisando de uma biblioteca que resolva matriz inversa ... eu ja procurei em varios lugares e naum achei.

E uma duvida....o msm processo q serve pra receber uma matriz de um arquivo .txt tambem serve pra receber de um .bin?

 

Desde já agradeço.

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

como assim resolva matriz inversa?

Tambem não entendi :huh: , axo que não tem biblioteca pra isso, da pra voçê criar algum algoritmo que faça isso, mas tipo voçê que inverte-la de que forma..????

Compartilhar este post


Link para o post
Compartilhar em outros sites

matriz inversa é matematica

 

é a matriz que se multiplica por outra e temos a matriz identidade

 

http://educacao.uol.com.br/matematica/ult1705u39.jhtm

 

Nao conheço tambem um biblioteca que faça isso diretamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estive a algum tempo fazendo um trabalho que envolvia uso de matrizes, inclusive matriz inversa... Então está ai uma luz pra você começar. Claro como todo programador que se preze, você tem que ter um trabalhinho pra conseguir o que quer (fazer uma função pra achar a inversa), eu ja deixei ai até o escopo das funções que você vai precisar e que podem ser implementadas facilmente por algoritmos recursivos:

 

>> Determinante

>> Cofator

>> Transposta

 

Pra achar a inversa você pode usar:

Inversa(A)=(1/Det(A))*Transposta((cof(A)))

OBS: Você ira usar Laplace também.

 

matriz.h:

 

#include <stdio.h>
#include <stdlib.h>

#ifndef _MATRIZ_

#define _MATRIZ_

typedef struct{
    int m;
    int n;
    double **mtrz;
    }MTRZ;

MTRZ *cria_matrix(int m, int n); // Ta ai
MTRZ *inversa(MTRZ *); // Passar ponteiro da matriz a qual se deseja achar a inversa
double determinante(MTRZ *); //Passar ponteiro da matriz a qual se deseja achar o determinante
MTRZ *multiplica_por_const(double constante, MTRZ *mtrz); // Ta ai
MTRZ *cofator(MTRZ *); //Passar ponteiro da matriz a qual se deseja achar a matriz dos cofatores
MTRZ *transposta(MTRZ *); //Passar ponteiro da matriz a qual se deseja achar a matriz transposta
#endif

 

matrix.c:

 

#include "matriz.h"

MTRZ *cria_matrix(int m, int n)
{
    int i,j;
    MTRZ *r_mat;
    double **mtrz;

    if(m<1 || n<1) // Verifica se os indices da matrix e' menor que zero...
        return NULL;

    if((r_mat=(MTRZ *)malloc(sizeof(MTRZ)))==NULL)
        return NULL;

    (*r_mat).m=m;
    (*r_mat).n=n;

    if((mtrz=(double**)malloc(m*sizeof(double *)))==NULL)
        return NULL;

    for(i=0;i<m;i++)
        if((mtrz[i]=(double*)malloc(n*sizeof(double)))==NULL)
            return NULL;

    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            mtrz[i][j]=0.0;

    (*r_mat).mtrz=mtrz;
    return r_mat;
} 



MTRZ *multiplica_por_const(double cnst, MTRZ *mtrz)
{
    int i,j;
    MTRZ *r_mat;

    if((r_mat=cria_matrix((int)(*mtrz).m,(int)(*mtrz).n))==NULL)
        return NULL;
    
    for(i=0;i<(*mtrz).m;i++)
        for(j=0;j<(*mtrz).n;j++)
            (*r_mat).mtrz[i][j] = cnst * ((*mtrz).mtrz[i][j]);

    return r_mat;
}



void imprime_matrix(MTRZ *mtrz)
{
    int i,j;
    for(i=0;i<(*mtrz).m;i++)
    {
        for(j=0;j<(*mtrz).n;j++)
            printf("%f |",(*mtrz).mtrz[i][j]);
        printf("\n");
    }
}

Aqui está um exemplo de uso:

 

main.c:

 

#include "matriz.h"

int main(int argc, char *argv[])
{

  MTRZ *r_mat;
  if((r_mat=cria_matrix(4,2))==NULL) // Cria matrix 4x2
  {
        printf("NULL pointer...\n");
        exit(1);
  }
  imprime_matrix(r_mat); //Deve imprimir a nova matriz criada (inicialmente somente com zeros)
  return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Gabriel...,

 

Obrigado por compartilhar seu conhecimento conosco.

 

Continue contribuindo respondendo os tópicos mais recentes.

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.