所以我有一个简单的例子说明我想做什么:
restart;
assume(can, real);
f := {g = x+can*x*y, t = x+x*y};
assign(f[1]); g;
can := 2;
plot3d(g, x = 0 .. 100, y = 0 .. 100);
虽然这有效:
restart;
f := {g = x+can*x*y, t = x+x*y};
assign(f[1]);
can := 2;
plot3d(g, x = 0 .. 100, y = 0 .. 100);
但是这些假设对于我的真实生活情况非常重要(对于复杂数字的一些优化),所以我不能只是leve不能预先设定。
为什么它对我来说不是很好,如何制作它?
答案 0 :(得分:1)
要绘制的表达式(或过程)必须求值为数字浮点数量。因此,对于您的表达式g
,名称can
必须在生成g
的任何图表时具有特定的数值。
但是您可以为can
的各种值生成一系列3D绘图,并显示它们。您可以一次显示所有内容,覆盖。或者您可以以动画序列显示它们。你可以用不同的方式对它们进行着色或着色,以提供can
正在变化的视觉提示,并为每个提示不同。
restart;
f := {g = x+can*x*y, t = x+x*y};
eval(g,f);
N:=50:
Pseq := seq(
plot3d(eval(g,f),
x=0..10,y=0..10,
color=RGB(0.5,0.5,can/(2*N)),
transparency=0.5*(can/(N+1))),
can=1 .. N):
plots:-display(Pseq, axes=box);
plots:-display([Pseq],insequence=true,axes=box);
顺便说一句,您不必仅为了使用g
内显示的g
等式来分配f
。执行该任务(使用assign
,比如说,就像你所做的那样)使得随后根据纯名g
创建其他方程式更加尴尬,除非您首先unassign
名称{ {1}}。有些人发现更容易根据g
完成此类任务的分配,并简单地使用g
,就像我上面所做的那样。
现在谈谈你更深层次的问题。您创建一个包含本地假名的表达式。然后你想要使用相同的表达式,但使用该名称的全局,未采用的版本。您可以创建表达式,其中包含全局的,未使用的名称,而不是本地的假名,buy执行替换。
eval