Compare commits
2 Commits
72dab86dd9
...
5776f52662
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5776f52662 | ||
|
|
18c917193c |
127
matrix.c
127
matrix.c
@ -75,33 +75,134 @@ MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int co
|
|||||||
|
|
||||||
Matrix add(const Matrix matrix1, const Matrix matrix2)
|
Matrix add(const Matrix matrix1, const Matrix matrix2)
|
||||||
{
|
{
|
||||||
if((matrix1.rows != matrix2.rows) || (matrix1.cols != matrix2.cols))
|
|
||||||
{
|
|
||||||
//printf("Fehler bei Addition: Matrix Dimensionen stimmen nicht ueberein!\n");
|
|
||||||
Matrix empty = {0, 0, NULL};
|
|
||||||
return empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Hier broadcasting noch einfuegen
|
|
||||||
|
|
||||||
float matrix1Wert = 0;
|
float matrix1Wert = 0;
|
||||||
float matrix2Wert = 0;
|
float matrix2Wert = 0;
|
||||||
float summe = 0;
|
float summe = 0;
|
||||||
|
int broadcasting = 0;
|
||||||
|
|
||||||
Matrix ergebnisMatrix = createMatrix(matrix1.rows, matrix1.cols);
|
Matrix broadcastedmatrix1 = {0,0,NULL};
|
||||||
|
Matrix broadcastedmatrix2 = {0,0,NULL};
|
||||||
|
|
||||||
|
if((matrix1.rows != matrix2.rows) || (matrix1.cols != matrix2.cols))
|
||||||
|
{
|
||||||
|
if((matrix1.rows != matrix2.rows) && (matrix1.cols == matrix2.cols))
|
||||||
|
{
|
||||||
|
if(matrix1.rows == 1)
|
||||||
|
{
|
||||||
|
broadcastedmatrix1 = createMatrix(matrix2.rows, matrix2.cols);
|
||||||
|
|
||||||
|
for(int row = 0; row<matrix2.rows; row++)
|
||||||
|
{
|
||||||
|
for(int col = 0; col<matrix2.cols; col++)
|
||||||
|
{
|
||||||
|
matrix1Wert = getMatrixAt(matrix1, 0, col);
|
||||||
|
setMatrixAt(matrix1Wert, broadcastedmatrix1, row, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
broadcasting = 1;
|
||||||
|
}
|
||||||
|
else if(matrix2.rows == 1)
|
||||||
|
{
|
||||||
|
broadcastedmatrix2 = createMatrix(matrix1.rows, matrix1.cols);
|
||||||
|
|
||||||
|
for(int row = 0; row<matrix1.rows; row++)
|
||||||
|
{
|
||||||
|
for(int col = 0; col<matrix1.cols; col++)
|
||||||
|
{
|
||||||
|
matrix2Wert = getMatrixAt(matrix2, 0, col);
|
||||||
|
setMatrixAt(matrix2Wert, broadcastedmatrix2, row, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
broadcasting = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if((matrix1.rows == matrix2.rows) && (matrix1.cols != matrix2.cols))
|
||||||
|
{
|
||||||
|
if(matrix1.cols == 1)
|
||||||
|
{
|
||||||
|
broadcastedmatrix1 = createMatrix(matrix2.rows, matrix2.cols);
|
||||||
|
|
||||||
|
for(int row = 0; row<matrix2.rows; row++)
|
||||||
|
{
|
||||||
|
for(int col = 0; col<matrix2.cols; col++)
|
||||||
|
{
|
||||||
|
matrix1Wert = getMatrixAt(matrix1, row, 0);
|
||||||
|
setMatrixAt(matrix1Wert, broadcastedmatrix1, row, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
broadcasting = 1;
|
||||||
|
}
|
||||||
|
else if(matrix2.cols == 1)
|
||||||
|
{
|
||||||
|
broadcastedmatrix2 = createMatrix(matrix1.rows, matrix1.cols);
|
||||||
|
|
||||||
|
for(int row = 0; row<matrix1.rows; row++)
|
||||||
|
{
|
||||||
|
for(int col = 0; col<matrix1.cols; col++)
|
||||||
|
{
|
||||||
|
matrix2Wert = getMatrixAt(matrix2, row, 0);
|
||||||
|
setMatrixAt(matrix2Wert, broadcastedmatrix2, row, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
broadcasting = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//printf("Fehler bei Addition: Matrix Dimensionen stimmen nicht ueberein!\n");
|
||||||
|
Matrix empty = {0, 0, NULL};
|
||||||
|
return empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Matrix ergebnisMatrix;
|
||||||
|
|
||||||
|
switch (broadcasting)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 2:
|
||||||
|
ergebnisMatrix = createMatrix(matrix1.rows, matrix1.cols);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
ergebnisMatrix = createMatrix(matrix2.rows, matrix2.cols);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for(int row = 0; row < ergebnisMatrix.rows; row++)
|
for(int row = 0; row < ergebnisMatrix.rows; row++)
|
||||||
{
|
{
|
||||||
for(int col = 0; col < ergebnisMatrix.cols; col++)
|
for(int col = 0; col < ergebnisMatrix.cols; col++)
|
||||||
{
|
{
|
||||||
matrix1Wert = getMatrixAt(matrix1, row, col);
|
if(broadcasting == 0)
|
||||||
matrix2Wert = getMatrixAt(matrix2, row, col);
|
{
|
||||||
summe = matrix1Wert + matrix2Wert;
|
matrix1Wert = getMatrixAt(matrix1, row, col);
|
||||||
|
matrix2Wert = getMatrixAt(matrix2, row, col);
|
||||||
|
summe = matrix1Wert + matrix2Wert;
|
||||||
|
}
|
||||||
|
else if(broadcasting == 1)
|
||||||
|
{
|
||||||
|
matrix1Wert = getMatrixAt(broadcastedmatrix1, row, col);
|
||||||
|
matrix2Wert = getMatrixAt(matrix2, row, col);
|
||||||
|
summe = matrix1Wert + matrix2Wert;
|
||||||
|
}
|
||||||
|
else if(broadcasting == 2)
|
||||||
|
{
|
||||||
|
matrix1Wert = getMatrixAt(matrix1, row, col);
|
||||||
|
matrix2Wert = getMatrixAt(broadcastedmatrix2, row, col);
|
||||||
|
summe = matrix1Wert + matrix2Wert;
|
||||||
|
}
|
||||||
|
|
||||||
setMatrixAt(summe, ergebnisMatrix, row, col);
|
setMatrixAt(summe, ergebnisMatrix, row, col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearMatrix(&broadcastedmatrix1);
|
||||||
|
clearMatrix(&broadcastedmatrix2);
|
||||||
|
|
||||||
return ergebnisMatrix;
|
return ergebnisMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user