Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako se mnoze matrice u C-u?

[es] :: C programiranje :: Kako se mnoze matrice u C-u?

[ Pregleda: 2367 | Odgovora: 14 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kUdtiHaEX
Beograd, Yugoslavia

Član broj: 3372
Poruke: 2598
*.vdial.verat.net

ICQ: 167621705
Sajt: www.webhost.co.yu


Profil

icon Kako se mnoze matrice u C-u?24.05.2004. u 10:10

Ovo je glupo pitanje, znam, ali ne mogu nikako da nateram da se moje matrice pomnoze. Moram da izvrsim mnozenje matrica uz proveru da li se one mogu pomnoziti.
Internet ne cini ljude glupima. Internet cini ljudsku glupost dostupnijom (TM by me)

Webhost Hosting Services
24.05.2004. u 10:10 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Kako se mnoze matrice u C-u?24.05.2004. u 10:20
A koje je pitanje u pitanju?

Gde je sors?

Vidovita Zorka je još uvek na odmoru, pa bi valjalo da nam daš malo materijala za razmišljanje.

f
24.05.2004. u 10:20 

Ivan Dimkovic
Ivan Dimkovic
Vice President - Product and Business Development, Ci..
EU

Administrator
Član broj: 13
Poruke: 11791
*.dip.t-dialin.net

Sajt: www.linkedin.com/in/ivand..


Profil

icon Re: Kako se mnoze matrice u C-u?24.05.2004. u 10:23
Ne mnoze se nikako :)

Cist C ne definise matrice kao tip, pa samim tim ni operacije nad matricama :)

Ono sto mozes da uradis je:

1. Da sam implementiras matricnu algebru
2. Da koristis neku od javno dostupnih implementacija

Ja sam odmah nasao nesto za C++

http://sourceforge.net/projects/ematrix/

A siguran sam da ima i za C, potrazi www.sourceforge.net


24.05.2004. u 10:23 

igac
Banjaluka

Član broj: 415
Poruke: 562
*.etfbl.net.



Profil

icon Re: Kako se mnoze matrice u C-u?24.05.2004. u 14:03
ili... uzmes linearnu algebru knjigu, procitas kako se mnoze matrice... ;))

prvo provjeris je a[ ]mxn i b[ ]nxp tj da je broj vrsta matrice a == broju kolona matrice b, pa onda mnozis po pravilu i stavljas sve u trecu matricu :]
"nice town, i'll take it..."
24.05.2004. u 14:03 

mojsilo2003
Ivan Mojsilovic
Novi Sad

Član broj: 17984
Poruke: 12
212.200.107.*

Sajt: www.graficar.dzaba.com


Profil

icon Re: Kako se mnoze matrice u C-u?24.05.2004. u 23:54
Cao! Probaj sledece:

Code:

#define maxdim 10

typedef float TRealMatrica[maxdim][maxdim];
         .
         .
         . 
TRealMatrica A,B;                         
         .
         .
         .
void ProizvodMatrica(float (*A)[maxdim],float (*B)[maxdim],int NA,int NB)
{
TRealMatrica P;
int i,j,k;

clrscr();
if(NA != NB)
  {
    printf("\nGRESKA: Redovi moraju biti isti!");
  }
else
  {
    for(i=0;i<NA;i++)
      for(j=0;j<NA;j++)
    {   
          P[i][j]=0;
      for(k=0;k<NA;k++)
        P[i][j]=P[i][j]+A[i][k]*B[k][j];
    }
  }


ovo je algoritam za mnozenje kvadratnih matrica istih dimenzija pa ako pomaze...
Ja programiram C++
C++ programira mene!!
24.05.2004. u 23:54 

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3643
..-chandran.sbs.auckland.ac.nz



Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 00:25
A postoje i brzi algoritmi koji ti daju kompleksnost bolju od O(n^3).
25.05.2004. u 00:25 

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1502
*.verat.net

ICQ: 60630914


Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 02:09
koliko se secam, to jos uvek nije zatvoreno poglavlje algebre. secam se povrsno strassen-ovih i laderman-ovih algoritama, ali se ne secam da je neko stavio tacku na slucaj optimizacija kod proizvoljnog n*m matricnog mnozenja, ili gresim?
25.05.2004. u 02:09 

NetworkAdmin
Zoran Knezevic
programer u jednoj X kompaniji, radim na daljinu onli..
Beograd

Član broj: 4445
Poruke: 609
*.access-sa1.lsinter.net

Sajt: www.rentalio.com


Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 07:29
http://www.netwood.net/~edwin/svmtl/

Eto dole nize imas i u ANSI C a i u f77
25.05.2004. u 07:29 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 08:11
Gilbert Strang u svojoj (doduše vremešnoj) knjizi „Linearna algebra i primene“ govori o algoritmima koji su blizu 2.5 u eksponentu i primećuje da je najverovatnija donja granica 2 „pošto nijedan broj između sadašnje granice i 2 ne izgleda naročito posebno“. Takođe kaže da dotični algoritmi uglavnom nisu zanimljivi za svakodnevnu upotrebu. Zanimljiviji su algoritmi koji rade na matricama poznate strukture.

f
25.05.2004. u 08:11 

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3643
*.dialup.xtra.co.nz



Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 08:37
Da, trenutno najbolji algoritam ima vreme izvrsavanja O(n2.376). Pronadjen je 1990. godine.
Ali problem je sto izgleda da je klasican algoritam brzi jer ovde su obracali paznju samo na broj mnozenja (kao "teze" operacije od sabiranja) ali kada se radi sa float brojevima onda je mnozenje brze od sabiranja koliko mi je poznato jer se mnozenje float brojeva radi tako sto se posebno pomnoze mantise i posebno saberu eksponenti.

[Ovu poruku je menjao srki dana 26.05.2004. u 01:25 GMT]
25.05.2004. u 08:37 

NetworkAdmin
Zoran Knezevic
programer u jednoj X kompaniji, radim na daljinu onli..
Beograd

Član broj: 4445
Poruke: 609
*.bbone.utic.net.ba.

Sajt: www.rentalio.com


Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 11:01
interesantne su razne iterativne metode za rjesavanje dijagonalno dominantnih matrica koje imaju samo odredjeni broj non-null dijagonala. ali ovo je specijalni slucaj... doduse taj specijalni slucaj je primjenljiv na mnogim fizickim problemima kao recimo proracun toka fluida metodom konacnih volumena :)
25.05.2004. u 11:01 

kUdtiHaEX
Beograd, Yugoslavia

Član broj: 3372
Poruke: 2598
*.vdial.verat.net

ICQ: 167621705
Sajt: www.webhost.co.yu


Profil

icon Re: Kako se mnoze matrice u C-u?25.05.2004. u 13:54
Hvala na odgovorima, inace radio sam sledece:

Code:

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

main() {
  int k,p,i,j,m,n,*a,*b,*c;
  
   printf("Mnozenje matrica se vrsi ako je broj kolona jedne matrice\njednak broju vrste druge matrice\n");
   printf("Unesite dimenzije prve matrice:\n");
   scanf("%d%d",&m,&n);
   printf("Unesite dimenzije druge matrice:\n");
   scanf("%d%d",&k,&p);
  while (m>0 && n>0 && n==k){ 
   a=(int*)malloc(m*n*sizeof(int));
   if (a==NULL) break;
 
   b=(int*)malloc(n*p*sizeof(int));
   if (b==NULL) break;
   
   printf("Unesite elemente prve matrice:\n");
   for (i=0;i<m;i++)
      for (j=0;j<n;j++) scanf("%d",&a[i*n+j]);
   printf("Uneta matrica je:\n");
   for (i=0;i<m;i++){
      for (j=0;j<n;j++) printf("%d ",a[i*n+j]);
      putchar('\n'); }
   
   printf("Unesite elemente druge matrice:\n");
   for (i=0;i<n;i++)
      for (j=0;j<p;j++) scanf("%d",&b[i*p+j]);
   printf("Uneta matrica je:\n");
   for (i=0;i<n;i++){
      for (j=0;j<p;j++) printf("%d ",b[i*p+j]);
      putchar('\n'); }
   
   c=(int*)malloc(m*p*sizeof(int));
   if (c==NULL) break;
   
   for (i=0;i<m;i++)
      for (j=0;j<n;j++)
            for (k=0;k<p;k++) c[k*p+i]=a[n*j+i]*b[p*k+j]; 
    
   printf("Proizvod matrica je:\n"); 
   for (i=0;i<m;i++){
      for (j=0;j<p;j++) printf("%d ",c[i*p+j]);
        putchar('\n'); }
   
  printf("\n\n");
   
   free(a); free(b); free(c);
   printf("Mnozenje matrica se vrsi ako je broj kolona jedne matrice\njednak broju vrste druge matrice\n");
   printf("Unesite dimenzije prve matrice:\n");
   scanf("%d%d",&m,&n);
   printf("Unesite dimenzije druge matrice:\n");
   scanf("%d%d",&k,&p);
 }
 

 


Ovaj algoritam za mnozenje matrica nije tacan ( u smislu dobijanja pogresnog rezultata, jer sam bio izmesao vrste i kolone matrica ali sam to ispravio, ispravljeni kod mi nije pri ruci sada).


Internet ne cini ljude glupima. Internet cini ljudsku glupost dostupnijom (TM by me)

Webhost Hosting Services
25.05.2004. u 13:54 

medi
Banja Luka

Član broj: 10638
Poruke: 35
*.etfbl.net.



Profil

icon Re: Kako se mnoze matrice u C-u?28.05.2004. u 09:36
Pogriješio si ovdje:

for (i=0;i<m;i++)
for (j=0;j<n;j++)
for (k=0;k<p;k++)
c[k*p+i]=a[n*j+i]*b[p*k+j];

ali dobro to, nek neko da ideju za stepenovanje matrica !?
Jel samo množenje uzastopno ili postoji neki još jednostavniji način !?
28.05.2004. u 09:36 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Kako se mnoze matrice u C-u?28.05.2004. u 09:46
Postoji više jednostavnijih načina za stepenovanje. Jedan bi bio recimo korišćenje dinamičkog programiranja gde se pamte međurezultati A, A2, A4, što se može svesti na pamćenje samo jednog međurezultata pa se stepenovanje sa n može obaviti u koraka.

Druga mogućnost bi bila korišćenje Kejli-Hamiltonove teoreme, mada je to verovatno korisno samo za matrice poznate strukture. Sigurno postoji još neki štos.

f
28.05.2004. u 09:46 

medi
Banja Luka

Član broj: 10638
Poruke: 35
*.etfbl.net.



Profil

icon Re: Kako se mnoze matrice u C-u?28.05.2004. u 18:54
Sviđa mi se ovo sa pamćenjem međurezltata, pokušaću uraditi na taj način. Ako neko ima još neku ideju za brže i jednostavnije stepenovanje matrica neka javi!

Hvala!
28.05.2004. u 18:54 

[es] :: C programiranje :: Kako se mnoze matrice u C-u?

[ Pregleda: 2367 | Odgovora: 14 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.