diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..bc949db --- /dev/null +++ b/main.cpp @@ -0,0 +1,162 @@ +#include "cnumber.hpp" +#include "fractions.hpp" +#include "matrix.hpp" +#include "vector.hpp" +#include + +void cnumber_main() { + cnumber a(3, 2); + cnumber b(4, -3); + + cout << "a = " << a << endl; + cout << "a* = " << a.conjugate() << endl; + cout << "a*a* = " << a * a.conjugate() << endl; + cout << "b = " << b << endl; + cout << "b* = " << b.conjugate() << endl; + cout << "b*b* = " << b * b.conjugate() << endl; + cout << "a + b = " << a + b << endl; + cout << "(a + b)* = " << (a + b).conjugate() << endl; + cout << "a - b = " << a - b << endl; + cout << "(a - b)* = " << (a - b).conjugate() << endl; + cout << "a * b = " << a * b << endl; + cout << "(a * b)* = " << (a * b).conjugate() << endl; + cout << "a / b = " << a / b << endl; + cout << "(a / b)* = " << (a / b).conjugate() << endl; +} + +void fraction_main() { + int a = 7; + int b = 3; + int c = 1; + int d = 11; + double e = 0.75; + fraction q(a, b); + fraction q2(c, d); + fraction q3(e); + cout.precision(10); + cout << a << "/" << b << '=' << q << endl; + cout << a << "/" << b << '=' << q.to_double() << endl; + cout << c << "/" << d << '=' << q2 << endl; + cout << c << "/" << d << '=' << q2.to_double() << endl; + cout << q << "+" << q2 << '=' << q + q2 << endl; + cout << q << "+" << q2 << '=' << (q + q2).to_double() << endl; + cout << q << "-" << q2 << '=' << q - q2 << endl; + cout << q << "-" << q2 << '=' << (q - q2).to_double() << endl; + cout << q << "*" << q2 << '=' << q * q2 << endl; + cout << q << "*" << q2 << '=' << (q * q2).to_double() << endl; + cout << q << "/" << q2 << '=' << q / q2 << endl; + cout << q << "/" << q2 << '=' << (q / q2).to_double() << endl; + cout << e << '=' << q3 << endl; +} + +void matrix_main() { + vector a = vector(2); + a[0] = 1; + a[1] = 1; + + vector b = vector(2); + b[0] = 1; + b[1] = cnumber(1, 0); + + vector c = vector(2); + c[0] = 2; + c[1] = cnumber(1, 1); + + vector d = vector(2); + d[0] = cnumber(1, -1); + d[1] = 5; + + matrix m = matrix(2, 2); + m[0] = a; + m[1] = b; + + matrix n = matrix(2, 2); + n[0] = c; + n[1] = d; + + cout << "The matrix m" << endl; + cout << m << endl; + cout << "The determinant of matrix m:" << endl; + cout << m.determinant() << endl; + cout << "The matrix n:" << endl; + cout << n << endl; + cout << "The matrix n roted by one pi radian:" << endl; + cout << n.rotate_by_one_pi() << endl; + cout << "The determinant of matrix n:" << endl; + cout << n.determinant() << endl; + cout << "The matrix n's transpose:" << endl; + cout << n.transpose() << endl; + cout << "The matrix n's diagonal:" << endl; + cout << n.get_diagonal() << endl; + cout << "The matrix n's off diagonal:" << endl; + cout << n.get_off_diagonal() << endl; + cout << "The vector d:" << endl; + cout << d << endl; + cout << "The matrix n * the vector d" << endl; + cout << n * d << endl; + cout << "The vector d * the matrix n" << endl; + cout << d * n << endl; + cout << "The matrix m * n" << endl; + cout << m * n << endl; + cout << "The matrix m + n" << endl; + cout << m + n << endl; + cout << "Is 2 an eigenvalue of m?" << endl; + if (m.is_eigenvalue(2)) { + cout << "Yes!" << endl; + } else { + cout << "No!" << endl; + } + if (n.is_hermitian()) { + cout << "The matrix n is hermitian, here is the hermitian conjugate:" + << endl; + cout << n.hermitian_conjugate() << endl; + } +} +void vector_main() { + vector v = vector(3); + cnumber one(1, 0); + cnumber two(2, 0); + cnumber three(3, 0); + cnumber four(4, 0); + cnumber five(5, 0); + cnumber i(0, 1); + v[0] = one; + v[1] = two; + v[2] = i; + + vector w = vector(3); + w[0] = three; + w[1] = four; + w[2] = five; + cout << "v:" << endl; + cout << v << endl; + cout << "w:" << endl; + cout << w << endl; + cout << "v + w:" << endl; + cout << v + w << endl; + cout << "v - w:" << endl; + cout << v - w << endl; + cout << "v * w:" << endl; + cout << v * w << endl; + cout << "w * i:" << endl; + cout << w * i << endl; + for (long long j = 0; j < v.get_dimention(); j++) { + cout << "Element " << j << " of v:" << endl; + cout << v[j] << endl; + } + cout << "A temp vector of dimension 3" << endl << vector(3) << endl; + vector k = vector(3); + k = w; + cout << "Assignment of w to k" << endl << k << endl; + cout << "Manually set elements of k to elements of v" << endl; + for (long long j = 0; j < v.get_dimention(); j++) + k[j] = v[j]; + cout << k << endl; +} +int main() { + fraction_main(); + cnumber_main(); + vector_main(); + matrix_main(); + return 0; +} diff --git a/matrix.hpp b/matrix.hpp index e4e761f..56c9914 100644 --- a/matrix.hpp +++ b/matrix.hpp @@ -205,6 +205,17 @@ public: return n; } + +const matrix operator*(vector &v) const { + matrix res(this->get_num_entries(), this->get_entry_dimension()); + for (long long i = 0; i < this->get_num_entries(); i++) { + for (long long j = 0; j < this->get_entry_dimension(); j++) { + res[i][j] = (this->get_entry(i)[j] * v.get_entry(i)); + } + } + + return res; +} const matrix operator*(const matrix m) const { matrix n(this->num_entries, m.entry_dimension); if (this->num_entries != m.entry_dimension &&