2017-03-10 10 views
1

mathematica에서 Givens 회전을 사용하여 선형 방정식 시스템을 풀 수있는 프로그램을 작성하려면 어떻게해야합니까?mathematica에 프로그램 작성하기 Givens 순환

코드 시도 :

ar = CoefficientArrays[ 
    {x + y + z == 2, 3 x - 2 y + z == 4, x - y + 5 z == 6}, 
    {x, y, z}]; 

an = Normal[ar]; 
b = an[[2]]; 
n = Length[b]; 
Do[Do[a[i, j] = b[[i]][[j]], {j, 1, n}], {i, 1, n}]; 
r1 = (a[1, 1]^2 + a[1, 2]^2)^(1/2); 
c = a[1, 1]/r1; 
s = a[1, 2]/r1; 
+3

일부 코드를 작성 시도하고 문제가 발생할 경우, 여기에 도움을 요청합니다. – Thiru

+0

어떻게 시작해야할지 모르겠습니까?! 나는이 줄을 쓰고있다 – user7677971

답변

0

는이 같은 뭔가를 찾고 계십니까?

코드를 준수하십시오.

{r1, c, s} 

SQRT {[2] 1/SQRT [2] 1/SQRT [2]}

{a, b} = LinearSolve[{{c, -s}, {s, c}}, {r1, 0}] 

{1, -1}

algorithm from wikipedia

GivensRotation[a_, b_] := Which[ 
    b == 0, c = Sign[a]; s = 0; r = Abs[a], 
    a == 0, c = 0; s = -Sign[b]; r = Abs[b], 
    Abs[a] > Abs[b], 
    t = b/a; u = Sign[a]*Abs[Sqrt[1 + t*t]]; 
    c = 1/u; s = -c*t; r = a*u, 
    True, 
    t = a/b; 
    u = Sign[b]*Abs[Sqrt[1 + t*t]]; 
    s = -1/u; c = -s*t; r = b*u 
    ] 

GivensRotation[a, b]; 

{r, c, s} 

{SQRT [2], 1/SQRT [2], 1/SQRT [2]}

편집 내가 기븐스 회전 해결에 익숙하지 않다

. 다음은 연립 방정식을 푸는 다른 방법입니다.

Solve[{ 
    x + y + z == 2, 
    3 x - 2 y + z == 4, 
    x - y + 5 z == 6}, 
{x, y, z}] 

{{X -> 1, Y -> 0, Z -> 1}}

또한

LinearSolve[{{1, 1, 1}, {3, -2, 1}, {1, -1, 5}}, {2, 4, 6}] 

{1, 0, 1}

또는

,
Inverse[{{1, 1, 1}, {3, -2, 1}, {1, -1, 5}}].{2, 4, 6} 

{1, 0, 1}

+0

실례합니다. 이해가 안됩니다! 이 코드는 하나의 열에 대한 것입니까?이 코드는 선형 방정식 시스템을 해결할 수 있습니까? – user7677971

+0

@ user7677971 예, Givens 순환 게재에 익숙하지 않습니다. 나는 또한 그것이 어떻게 적용되는지 알기를 원할 것이다. –

+0

내가 책을 소개한다면 그 책에서이 주제를 읽을 수 있습니까? – user7677971