Jump to content
Fórum Script Brasil
  • 0

Multiplicação De Matrizes


tuga
 Share

Question

ei

eu queria multiplicar duas matrizes para comparar com outra pra fazer um sistema tipo "A.x=B"ex:

matrizA=[2,3,5] matrizx= [u1] matrizB= [6]

[0,2,5] [u2] [0]

[0,0,6] [u3] [0]

para isso utizei ciclos

for(m=0;n<=m;m++)

for(n=0;m<= n;n++)

matrixA[m][n]. matrixu[m][1]=Uh;

mas não tenho certeza...digão alguma coisa,,,,obrigado

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

a multiplicacão de matrizes possui algumas regras, vamos a elas:

temos 2 matrizes A(x,y) e B(m,n)

A . B só é possível se e somente se y = m. A matriz resultante seria do tipo x,n.

B . A só é possível se e somente se n = x. A matriz resultante seria do tipo m,y.

então primeira coisa que precisa fazer é testar se número de colunas de uma é igual ao número de linhas da outra.

se sim, é possível fazer o cálculo

usualmente voce usa 2 ou mais loop para fazer essa multiplicacão sua lógica toda vai estar baseada nos índices da matriz.

Link to comment
Share on other sites

  • 0

mas digamos que a matriz A[m][n] x B[j][1] = C[m][1] em que m=n=j as matrizes A é quadrada

eu teria de fazer 2 loop

for(m=0;m=j;m++)

for(j=0;j=m;j++)

matrizC[j]=matrizA[m][n] x matrizB[m][1]

era mais ou menos isto mas como é que se faz para incrementar no [n]????????

*já agora como é que se põe os anexos "code" que costumo ver e não sei como por e assim o codigo não fica direito!!

se pudessem responder a tudo agredecia muito

obrigado

Link to comment
Share on other sites

  • 0

mas digamos que a matriz A[m][n] x B[j][1] = C[m][1] em que m=n=j as matrizes A é quadrada

eu teria de fazer 2 loop

for(m=0;m=j;m++)

for(j=0;j=m;j++)

matrizC[j]=matrizA[m][n] x matrizB[m][1]

era mais ou menos isto mas como é que se faz para incrementar no [n]????????

para multiplicacao de uma matriz qualquer voce pode usar 3 loops um que controla a Linha de A, outro que controla a Coluna de B e outro que controla a Coluna de A.


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

int main(){
   int la=2, lb, ca=3,cb, x, y, z;
   cb=la;// definicao
   lb=ca; // definicao 

   for(x=0;x<la;x++){
      for(y=0;y<cb;y++){
         for(z=0;z<ca;z++){
        printf("Matriz A[%i][%i] * B[%i][%i]\n", x, z, z, y);
         }
      }
   }
   exit(0);
}

*já agora como é que se põe os anexos "code" que costumo ver e não sei como por e assim o codigo não fica direito!!

para iniciar o código coloque a a palavra "code" entre colchetes

e para encerrar use "[/" seguido da palavra "code" seguido de ]"

Link to comment
Share on other sites

  • 0

Estou tendo C na faculdade também....

Ví o tópico e achei que outros que pesquisarem podem se beneficiar. Código abaixo de um programa que faz a multiplicação de matriz quadrada de tamanho informado pelo usuário.

/*
  Autor: Helton Eduardo Ritter 2º Semestre Sistemas de Informação SETREM
  Data: 26/08/2007

  Programa: Multiplicação de matrizes quadradas de n tamanho

  Crie duas matrizes quadradas de tamanho informado pelo usuário,
  faça a multiplicação e aramzene o resultado
  em uma terceira matriz. Mostre o resultado.


*/
#include <stdio.h>

int main()
{
    // variável que vai guardar o tamanho das matrizes, informado pelo
    // usuário, vai servir também para controle dos loops do programa
    int iTm;
    printf("Quer calcular matrizes quadradas de que tamanho? ");
    scanf("%d",&iTm);
    {
    // fMA = tipo float, a primeira matriz, os dados serão informados pelo
    //       usuário
    // fMB = matriz B informada pelo usuário
    // fMR = matriz Resultado, os valores serão calculados e atribuidos
    //       aos índices dessa matriz
    //fTemp = antes da matriz R receber o valor, os valores são acumulados
    //        nessa variável
    float fMA[iTm][iTm],fMB[iTm][iTm],fMR[iTm][iTm],fTemp;


    // iL e iC = variáveis inteiras que serão usadas para controlar os laços
    //           de leitura e para calcular os valores

    //iTempL e iTempC = variáveis que são usadas para saber qual o índice
    //                  na B matriz que deve ser multiplicado pelo
    //                  índice que está sendo passado na matriz A
    int iL,iC,iTempL=0,iTempC=0;

   //lê os valores da matriz A, passando pela leitura das três
   // colunas em cada uma das linhas
   for(iL=0;iL <iTm;iL++)
    {
        for(iC=0;iC<iTm;iC++)
        {
            printf("Matriz A valor da linha %d coluna %d: ",(iL+1),(iC+1));
            scanf("%f",&fMA[iL][iC]);
        }
       // apenas para o usuário identificar mais fácil quando passou
       // para os valores da outra linha da matriz
       printf("\n");
    }

   //O mesmo que na matriz A só que para a matriz B
   for(iL=0;iL <iTm;iL++)
    {
        for(iC=0;iC<iTm;iC++)
        {
            printf("Matriz B valor da linha %d coluna %d: ",(iL+1),(iC+1));
            scanf("%f",&fMB[iL][iC]);
        }
       printf("\n");
    }

   // Mostra para o usuário como ficou a matriz A que ele digitou
   printf("\nMATRIZ A:\n\n");
   for(iL=0;iL <iTm;iL++)
    {
        for(iC=0;iC<iTm;iC++)
        {
           printf("%4.2f\t",fMA[iL][iC]);
        }
       printf("\n");
    }

    // Mostra para o usuário como ficou a matriz B que ele digitou
   printf("\nMATRIZ B:\n\n");

   for(iL=0;iL <iTm;iL++)
    {
        for(iC=0;iC<iTm;iC++)
        {
          printf("%4.2f\t",fMB[iL][iC]);

        }
       printf("\n");
    }

   // dentro deste bloco for vai ser feito o cálculo da matriz resultado
   // e exibido os valores
   printf("\nMATRIZ C, RESULTADO:\n\n");

   // passa todas as linhas da matriz A
   for(iL=0;iL <iTm;iL++)
     {
        // passa todas as colunas da matriz A
        for(iC=0;iC<iTm;iC++)
         {
            // quando chegar a execução aqui estamos posicionados em
            // uma linha e uma coluna específica de A, estamos em UM dos
            // valores de A

            // limpa o fTemp, pois nele serão acumulados os valores
            // calculados
            fTemp=0;
            // a multiplicação e soma deve ir avançando nas colunas de A
            // e nas linhas de B, mas mantendo a mesma colunas de B

            // aqui iTempL controla as Colunas de A e Linhas de B
            // quando chegar em 2 já leu as iTm colunas de A e as três
            //linha de B no primeiro índice de cada linha
             while(iTempL < iTm)
              {
                // fTemp recebe o que já tinha + a multiplicação
                // da Linha/coluna atual e sua linha/coluna correspondente

                // a coluna correspondente vai ser a mesma do índice da linha
                // atual
                fTemp=(fTemp +(fMA[iL][iTempL] * fMB[iTempL][iTempC]));
                // fez o primeiro cálculo, na matriz A tem que avançar 1
                // para a direita, e na Matriz B tem que avançar uma linha
                // para baixo, mantendo o o índice de coluna igual ao índice de
                // linha da matriz A
                iTempL++;
              } // fim do while que calcula os valores
            // quando termina o while, significa que já calculou o UM dos
            // valores da matriz resultado, mas tem que calcular o próximo
            // por isso incrementa 1 na coluna  de B, e zera i índice da linha
            // pois tem que multiplicar desde o iício de cada linha
            // por todos da coluna
            iTempC++;
            iTempL=0;

            // mostra esse um valor já encontrado
            printf("%4.2f\t",fTemp);

            // já temos um valor calculado, entâo gaurdamos ele na matriz
            // resultado.
            fMR[iL][iC]=fTemp;

            // limpa o fTemp, pois ele vai acumulando, e agora servirá
            // para calcular o próximo valor
            fTemp=0;
         } // fim do for que vare as colunas
       // quando terminou de calcular todos os valores dessa linha, zera o índice
       // da coluna, pois a próxima linha, terá que multiplicar desde o primeiro
       // índice de coluna matriz correspondente
       iTempC=0;
       // aqui é o ponto que temos todos os valores de uma linha calculados
       // estamos iniciando o cálculo da seguinte, damos uma quebra de linha
       // para a saída dos valores se parecer com uma matriz
       printf("\n");
     } // fim do for que vare as linhas
}
    // agurada um ENTER para fechar o programa

    getchar();
    getchar();
    return 0;
}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...