K
ich kann dir ml meine matrix multiplikation geben, kannst vielleicht was damit anfangen oder teilweise benutzen
// Matrizenrechnungen
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
class Matrix
{
private: int n, m;
double** matrix;
public:
Matrix(int ndim, int mdim)
{
n=ndim;
m=mdim;
matrix = new double* [n+1];
for(int i=1; i<n+1; i++)
{
matrix[i]=new double[m+1];
}
}
Matrix(const Matrix& i)
{
n=i.n;
m=i.m;
matrix = new double* [n+1];
for(int k=1; k<n+1; k++)
{
matrix[k]=new double[m+1];
}
for(int h=1; h<n+1; h++)
{
for(int j=1; j<m+1; j++)
{
matrix[h][j]=i.matrix[h][j];
}
}
}
~Matrix()
{
for(int i=1; i<n; i++)
{
delete matrix[i];
}
delete [] matrix;
}
Matrix operator + (Matrix i)
{
if(n!=i.n || m!=i.m)
{
cout << "Die Matrixdimensionen stimmen nicht ueberein, daher keine Addition moeglich." << endl;
Matrix result = Matrix::Matrix(0,0);
return result;
}
else
{
Matrix erg = Matrix::Matrix(n, m);
for(int h=1; h<n+1; h++)
{
for(int j=1; j<m+1; j++)
{
erg.matrix[h][j]=matrix[h][j] + i.matrix[h][j];
}
}
return erg;
}
}
Matrix operator * (Matrix i)
{
if(m!=i.n)
{
cout << "Die Matrixdimensionen stimmen nicht ueberein, daher keine Maultiplikation moegöich." << endl;
Matrix result = Matrix::Matrix(0, 0);
return result;
}
Matrix erg = Matrix::Matrix(n, i.m);
for(int h=1; h<n+1; h++)
{
for(int j=1; j<i.m+1; j++)
{
erg.matrix [h][j] = 0;
for(int k=1; k<n+1; k++)
{
erg.matrix[h][j]+=matrix[h][k]*i.matrix[k][j];
}
}
}
return erg;
}
Matrix transp()
{
Matrix erg = Matrix::Matrix(m, n);
for(int h=1; h<m+1; h++)
{
for(int j=1; j<n+1; j++)
{
erg.matrix[h][j] = matrix[j][h];
}
}
return erg;
}
Matrix operator = (Matrix i)
{
Matrix erg = Matrix::Matrix(i);
return erg;
}
friend istream& operator >> (istream& i, Matrix& ma);
friend ostream& operator << (ostream& o, Matrix& ma);
};
istream& operator >> (istream& i, Matrix& ma)
{
for(int h=1; h<ma.n+1; h++)
for(int j=1; j<ma.m+1; j++)
i >> ma.matrix[h][j];
return i;
}
ostream& operator << (ostream& o, Matrix& ma)
{
if(ma.n==0 && ma.m==0)cout << "Matrixdimension ist Null." <<endl;
for(int h=1; h<ma.n+1; h++)
{
for(int j=1; j<ma.m+1; j++)
o << setw(6)<< ma.matrix[h][j];
cout <<endl;
}
return o;
}
int main(int argc, char *argv[])
{
int n,m;
cout << "Bitte den Zeilenindex von Matrix 1 eingeben: ";
cin >> n;
cout << "Bitte den Spaltenindex von Matrix 1 eingeben: ";
cin >> m;
Matrix matrix1 = Matrix::Matrix(n, m);
cout << "Bitte den Zeilenindex von Matrix 2 eingeben: ";
cin >> n;
cout << "Bitte den Spaltenindex von Matrix 2 eingeben: ";
cin >> m;
Matrix matrix2 = Matrix::Matrix(n, m);
cout << "Matrix 1 eingeben: ";
cin >> matrix1;
cout << "Matrix 2 eingeben: ";
cin >> matrix2;
cout << matrix1 << endl;
cout << matrix2 << endl;
Matrix plus=matrix1+matrix2;
Matrix mal=matrix1*matrix2;
Matrix trans=matrix1.transp();
cout << "Plus:" << endl << plus << endl;
cout << "Mal:" << endl << mal << endl;
cout << "Transponiert:" << endl << trans <<endl;
return 0;
}