我想在MATLAB中为下面的fg函数绘制一个网格:
我已经试过这个了:

%% plot f
[x,y] = meshgrid(linspace(-pi,pi,50));
f = x.*y ;
subplot(1,2,1)
mesh(f)
title('f')

%% plot g
syms  m n
A = 4*(-1)^(m+n)*(sin(m*x)*sin(n*y))/(m*n);
g = symsum(symsum(A,n,1,inf),m,1,inf);
subplot(1,2,2)
mesh(g)
title('g')

f的结果是:
正在运行绘制g的节,没有任何错误另一个绘制mesh的部分在图中没有显示任何内容如何绘制f

最佳答案

如果你要学习符号数学,最好熟悉assumptions,尤其是处理周期函数和不连续函数时您还可以使用fmesh(或ezmesh在旧版本中)来绘制符号表达式的网格:

syms m n x y
assume(in(m,'integer') & m>=1);
assume(in(n,'integer') & n>=1);
assume(x>-pi & x<pi);
assume(y>-pi & y<pi);
A = 4*(-1)^(m+n)*(sin(m*x)*sin(n*y))/(m*n);

g = symsum(symsum(A,n,1,Inf),m,1,Inf);
fmesh(g,5*[-pi pi -pi pi],'MeshDensity',1e2); % or ezmesh(g,5*[-pi pi -pi pi]);

这将创建一个这样的绘图:
matlab - MATLAB中的双重傅立叶级数-LMLPHP
另一种选择是使用gsubsdouble进行数值计算,然后使用mesh绘制:
[X,Y] = meshgrid(linspace(-5*pi,5*pi,100));
g2 = real(double(subs(g,{x,y},{X,Y})));
mesh(g2);

或使用matlabFunction创建数值函数:
g2 = matlabFunction(g);
[X,Y] = meshgrid(linspace(-5*pi,5*pi,100));
mesh(real(g2(X,Y)));

在后两种情况下,由于数值不精确,必须使用real来剪裁不重要的虚部。

10-04 17:40