2017-03-10 9 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 /開平演算[2]、1 /開平演算[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 /開平演算[2]、1 /開平演算[2]}

編集

Iは、ギブンス回転に解くことに精通していませんよ。ここでは、連立方程式を解くための他の方法を紹介します。

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

すみません私は理解できません!このコードは1列だけのものですが、このコードでは線形方程式の系を解くことができますか? – user7677971

+0

@ user7677971はい、私はGivensのローテーションに慣れていません。私はそれがどのように適用されているか知ることにも興味があります。 –

+0

本を紹介したら、その本からこの主題を読むことができますか? – user7677971

関連する問題