Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中生成插值平滑的三维图形_Matlab - Fatal编程技术网

如何在Matlab中生成插值平滑的三维图形

如何在Matlab中生成插值平滑的三维图形,matlab,Matlab,此图由Mathematica创建: ls = Table[Sinc[x*y], {x, -5, 5, 0.2}, {y, -5, 5, 0.2}]; ListPlot3D[ls, InterpolationOrder -> 2, PlotRange -> All, Mesh -> None] 如何在MatLab中创建这样的绘图 以下是我迄今为止的尝试: >> x=linspace(-5.,5.,51); >> y=linspace(-5.,5.,

此图由Mathematica创建:

ls = Table[Sinc[x*y], {x, -5, 5, 0.2}, {y, -5, 5, 0.2}];
ListPlot3D[ls, InterpolationOrder -> 2, PlotRange -> All, 
 Mesh -> None]

如何在MatLab中创建这样的绘图

以下是我迄今为止的尝试:

>> x=linspace(-5.,5.,51);
>> y=linspace(-5.,5.,51);
>> [x,y]=meshgrid(x,y);
>> z=sinc(x.*y);
>> surf(x,y,z)
>> shading interp
看起来很不一样,尤其是波纹的细节。有没有可能画出像Mathematica一样的情节,特别是平滑度,阴影


为了创建良好的照明和阴影,您需要在绘图中添加灯光,并添加某种面部照明。如果分辨率太低,则最终的打印结果会有点参差不齐,因为“interp”样式的着色使用线性插值。比如说

n = 51;
x=linspace(-5., 5., n);
y=linspace(-5., 5., n);
[x, y]=meshgrid(x, y);
sinc = @(x) sin(x)./x;
z=sinc(x.*y);
z(isnan(z)) = 1;
surf(x, y, z, 'LineStyle', 'none', 'FaceColor', 'interp')
colormap(cool)
camlight right
set(gca, 'CameraPosition', [45 35 9.8])
这会产生以下结果

请注意,曲面的平滑程度与
n
有关。
n
的较大值将增加曲面的平滑度

如果生成的数据创建成本很高,可以使用比线性插值更高级的插值形式来提高分辨率,如下所示

n = 51;
x=linspace(-5., 5., n);
y=linspace(-5., 5., n);
[x, y]=meshgrid(x, y);
sinc = @(x) sin(x)./x;
z=sinc(x.*y);
z(isnan(z)) = 1;

nn = 401;
xi = linspace(-5.0, 5.0, nn);
yi = xi;
[xi, yi] = meshgrid(xi, yi);
zi = interp2(x, y, z, xi, yi, 'spline');
surf(xi, yi, zi, 'LineStyle', 'none', 'FaceColor', 'interp')
colormap(cool)
camlight right
set(gca, 'CameraPosition', [45 35 9.8])
这将生成以下图像

有关更多详细信息,请参阅以下帮助页面


我建议试试冲浪/冲浪,然后试着打开/关闭照明。摄像机的初始位置也很重要,因为我使用“前照灯”凸轮


好问题。请允许我仅提及这两个专有程序的一个自由软件、开源替代方案:GNUOctave。至于“Mathematica”和“MATLAB”,我不知道。你用的是什么版本的MATLAB?我得到一个…@EitanT我在Mac上使用2012a。但是在你的绘图中,墙上仍然有一些皱纹和线条。墙上的线条是可移动的网格线。关于皱褶,这确实是一个更好的插值问题,您的代码没有指定它。@I抱歉造成混淆,我指的是皱褶和排水沟,而不是网格线。谢谢。但是你能试试我的函数吗,你的函数看起来已经很平滑了。我把答案改为使用你的函数。谢谢,但我认为我的问题是如何绘制现有的矩阵,而不是增加矩阵中的点数,因为在我的研究中,矩阵是使用其他非常昂贵的程序生成的。你可以通过插值数据来解决这个问题。我的答案中包括了一个例子。谢谢!看起来真不错!谢谢,是的,我已经检查了你的答案,但是在我的电脑上,它没有像问题中那样生成平滑的插值图(我不确定是否是版本问题)。我喜欢“冲浪”+“照明打开”的输出。另一个你需要重新解释的问题,我没猜到
x=linspace(-5.,5.,51);
y=linspace(-5.,5.,51);
[x,y]=meshgrid(x,y);
z=sinc(x.*y);
surfl(x,y,z) %surf(x, y, z)
shading interp
colormap cool
%camlight headlight
%lighting gouraud