1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | enum ERROR_TYPE{ SO_MANY_VALUE_OR_NO = 0, ONE_VALUE = 1 }; struct ColumnVector2D{ public: float x; float y; }; struct SqaureMatrix2D{ public: // [0] = m00 -> a // [1] = m10 -> b // [2] = m01 -> c // [3] = m11 -> d float m[4]; static ERROR_TYPE CalcInverse(const SqaureMatrix2D mat, SqaureMatrix2D& inverseMat){ float det = mat.m[0] * mat.m[3] - mat.m[1] * mat.m[2]; if(det == 0) return ERROR_TYPE::SO_MANY_VALUE_OR_NO; inverseMat.m[0] = (1/det) * mat.m[3]; inverseMat.m[3] = (1/det) * mat.m[0]; inverseMat.m[1] = (1/det) * -mat.m[1]; inverseMat.m[2] = (1/det) * -mat.m[2]; return ERROR_TYPE::ONE_VALUE; } ColumnVector2D operator*(const ColumnVector2D vec){ ColumnVector2D v; v.x = vec.x * m[0] + vec.y * m[1]; v.y = vec.x * m[2] + vec.y * m[3]; return v; } }; int main() { // 2x - 3y = 1, -x + y = -1 두개의 일차방정식을 연립하여 해를 얻는다. SqaureMatrix2D A; A.m[0] = 2; A.m[1] = -3; A.m[2] = -1; A.m[3] = 1; ColumnVector2D xy; xy.x = 1; xy.y = -1; SqaureMatrix2D inverseA; ERROR_TYPE err = SqaureMatrix2D::CalcInverse(A, inverseA); if(err == ERROR_TYPE::ONE_VALUE){ ColumnVector2D answer = inverseA * xy; cout << "X : " << answer.x << " " << "Y : " << answer.y << endl; } return 0; } |
2019년 4월 13일 토요일
# [C++] 연립 일차 방정식 해 구하기 ( 2차 정사각 행렬을 이용 )
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기