0

私は次のようなものを持っています

solutions := solve ( {eqn1=0, eqn2=0, eqn3=0, eqn4=0, ... } )

これは次のようなものを返します:

solutions := {Ax = -.2312688085, Ay = -7.770329620, Bx = -19.76873119, ....}

各ソリューションにアクセスして保存するにはどうすればよいですか?
「Ax:= Solutions [1];」などが唯一の方法ですか?

上記の例では、solutions [1]は-.2312688085にアクセスしませんが、一種の文字列「Ax = -.2312688085」であるため、「Ax:= Ax=-.2312688085」になります。

4

1 に答える 1

2

このevalコマンドを使用すると、Ax、Ayなどが割り当てられているかのように、それらの名前を含む他の式を評価するときにソリューションを使用できます。実際に割り当てを行わなくてもこの効果が得られます(その利点は、名前の割り当てを解除しなくても、これらの変数に他の方程式を作成できることです)。

別のアプローチは、assignコマンドを使用して、返された数値をそれらの変数名に実際に割り当てることです。ただし、これにより、これらのシンボリック変数名を使用しようとする試みがさらに厄介になります。最初にそれらの割り当てを解除する必要があります。何度も割り当て/割り当て解除しなければならないという厄介なパターンに陥りたくない場合があります。

使いevalやすいと思います。もちろん、両方を試して、好みのものを使用することもできます。

いくつかの例が役立つかもしれません:

restart:

eq1 := Ax + Ay + 8.001598428:
eq2 := Bx + 20.08373119:
eq3 := By + Ay + 8.085329620:
eq4 := By + 0.315:

solutions := solve([eq1=0, eq2=0, eq3=0, eq4=0]);

    {Ax = -0.2312688080, Ay = -7.770329620, Bx = -20.08373119, 
     By = -0.3150000000}

eval(Ax, solutions);

                     -0.2312688080

eval(Ax^2 + sin(By), solutions);

                     -0.2563312096

eq5 := cos(Bx) + sin(Ax);   # still convenient

                   cos(Bx) + sin(Ax)

restart:

eq1 := Ax + Ay + 8.001598428:
eq2 := Bx + 20.08373119:
eq3 := By + Ay + 8.085329620:
eq4 := By + 0.315:

solutions := solve([eq1=0, eq2=0, eq3=0, eq4=0]);

  {Ax = -0.2312688080, Ay = -7.770329620, Bx = -20.08373119, 
   By = -0.3150000000}

assign(solutions);

Ax;

                     -0.2312688080

Ax^2 + sin(By);

                     -0.2563312096

eq5 := cos(Bx) + sin(Ax); # oops

                      0.1010869460

unassign('Ax'):
unassign('Bx'):

eq5 := cos(Bx) + sin(Ax);

                   cos(Bx) + sin(Ax)
于 2012-07-01T03:31:06.177 に答える