Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*************************************************************************
- > File Name: a.cpp
- > datauthor: Samuel
- > Mail: enminghuang21119@gmail.com
- > Created Time: Sun Oct 18 10:15:00 2020
- *************************************************************************/
- #include <iostream>
- #include <iomanip>
- using namespace std;
- struct Vector {
- long double data[2];
- Vector() {data[0] = data[1] = 0;}
- Vector(long double x[2]) {
- data[0] = x[0];
- data[1] = x[1];
- }
- void out() {
- for (int i = 0; i < 2; i++)
- cout << setw(10) << data[i] << '\n';
- }
- };
- struct Matrix {
- long double data[2][2];
- Matrix() {data[0][0] = data[0][1] = data[1][0] = data[1][1] = 0;}
- Matrix(long double x[2][2]) {
- data[0][0] = x[0][0];
- data[1][0] = x[1][0];
- data[0][1] = x[0][1];
- data[1][1] = x[1][1];
- }
- long double det() {
- return data[0][0] * data[1][1] - data[0][1] * data[1][0];
- }
- Matrix operator* (const Matrix &b) const {
- Matrix re;
- for (int i = 0; i < 2; i++)
- for (int k = 0; k < 2; k++)
- for (int j = 0; j < 2; j++)
- re.data[i][k] += data[i][j] * b.data[j][k];
- return re;
- }
- Vector operator* (const Vector &b) const {
- Vector re;
- for (int i = 0; i < 2; i++)
- for (int j = 0; j < 2; j++)
- re.data[i] += data[i][j] * b.data[j];
- return re;
- }
- Matrix inv() {
- Matrix re;
- long double d = det();
- re.data[0][0] = data[1][1];
- re.data[1][1] = data[0][0];
- re.data[0][1] = -data[0][1];
- re.data[1][0] = -data[1][0];
- for (int i = 0; i < 2; i++)
- for (int j = 0; j < 2; j++)
- re.data[i][j] /= d;
- return re;
- }
- Matrix transpose() {
- Matrix re;
- re.data[0][0] = data[0][0];
- re.data[1][1] = data[1][1];
- re.data[0][1] = data[1][0];
- re.data[1][0] = data[0][1];
- return re;
- }
- void out() {
- for (int i = 0; i < 2; i++) {
- for (int j = 0; j < 2; j++)
- cout << setw(10) << data[i][j];
- cout << '\n';
- }
- }
- };
- Vector project(Matrix &A, Vector &b) {
- return A.transpose() * (A.transpose() * A).inv() * A * b;
- }
- long double in1[2], in2[2][2];
- int main() {
- for (int i = 0; i < 2; i++)
- for (int j = 0; j < 2; j++)
- cin >> in2[i][j];
- cin >> in1[0] >> in1[1];
- Matrix A(in2);
- Vector b(in1);
- cout << "Transpose Matrix of A:\n";
- A.transpose().out();
- cout << "Inverse Matrix of A:\n";;
- A.inv().out();
- cout << "Project b on A:\n";
- project(A, b).out();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement