gpt4 book ai didi

maxima - Plot2d 切入 3D 功能

转载 作者:行者123 更新时间:2023-12-04 13:35:53 25 4
gpt4 key购买 nike

我有 3D 高斯及其导数(拉普拉斯算子)

f1(x,y,z):=exp(-w1*((x-x1)^2+y^2+z^2));
f2(x,y,z):=exp(-w2*(x^2+y^2+z^2));
dx2_f2(x,y,z):=diff(f2(x,y,z),x,2);
Lf2(x,y,z):=diff(f2(x,y,z),x,2) + diff(f2(x,y,z),y,2) + diff(f2(x,y,z),z,2);

现在我想沿着 x 绘制一个轮廓切割固定功能 y,z对于某些参数值
w1:1.2;w2:0.5;x1:1.5;
plot2d( Lf2(x,0,0) ,[x,-5,5]);

我收到以下错误
diff: second argument must be a variable; found 0
#0: Lf2(x=x,y=0,z=0)
-- an error. To debug this try: debugmode(true);

虽然 plot2d( [f1(x,0,0),f2(x,0,0),dx2_f2(x,0,0)] ,[x,-5,5]);工作得很好。

同样的错误是,如果我尝试手动部分替换变量 Lf2x(x):=Lf2(x,0,0);
我猜,问题是 Maxima/lisp 做了一些 懒惰评估 ,因此沿 y,z 的导数当我用 y=0,z=0 替换它们时尚未计算.因此它拒绝沿常数 (?) 做导数。

但我不知道如何解决它(即仅在计算导数后才替换常数)

最佳答案

这是一个解决方案,它按照您的建议使用了quote-quote。主要思路是说foo(x) := ''(diff(something, x))而不是 foo(x) := diff(something, x) .

(%i2) f1(x, y, z) := exp(-w1*((x - x1)^2 + y^2 + z^2));
2 2 2
(%o2) f1(x, y, z) := exp((- w1) ((x - x1) + y + z ))
(%i3) f2(x, y, z) := exp(-w2*(x^2 + y^2 + z^2));
2 2 2
(%o3) f2(x, y, z) := exp((- w2) (x + y + z ))
(%i4) dx2_f2(x, y, z) := ''(diff(f2(x, y, z), x, 2));
2 2 2
2 2 - w2 (z + y + x )
(%o4) dx2_f2(x, y, z) := 4 w2 x %e
2 2 2
- w2 (z + y + x )
- 2 w2 %e
(%i5) Lf2(x, y, z) := ''(diff(f2(x, y, z), x, 2) + diff(f2(x, y, z), y, 2) + diff(f2(x, y, z), z, 2));
2 2 2
2 2 - w2 (z + y + x )
(%o5) Lf2(x, y, z) := 4 w2 z %e
2 2 2
2 2 - w2 (z + y + x )
+ 4 w2 y %e
2 2 2 2 2 2
2 2 - w2 (z + y + x ) - w2 (z + y + x )
+ 4 w2 x %e - 6 w2 %e
(%i6) w1: 1.2;
(%o6) 1.2
(%i7) w2: 0.5;
(%o7) 0.5
(%i8) x1: 1.5;
(%o8) 1.5
(%i9) plot2d( Lf2(x, 0, 0) ,[x, -5, 5]);
(%i10) plot2d( [f1(x, 0, 0), f2(x, 0, 0), dx2_f2(x, 0, 0)], [x, -5, 5]);

有了这些定义,我发现最后的图可以制作出漂亮的图,没有错误。请注意,函数定义 %o4 和 %o5 在右侧有实际的导数,而不是 diff表达。您可以使用 define 获得相同的效果。正如我最初建议的那样。

关于maxima - Plot2d 切入 3D 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62086880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com