在3D函数中绘制2d切割图

问题描述 投票:2回答:1

我有三维高斯和它们的导数(拉普拉斯算子)。

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);

我猜,问题是Maximalisp做了一些 懒汉评价因此,导数沿 y,z 还没有计算,当我用 y=0,z=0. 因此,它拒绝沿常数(?)做导数。

但我不知道如何解决(即在计算出导数后才代入常数)。

maxima
1个回答
0
投票

这里有一个解决方案,按照你的建议,利用了引号。主要思路是说 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 正如我最初的建议。

© www.soinside.com 2019 - 2024. All rights reserved.