我有类似
的东西 solutions := solve ( {eqn1=0, eqn2=0, eqn3=0, eqn4=0, ... } )
返回的内容如下:
solutions := {Ax = -.2312688085, Ay = -7.770329620, Bx = -19.76873119, ....}
如何访问和保存每个解决方案?
是“Ax:=解决方案[1];”,等等,这是唯一的方法吗?
虽然解决方案[1]在上面的例子中没有访问-.2312688085,但是有一种字符串“Ax = -.2312688085”,所以我最终得到了“Ax:= Ax = -.2312688085”
答案 0 :(得分: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)