Matlab 倍频程:向文本文件写入/读取f(x,y)出错

Matlab 倍频程:向文本文件写入/读取f(x,y)出错,matlab,matrix,octave,read-write,Matlab,Matrix,Octave,Read Write,我有从文本文件读取和绘图功能的问题。 生成和写入函数的代码: clc, clear; plik=fopen('dane.txt', 'w') x= -5:.1:5; y= flip(rot90((-5:0.1:5))); z =sin(x).*y; fprintf(plik,'x y z\n'); for i=1:101 for j=1:101 fprintf(plik,'%6.3f \t%6.3f \t%6.3f \n', [x(i); y

我有从文本文件读取和绘图功能的问题。 生成和写入函数的代码:

clc, clear;
plik=fopen('dane.txt', 'w')
x= -5:.1:5;
y= flip(rot90((-5:0.1:5)));
z =sin(x).*y;
fprintf(plik,'x          y         z\n');
for i=1:101
  for j=1:101
    fprintf(plik,'%6.3f   \t%6.3f   \t%6.3f \n', [x(i); y(j); z(i,j)]);
  endfor
 endfor
mesh (x,y,z)
fclose(plik);
以及读取和绘制函数f(x,y)的代码


问题在于绘图。它绘制了所需的函数,但也绘制了类似于f(x,y)=x*y图的东西。这里会出现什么问题?

使用
plot3
命令获取X、Y和Z列向量,然后将每一行视为要打印的(X、Y、Z)坐标。当它从一行移动到下一行时,它会绘制一条线,将一个点连接到下一个点

数据在文件中的排列方式,大多数点彼此非常接近,因此从一个点到下一个点画一条线基本上是无害的,除了当你从点(x_i,y_N)到点(x_{i+1},y_0)时有一个很大的跳跃。本例中绘制的线非常明显,因为它将图形的右端连接到左端

如果要删除该线,请仅打印标记(例如
plot3(x,y,z,'o'))
,或将数据重塑为方形矩阵;在存在矩阵而不是单个向量的情况下,plot3将矩阵的每列视为单独的线来绘制,因此这将使“大”线消失。请注意,如果这样做,则必须指定颜色,否则每条线将以任意方式绘制新颜色

此外,请注意,输出仍将与“网格”的输出不同;相反,曲面将创建为一系列“平行线”。如果要重新创建网格,只需像以前一样将重塑后的矩阵传递到
mesh

换句话说,比较

r = @(x) reshape( x, [101,101] )
plot( r(x), r(y), r(z) );
致:


所有提示都很清楚。非常感谢!@Friszbot我很高兴。如果您认为此答案回答了您的问题,请单击勾号(向上/向下箭头下方)来“接受”。欢迎使用Stackoverflow!
r = @(x) reshape( x, [101,101] )
plot( r(x), r(y), r(z) );
mesh( r(x), r(y), r(z) );