我想在MATLAB中为下面的f
和g
函数绘制一个网格:
我已经试过这个了:
%% 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]);
这将创建一个这样的绘图:
另一种选择是使用
g
和subs
对double
进行数值计算,然后使用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
来剪裁不重要的虚部。