用matlab处理文件名字相似的大量文本文档。求程序。

我有365个文件,这365个文件存放在12个文件夹中。12个文件夹的名字分别是:201101201102201103…………201112每一个文件夹中有一些文档(每天一个... 我有365个文件,这365个文件存放在12个文件夹中。
12个文件夹的名字分别是:
201101
201102
201103
…………
201112
每一个文件夹中有一些文档(每天一个文档,所以分别有31、28、31、……31个文档) ,文档的命名为:
在201101文件夹中:
530880AX00120110101
530880AX00120110102
530880AX00120110103
……………………………………
530880AX00120110131
其他文件夹类似。

每一个文件中的内容格式完全一致(均为1440行,3列。除第一列外,内容不相同),如下:
0000 58.2 58.6
0001 58.5 72.0
……………………………………
0059 53.2 78.1
0100 54.0 63.2
……………………
……………………
2359 56.3 85.2

我需要达到的功能:
我像编写一个程序,达到以下功能:
对每一个文件的第二列和第三列求平均值,并做正弦拟合(就是那种y=A*sin(ax+b)的拟合,求三个参数A,a,b)。
琢磨了很久了,还是不会,所以来求助。十分感谢
展开
 我来答
victoriajll
2011-10-24 · TA获得超过4884个赞
知道大有可为答主
回答量:654
采纳率:100%
帮助的人:1053万
展开全部
function nonnihe
%%%把你要处理的12个文件夹设为默认工作路径,或置于当前目录下,运行即可
%%%这点很重要,可以省去文件路径
base=cell(12,1);
for i=1:12

if i<10
str1=['530880AX00120110' num2str(i)];%%注意区别
else
str1=['530880AX0012011' num2str(i)];
end

if ismember(i,[1 3 5 7 8 10 12])%%分3类:31天,30天,28天
data=zeros(31,2);
for j=1:31
if j<10
str2=['0' num2str(j) '.txt'];
else
str2=[num2str(j) '.txt'];
end
txtname=[str1 str2];%%得到txt文件名的字符串
data2=load(txtname);%%加载数据
m_2=mean(data2(:,2));%%第二列均值
m_3=mean(data2(:,3));%%第三列均值
data(j,:)=[m_2 m_3];
end
base{i}=data;%%存储该月份的数据
end

if ismember(i,[4 6 9 11])
data=zeros(30,2);
for j=1:30
if j<10
str2=['0' num2str(j) '.txt'];
else
str2=[num2str(j) '.txt'];
end
txtname=[str1 str2];
data2=load(txtname);
m_2=mean(data2(:,2));
m_3=mean(data2(:,3));
data(j,:)=[m_2 m_3];
end
base{i}=data;
end

if i==2
data=zeros(28,2);
for j=1:28
if j<10
str2=['0' num2str(j) '.txt'];
else
str2=[num2str(j) '.txt'];
end
txtname=[str1 str2];
data2=load(txtname);
m_2=mean(data2(:,2));
m_3=mean(data2(:,3));
data(j,:)=[m_2 m_3];
end
base{i}=data;
end
end
base2=cell2mat(base);%%将这一年的数据转换为矩阵
%%%这里假设第一列为x,这里的x值很可能不是按从小到大的顺序排列,是乱序的
base3=sortrows(base2,1);%%依据第一列做升序排列
x=base3(:,1);
y=base3(:,2);
plot(x,y,'o')
hold on
f=inline('A(1)*sin(A(2)*x+A(3))','A','x');%%y=A*sin(ax+b)
A=nlinfit(x,y,f,[60 1 1]);%%%方程系数矩阵,初值需要你自己定
fprintf('A = %.4f,a = %.4f,b = %.4f\n',A(1),A(2),A(3));
xx=min(x):0.1:max(x);
yy=A(1)*sin(A(2)*x+A(3));%%%方程形式
plot(xx,yy)
hold off
end
%%由于没有源数据,程序未调试,楼主可以先试一下,有问题欢迎追问
shenaodong
2011-10-23 · TA获得超过960个赞
知道小有建树答主
回答量:868
采纳率:0%
帮助的人:797万
展开全部
提供个思路:MATLAB里面有对文件夹和文件的遍历操作的,
1. 遍历当前目录下的子目录【每个月的】,如201101
2. 遍历每个子目录下的文件,530880AX00120110101
3. 对每个文件读取,并实现计算即可。
追问
谢谢。我需要的不是思路。
只是不熟悉matlab语法。所以希望能提供完整的程序。
我是因为不知道matlab这种语言的语法。比如说:
D=dir('201101\*');然后
A(1,1)=load(D(6,1).name);就报错
Unable to read file 530140AX00120110104.epd: No such file or directory.
如此等等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式