プロットされる式(またはプロシージャ)は、数値の浮動小数点数に評価される必要があります。したがって、式g
の場合、名前には、のプロットが生成されるcan
ときに特定の数値が含まれている必要があります。g
ただし、のさまざまな値に対して一連の3Dプロットを作成し、can
それらを表示することができます。それらを一度に重ねて表示することができます。または、アニメーションシーケンスでそれらを表示することもできます。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
g
g
eval
次に、より深い問題に移ります。ローカルの想定名を含む式を作成します。その後、同じ式を使用しますが、その名前のグローバルで想定外のバージョンを使用します。式を作成し、ローカルの想定名の代わりにグローバルの想定外の名前を含めて、置換を実行することを購入できます。
restart;
assume(can, real);
f := {g = x+can*x*y, t = x+x*y};
{g = x + can~ x y, t = x + x y}
assign(f[1]);
g;
x + can~ x y
can := 2:
g;
x + can~ x y
# This fails, because g contains the local name can~
plot3d(g, x=0..100, y=0..100);
# A procedure to make the desired substitution
revert:=proc(nm::name)
local len, snm;
snm:=convert(nm,string);
len:=length(snm);
if snm[-1]="~" then
return parse(snm[1..-2]);
else return parse(nm);
end if;
end proc:
# This is the version of the expression, but with global name can
subsindets(g,`local`,revert);
x + can x y
# This should work
plot3d(subsindets(g,`local`,revert),
x=0..100,y=0..100);