2010-07-18 2 views
1

가능한 중복 :
System of linear equations in C++?방정식 시스템을 프로그래밍 방식으로 해결 하시겠습니까?

I는 다음 두 수학 식의 시스템을 가지고 경우 a

를, B, C, D :

0 = a * r1_x + b * r1_x * r1_y + c * r1_y + d 
1 = a * r2_x + b * r2_x * r2_y + c * r2_y + d 
0 = a * r3_x + b * r3_x * r3_y + c * r3_y + d 
1 = a * r4_x + b * r4_x * r4_y + c * r4_y + d 

들어 e, f, g, h :

0 = e * r1_x + f * r1_x * r1_y + g * r1_y + h 
0 = e * r2_x + f * r2_x * r2_y + g * r2_y + h 
1 = e * r3_x + f * r3_x * r3_y + g * r3_y + h 
1 = e * r4_x + f * r4_x * r4_y + g * r4_y + h 

210 I는, E, F를 r1_x, r1_y, r2_x, r2_y, r3_x, r3_y, r4_x, r4_y, 의 값을 알고 처음에, A, B, C는 (D)을 해결해야하고, , g, h를 두 번째에 입력합니다.

필자는 연필과 종이로 어떻게 해결할 수 있는지 알고 있지만 프로그래밍 방법은 확실하지 않습니다. C 또는 C++ (또는 psuedocode)에서 위의 방정식을 어떻게 풀 수 있습니까?

감사

+0

@ShreevatsaR - 그 질문은 훨씬 더 일반적입니다. 이것은 간단한 솔루션을 가지고 있습니다. – IVlad

+1

@IVlad : 둘 다 정확하게 "선형 방정식 시스템"입니다. 맞습니까? 나는 일반적인 시스템 - 선형 - 방정식 솔버 (이것은 너무 어렵지 않다. BTW)를 사용하는 것보다 훨씬 간단하다고 생각하지 않는다. – ShreevatsaR

+0

@ShreevatsaR :이 특별한 문제에 대해 Cramer의 규칙은 더 빠르며 오류가 발생하기 쉽습니다. 그러나 나는 일반적인 선형 방정식을 사용하여 솔버가 더 우수 할 것이라고 생각한다. – jpalecek

답변

14

매트릭스 시스템 A x = b에 매핑 할 수 있습니다. 여기에서 A은 계수 행렬이고 b은 솔루션 벡터이며 x은 알 수없는 것입니다. 가우스 제거를 구현하거나 잘 알려진 라이브러리를 사용할 수 있습니다. LAPACK을 사용한다면 원하는 루틴은 dgesv입니다.

+0

+1 답장 +1 –

+0

가우스의 철자를 수정하고 나중에 검색하는 데 도움이 될 수 있습니까? –

4

선형 대수 및 matricies 여기에 당신의 친구입니다.

Eigen은 최신 C++ 선형 대수 라이브러리와 유사합니다. 그것이 당신을 도울 수 있는지보십시오.

다음은 방정식 시스템의 모양입니다.

alt text http://www.equationsheet.com/latexrender/pictures/506142f0da0bf28e3058eb664d8909ec.gif

당신에게 : 여기 alt text http://www.equationsheet.com/latexrender/pictures/92402dd682f5ec7a4e7055b5c955dace.gif

오른손 측 벡터이다 : 이것은 미지의 벡터

alt text http://www.equationsheet.com/latexrender/pictures/de5b4238674080766b05b44170baef75.gif

이다 :이 행렬 해결 방정식 의이 시스템을 해결

alt text http://www.equationsheet.com/latexrender/pictures/19820cbc1d00c66b7890ef08175810ca.gif

매트릭스가 블록 대각선이므로 솔루션도 마찬가지입니다.

선형 방정식을 Wolfram Alpha에 입력하고 기호 솔루션을 얻을 수 있습니다.

Here은 시스템 중 하나에 대한 솔루션입니다. 행렬에 필요한 형식을 볼 수 있습니다.

+0

지금은 시간이 없습니다. 나중에. 그것은 사실이 아닌가? 그것은 완전히 도움이되지 않습니까? OP는 그들도 알고있는 것 같지 않습니다. – duffymo

+0

만약 OP가 실제로 연필과 종이로 해결할 수 있다고 받아 들인다면, 그는 그것을 알고 있습니다. – IVlad

+0

나는 아무것도받지 않을거야. 이 질문을하기 위해 여기에 오는 OP는 그들이 다음에 무엇을해야할지 전혀 모른다는 것을 암시합니다. – duffymo

2

너는 Gaussian elimination을 사용할 수 있지만 4 개의 변수가있는 방정식이 4 개 밖에 없다면 과장 될 수 있습니다.

종이로 풀면 문제가 해결 될 수 있으므로 a, b, c, de, f, g, h 수식을 찾고 프로그램에 연결하면됩니다.

+0

다른 질문보다 덜 일반적이고 간단합니까? Guassian 제거법은 다른 하나의 해결책이기도하며, 4 가지 변수 (심지어 3, 심지어는 2)를 사용하는 것도 가치가 있습니다.이 경우 다른 알고리즘과는 구분할 수 없지만 :-)). – ShreevatsaR

+0

@IVlad : 저는 너무 많이 생각했습니다 ...하지만 Mathematica에 그것들을 연결하면 각 변수에 대해 10 줄 넘는 답을 얻을 수 있습니다. – Thomas

+0

전체 가우시안 제거가 길은 아닙니다. 피벗하지 않으면 불안정 할 수 있습니다. 이것이 개선 된 대답이라는 생각이라면 현실 세계에서 선형 대수학을 적용하는 법을 배워야합니다. – duffymo

관련 문제