Diagonal Matrix
Diagonal Matrix
private:
int n;
T* element;
};
int main() {
diagonalMatrix<int> mat(5);
mat.set(1, 1, 10);
mat.set(2, 2, 20);
mat.set(3, 3, 30);
mat.set(4, 4, 40);
mat.set(5, 5, 50);
private:
int n;
T* element;
};
switch (i - j) {
case 1: // Lower diagonal
return element[i - 2];
case 0: // Main diagonal
return element[n - 1 + i - 1];
case -1: // Upper diagonal
return element[2 * n - 1 + i - 1];
default:
return 0;
}
}
switch (i - j) {
case 1:
element[i - 2] = newValue;
break;
case 0:
element[n - 1 + i - 1] = newValue;
break;
case -1:
element[2 * n - 1 + i - 1] = newValue;
break;
default:
if (newValue != 0)
throw illegalParameterValue("Non-tridiagonal elements must be zero");
}
}
int main()
{
tridiagonalMatrix<int> mat(5);
mat.set(1, 1, 10);
mat.set(2, 2, 20);
mat.set(3, 3, 30);
mat.set(4, 4, 40);
mat.set(5, 5, 50);
mat.set(1, 2, 5);
mat.set(2, 3, 6);
mat.set(3, 4, 7);
mat.set(4, 5, 8);
mat.set(2, 1, 1);
mat.set(3, 2, 2);
mat.set(4, 3, 3);
mat.set(5, 4, 4);
return 0;
}
Lower Triangle Matrix
#include <iostream>
#include <stdexcept>
using namespace std;
private:
int n;
T* element;
if (i >= j)
element[i * (i - 1) / 2 + j - 1] = newValue;
else
if (newValue != 0)
throw illegalParameterValue("Elements not in lower triangle must be zero");
}
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;
class SymmetricMatrix {
public:
SymmetricMatrix(int size) : n(size) {
if (size <= 0)
throw invalid_argument("Matrix size must be posiive.");
elements.resize(size * (size + 1) / 2); // Only store the lower triangle
}
private:
int n; // Matrix dimension
vector<int> elements; // Store only lower triangle elements
int main() {
try {
SymmetricMatrix matrix(3);
return 0;
}