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 回答