我试图使用MATLAB
编写一个脚本,该脚本从txt
文件读取(其中100*3
元素写在单列中)。我想一次读取它们的100
个元素并应用一个合适的指数函数。这是我写的:
defaultPath = 'my/default/path/';
prompt = 'file name? ';
fileName = input(prompt,'s');
fullPath = strcat(defaultPath,fileName);
fileID = fopen(fullPath);
for h = 1:3
buff = textscan(fileID, '%d', 100);
y=buff';
x = zeros([100, 1]);
for j = 1:100
x(j,1) = j;
end
f = fit(x,y,'exp1');
plot(f,x,y);
end
但是它给了我这个错误:
X and Y must have the same number of rows.
您的主要问题可能是fit
的两个输入向量形状不同:一个是size
[100 1]
,另一个是[1 100]
,即一个是列向量,另一个是行。我的建议是:
defaultPath = 'my/default/path/';
prompt = 'file name? ';
fileName = input(prompt,'s');
fullPath = strcat(defaultPath,fileName);
fileID = fopen(fullPath);
for h = 1:3
buff = textscan(fileID, '%d', 100);
y=buff{1}';
x = 1:length(y);
f = fit(x,y,'exp1');
figure; %open new window for plotting each slice of the data
plot(f,x,y);
end
fclose(fileID);
请注意,我在绘图之前添加了一个figure
调用,以便将3组数据绘制在单独的图形上(否则默认行为将是每个plot
覆盖同一个figure
中的前一个。
我还改变了x
的定义,使其显式匹配y
的长度,这将防止一些错误,如果有问题的读取和y
有不寻常的长度。无论如何,最好避免神奇的数字,尽可能用其他数字来定义一切。
可以这样使用csvread:
f = csvread(STRING_OF_FILE_NAME);
f将是包含数据的矩阵。