potegowanie macierzy

0

Program ma potegowac macierze przez rekurencje, zrobilem juz mnozenie, ale mam problem z potegowaniem. Czy ktos moze udzielic mi wskazowek? pokazaac blad? z gor dziekuje:)

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

#define N 2
int pomnoz(int tab[N][N],int tab0[N][N],int tab1[N][N]);
void wyswietl(int tab[N][N]);
int main ()
{
int a,i,j,tab[N][N];
int tab1[N][N],*tab0;

randomize();
for(i=0;i<N;i++)
for(j=0;j<N;j++)
tab[i][j]=random(10);

//for(i=0;i<N;i++)
//for(j=0;j<N;j++)
//*(tab0+N*i+j)=tab[i][j];


wyswietl(tab);

printf("Podaj potege\n");
scanf("%i",&a);

for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(i==j) *(tab0+N*i+j)=1;
else *(tab0+N*i+j)=0;
}

wyswietl(tab0);
printf("\n");

for(i=1;i<a;i++)
{*tab0*=pomnoz(tab,tab0,tab1);
wyswietl(tab1);
printf("\n");}
getch();
return 0;
}

int pomnoz(int tab[][N],int tab0[][N],int tab1[][N])
{int i,j,k;

for(i=0;i<N;i++)
{
   for(j=0;j<N;j++)
   { tab1[i][j]=0;
      for(k=0;k<N;k++)
      {
      tab1[i][j]=tab1[i][j]+tab[i][k]*tab0[k][j];
      }
   }
}


return (tab1);}


void wyswietl(int tab[N][N])
{
int i,j;
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%i ",tab[i][j]);
printf("\n");
}
}
0

Mi się wydaje, czy potęgowanie robisz na zasadzie mnożenia przez macierz jednostkową n razy? :|

tab0 to macierz jednostkowa, którą wcześniej utworzyłeś. Potęgowanie to mnożenie n razy macierzy przez siebie samą...

0

Macierz jednostkową mnożę przez daną, przyrównuję do tab,0, która teraz już nie jest jednostkowa i mnożę znowu przez daną macierz i tak odpowiednia ilośc razy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1