bilbioteka mnozenie macierzy

0

Dzien dobry,

POtrzbuje biblioteki do mnozenia macierzy, czy wie ktos moze gdzie mozna ja znalezc? (ewntualnie biblioteka do mnozenia czegokolwiek)
Za wszelka pomoc b. dziekuje

0

A co to jest to "cokolwiek"? Chcesz bibliotekę do mnożenia liczb: proszę bardzo:
int a, b, c;
c = a*b;

A jeżeli chodzi ci wyłącznie o mnożenie macierzy to chyba nie jest wielki problem samemu funkcję napisać.

0

Wklepie Ci część z mojego programu:
Klasa macierzy:

 class Matrix
{
public:
    float **tab;						
    int lk;								
    int lw;								

    Matrix();							
    Matrix(int, int);		 //Na potrzeby komputera;)			
    ~Matrix();							
    Matrix& operator*(Matrix&);		
    Matrix& operator=(Matrix&);	

};

Okroiłem klase tylko do mnozenia;) Bedziesz chcial wiecej to zrobisz;)
Deklaracja:

Matrix::Matrix()
{
    char temp;
    cout << endl << "------TWORZENIE MACIERZ------";
    cout << endl << "-----------------------------";
    cout << endl << "1. Podaj ilosc kolumn: ";
    cin >> lk;
    cout << endl << "2. Podaj ilosc wierszy: ";
    cin >> lw;
    tab = new float *[lw];
    for(int i=0; i<lw;i++)
    {
        tab[i] = new float[lk];
    }
    cout << endl << endl;
    for(int i=0;i<lw;i++)
    {
        for(int j=0;j<lk;j++)
        {
                cout << "Podaj wartosc elementu. Wiersz: "<< i+1 << " Kolumna: " << j+1 << " :: ";
                cin >> tab[i][j];
        }
    }
}
Matrix::Matrix(int k, int w)
{
    lk=k;
    lw=w;
    tab = new float *[lw];
    for(int i=0;i<lw;i++)
    {
        tab[i]= new float[lk];
    }
    for(int i=0;i<lw;i++)
    {
        for(int j=0;j<lk;j++)
        {
            tab[i][j]=0;
        }
    }
}
Matrix::~Matrix()
{
    for(int i=0;i<lw;i++)
    {
        delete [] tab[i];
    }
    delete [] tab;
}
Matrix& Matrix::operator*(Matrix& a)
{
	Matrix *temp = new Matrix(a.lk,lw);
	for(int i=0;i<temp->lw;i++)
	{
		for(int j=0;j<temp->lk;j++)
		{
			for(int k=0;k<lk;k++)
			{
			temp->tab[i][j]+=tab[i][k]*a.tab[k][j];
			}
			if(fabs(temp->tab[i][j])<EP)
			{
				temp->tab[i][j]=0;
			}
		}
	}
	return *temp;
}
Matrix& Matrix::operator=(Matrix& a)
{
    if(&a!=this)
    {
        for(int i=0;i<lw;i++)
        {
            delete [] tab[i];
        }
        delete [] tab;
        lk=a.lk;
        lw=a.lw;
        tab = new float *[a.lw];
        for(int i=0; i<lw;i++)
        {
            tab[i] = new float[a.lk];
        }
        for(int i=0;i<lw;i++)
        {
            memcpy(tab[i],a.tab[i],lk*sizeof(tab[i]));
        }
    }
    return *this;
}

I przykladowe uzycie tego w kodzie programu:

Matrix *pierwsza = new Matrix();   
Matrix *druga =new Matrix();
Matrix *wynik =new Matrix(1,1);
*wynik = *pierwsza * *druga;

I w macierzy wynik masz iloczyn;)
Nie zapomnij po takim mnozeniu o:

delete pierwsza;
delete druga;
delete wynik;
0

Aha.. na poczatku trzeba:

#include <iostream>
#include <math.h>
#define EP 0.000001
0

ok dzieki

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