Ir para conteúdo

POWERED BY:

Arquivado

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

Mauricio Delajustine

Multiplicação de um vetor por uma matriz

Recommended Posts

Olá pessoal estou precisando de uma ajuda ai ...

 

Seguinte preciso fazer um trabalho para a faculdade em C que efetua a multiplicação

de uma matriz quadrada (ordem 10.000 posições) por um vetor, e gravar os resultados em um outro vetor..

 

procurei na net achei algumas coisa multiplicação entre vetor.. mas n com matriz.. se alguem souber e quizer ajudar, ficaria grato.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, esta não é uma tarefa complicada, na verdade se você ainda não sabe como matrizes e vetores se comportam em C esta é a sua chance.

 

Primeiro mostre oque você já fez ou como imagina ser a resposta.

 

Outra coisa, eu não entendi como deve ser essa multiplicação, cada linha da matriz será multiplicada pelo vetor? Como é a entrada?

Posta aew que agente te ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 20/05/2010 at 23:46, 'Daniloinf' disse:

Brother, esta não é uma tarefa complicada, na verdade se você ainda não sabe como matrizes e vetores se comportam em C esta é a sua chance.

 

Primeiro mostre oque você já fez ou como imagina ser a resposta.

 

Outra coisa, eu não entendi como deve ser essa multiplicação, cada linha da matriz será multiplicada pelo vetor? Como é a entrada?

Posta aew que agente te ajuda.

 

Um exemplo seria assim:

Imagem Postada

 

dai a multiplicação seria assim:

 

2x1 + 6x1 = 8

5x2 + 4X2 = 18

 

dai este resultado seria jogado em um outro vetor que ficaria assim neste exemplo:

 

Vet Resultado

8

 

18

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, você terá apenas saber usar os índices da matriz/vetor para fazer essa multiplicação.

Por exemplo:

int i, j;
for(i=0; i<numero_linha_matriz; i++){
    for(j=0; j<numero_coluna_matriz; j++){
        // Aqui você terá acessa a cada elemento da matriz através da
        // matriz[i][j]
        //
        // Então basta você multiplicar esse valor pelo elemento na posição
        // j no vetor e armazena-lo em um novo vetor.
        // Uma dica, veja oque irá aparecer chamando um printf
        printf("%d ", matriz[i][j]);
    }
    // Se você usar o printf ali em cima, coloque um printf("\n"); aqui
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 21/05/2010 at 13:31, 'Daniloinf' disse:

Isso, você terá apenas saber usar os índices da matriz/vetor para fazer essa multiplicação.

Por exemplo:

int i, j;
for(i=0; i<numero_linha_matriz; i++){
    for(j=0; j<numero_coluna_matriz; j++){
        // Aqui você terá acessa a cada elemento da matriz através da
        // matriz[i][j]
        //
        // Então basta você multiplicar esse valor pelo elemento na posição
        // j no vetor e armazena-lo em um novo vetor.
        // Uma dica, veja oque irá aparecer chamando um printf
        printf("%d ", matriz[i][j]);
    }
    // Se você usar o printf ali em cima, coloque um printf("\n"); aqui
}

 

Aham .. acho q entendi a logica que você passou ai em cima ...

 

Estou aprendendo agora a linguagem C entao n sei quase nda hehehe

achei na net uns codigos que somão somente vetor com vetor...

mas ai q ta o meu problema eu n consigo implementa essa logica com os outros scripts...

 

to tentando mas ate agora n ta saindo nda ....

eu preciso cria uma matriz quadrada de 10.000 posições e cria um vetor de 10.000 posições

dai fazer a multiplicação deles que nem te passei no post acima... e ir guardando os resultados em um outro vetor.. Esta seria a teoria..

mas na pratica pra mim pelo menos ta brabo hehe

 

abraço

 

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

#define TAM 10000

int vetor[TAM];
int vetor_1 [TAM];
int matriz [TAM][TAM];

int void (int argc, char *argv[]) {
	tempo1();
	printf(" -*-*-*-  INICIO DO PROGRAMA SEGUQNCIAL -*-*-*-");
	printf(" \n");
	printf(" \n");
	printf(" \n ===========================================================");
	printf(" \n");	
	printf(" \n");	
	printf(" \n Inicializando vetor com numero aleatorios");
	printf(" \n");	
	printf(" \n");	
	
	int i;	
	for(i=0; i<TAM; i++){ 	
		vetor[i] = rand()%TAM*30;
	}
	printf(" \n Vetor inicializado");	
	printf(" \n");	
	printf(" \n");	
	printf(" \n Inicializando vetor das soma");
	printf(" \n");	
	printf(" \n");	
	
	int o;	
	for(o=0; o<TAM; o++){ 	
		vetor_1[o] = o;
	}
	printf(" \n Vetor dos resultados inicializado");	
	printf(" \n");	
	printf(" \n");	
	printf(" \n");	
	printf(" \n");	
	printf(" \n Inicializando matriz com numeros aleatorios");
	printf(" \n");	
	printf(" \n");	
	int c;	
	int l;
	for(c=0; c<TAM; c++){ 	
		for (l=0; l<TAM; l++){
			matriz[c][l] = (rand()%100000)+1;
		}
	}
	printf(" \n");	
	printf(" \n");	
	printf(" \n");	
	printf(" \n Matriz inicializada");
	printf(" \n ===========================================================");
	printf(" \n           SOMANDO MATRIZ COM VETOR");
	printf(" \n ===========================================================");
	
	int a;	
	int b;
	for(a=0; a < TAM; a++){ 	
		for (b=0; b < TAM; b++){
			vetor_1[a] = vetor_1[a] + vetor[b] + matriz[a][b];
		}
	}
	printf(" \n");	
	printf(" \n FIM DO PROGRAMA SEQUENCIAL");	

	tempo2();
	tempoFinal("mili segundos", argv[0], MSGLOG);	
}

segue ai um codigo que eu to tentando implementa mas esta dando alguns erros .. se alguem puder dar uma olhada e me ajuda..

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vi um 'o' (char) na inicialização do array de somas?

 

http://www.mundoeducacao.com.br/matematica/adicao-subtracao-matrizes.htm

 

  Citar
Para adicionarmos duas ou mais matrizes é preciso que todas elas tenham o mesmo número de linhas e de colunas.

 

 

Você acha que uma matriz linha (1xn) é a mesma coisa que uma matriz coluna (nx1) ou quadrada (nxn)?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 26/05/2010 at 13:02, '_Isis_' disse:

Eu vi um 'o' (char) na inicialização do array de somas?

 

http://www.mundoeducacao.com.br/matematica/adicao-subtracao-matrizes.htm

 

  Citar

Para adicionarmos duas ou mais matrizes é preciso que todas elas tenham o mesmo número de linhas e de colunas.

 

Você acha que uma matriz linha (1xn) é a mesma coisa que uma matriz coluna (nx1) ou quadrada (nxn)?

 

 

oi.. mas o que preciso é multiplicar uma matriz por um vetor nao matriz com matriz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estude.Só dessa vez.

#include <assert.h>
#include <stdlib.h>

struct matriz
{
    unsigned int m;
    unsigned int n;
    int **matriz;
};

typedef struct matriz matriz;

matriz *multiplicaMatrizes(matriz *m1, matriz *m2)
{
    //Condição de multiplicidade
    assert(m1->n == m2->m);
    //Alocações
    unsigned int c = m1->n;
    unsigned int m = m1->m;
    unsigned int n = m2->n;
    matriz *mr = (matriz*)malloc(sizeof(matriz));
    mr->m = m;
    mr->n = n;
    mr->matriz = (int**)malloc(sizeof(int*)*m);
    unsigned int it;
    for(it = 0;it < m;++it) {
        *((mr->matriz)+it) = (int*)malloc(sizeof(int)*n);
    }
    //Multiplicação
    unsigned int subIt;
    unsigned int ubIt;
    for(it = 0;it < m;++it) {
        for(subIt = 0;subIt < n;++subIt) {
            mr->matriz[it][subIt] = 0;
            for(ubIt = 0;ubIt < c;++ubIt) {
                mr->matriz[it][subIt] += m1->matriz[it][ubIt]*m2->matriz[ubIt][subIt];
            }
        }
    }
    //Depois de usada,libere-a.
    return mr;
}
Recomendo que faça métodos de alocação e liberação de matrizes assim como uma checagem maior na validade das matrizes e sua alocação.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Citar
oi.. mas o que preciso é multiplicar uma matriz por um vetor nao matriz com matriz

Favor ler os links que foram postados. Especialmente aquele onde diz que multiplicação de vetor por matriz é um caso especial de multiplicação de matrizes.

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.