2013-02-19 3 views
0

1x1 2x2 및 3x3에서이 값을 찾는 방법을 알고 있지만 행렬의 크기를 입력하고 행렬에 들어가는 숫자를 입력 할 수있는 프로그램을 만들고 싶습니다. 숫자를 입력 한 후 행렬의 역수와 역수를 구할 수 있기를 원하지만 차원 파트를 어떻게 가는지 모르겠습니다. 이 일을 시작하는 좋은 방법은 무엇입니까? 어떤 헤더를 사용해야합니까? 나는 Linux에서 실행 중이므로 Windows와 같은 헤더가 없어도 도움이된다. :)어떤 크기의 행렬의 확정 및 역행렬을 찾기 위해 어떻게 C++ 프로그램을 만들 수 있습니까?

+0

먼저 NxN 행렬의 행렬식을 취한 뒤에있는 (종이) 수학을 이해합니까? 그리고 NxN 행렬의 역함수를 찾는 것? – Cornstalks

+0

종이에서 어떻게하는지 (즉, 수학을 배우는) 방법에 대해 알아야합니다. 그러면 수학이 명확 해집니다. 물론 행렬을 바꾸고 싶지만 직접 쓰지 않는 한, Eigen과 같은 라이브러리를 사용할 수 있습니다. – us2012

+1

행렬이 정사각형이라고 가정하면, 현재 찾고있는 것은 내부 행렬 반전 알고리즘입니다. http://math.stackexchange.com/questions/16940/in-place-inversion-of-large-matrices – user2051349

답변

1

선형 대수학 책을 선택하는 것으로 시작하십시오. 길버트 스트 랭의 하나. 그것은 좋은 이야기 책처럼 읽습니다. LU 분해와 고유 값과 고유 벡터에 대한 자세한 내용을 살펴보십시오. 길을 따라 가면서 두 질문에 대한 답을 찾았을 것입니다.

1

쉬운 방법은 Eigen과 같은 라이브러리를 사용하는 것입니다. 당신이 정말로 그것을 직접 수행 할 경우

  1. 메모리에 매트릭스를 표현하는 방법을 결정에

    , 당신은

  2. 쓰기 읽고 정의에 따라 행렬을 저장하는 코드 및
  3. 정의에 따라 행렬의 역/행렬식을 계산하는 코드를 작성하십시오.

분명히 2.와 3.는 1에 대한 선택에 달려 있으며, 좋은 표현을 찾는 것이 사소한 것이 아니라 애플리케이션에 따라 달라집니다. 행렬의 크기 또는 드문 드문 드문 여부.

효율에 신경 쓰지 않거나 행렬을 작게 가정하면 행렬을 1 차원 벡터로 나타낼 수 있습니다. 예를 들어, 4x4 행렬이있는 경우 길이가 16 인 벡터를 할당 할 수 있습니다.

질문을 올바르게 이해했다면 런타임시 동적으로 수행하는 방법에 대해 실제로 묻는 것입니다.

double* yourMatrix 
yourMatrix = new double[columnCount * rowCount]; 

이 동적으로 columnCount * rowCountdouble의 공간을 할당하고, 지금 정적 배열과 같은 그 메모리에 액세스 할 수 배열을 사용하여,이 같이 보입니다. 완료되면 메모리 누수를 방지하기 위해 delete[] yourMatrix을 사용해야합니다.

종이에서 행렬식/역행렬을 계산하는 방법을 알고 있다면 여기에서부터 시작할 수 있습니다.