楼主: sosiumann
3177 13

高额悬赏解决MATLAB小问题 [推广有奖]

  • 1关注
  • 2粉丝

已卖:1634份资源

博士生

22%

还不是VIP/贵宾

-

威望
0
论坛币
4701 个
通用积分
1.6061
学术水平
2 点
热心指数
1 点
信用等级
1 点
经验
4169 点
帖子
137
精华
0
在线时间
232 小时
注册时间
2010-10-5
最后登录
2020-10-15

楼主
sosiumann 发表于 2010-12-1 17:53:56 |AI写论文
29论坛币
本人在用MATLAB处理数据时碰到这样一个问题:就是要用同一个程序(有两个程序块)来处理九千多个EXCEL表格的数据(每个表格一万多条记录),读取数据的程序如下:
global x tx T
tmpdata = xlsread('D:\MATLAB\work\1','Sheet1','g2:i16948');
x = tmpdata(:,1);
tx = tmpdata(:,2);
T = tmpdata(:,3);
clear tmpdata;
同时每处理完一个表格即将结果写入表格,程序如下:
xlswrite('1.xls',pactive,'Sheet1','J2');
这里就有个问题,要处理多个表格的数据并且写入结果,每个表格的数据区域又不太一样。如果每处理完一个表格的数据就得改一次程序的话工作量极大,而且极为浪费时间。故而请各位仁兄大姐给小弟指点一下,论坛币奉上,感激不尽!

最佳答案

zyner 查看完整内容

6# sosiumann 你如果文件名是1,2,3……10000这种的话,就搞一个循环,n从1到10000,然后把n转化为字符串,用函数num2str(n),在把你的文件目录的字符串path='D:\MATLAB\work\'和num2str(n)拼接起来,path2=strcat(path,num2str(n)),这就是你的每次的文件路径啦,然后再读取tmpdata = xlsread(path2,'Sheet1','g:i');
关键词:MATLAB atlab matla 高额悬赏 Atl MATLAB 解决 悬赏

本帖被以下文库推荐

专注 信念 坚忍 改变

沙发
zyner 发表于 2010-12-1 17:53:57
6# sosiumann
你如果文件名是1,2,3……10000这种的话,就搞一个循环,n从1到10000,然后把n转化为字符串,用函数num2str(n),在把你的文件目录的字符串path='D:\MATLAB\work\'和num2str(n)拼接起来,path2=strcat(path,num2str(n)),这就是你的每次的文件路径啦,然后再读取tmpdata = xlsread(path2,'Sheet1','g:i');
已有 1 人评分学术水平 热心指数 收起 理由
sosiumann + 1 + 1 不错,经修改后可以实现

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

藤椅
zyner 发表于 2010-12-1 18:09:27
你每个区域不同的判断条件是什么,说清楚一点

板凳
sosiumann 发表于 2010-12-1 18:51:44
2# zyner tmpdata = 就如xlsread('D:\MATLAB\work\1','Sheet1','g2:i16948');第一个表的数据区域是'g2:i16948',以后每个表数据区域的起始都是g2但是由于记录条数不一样,数据区域可能是'g2:i1500'或者'g2:i14400'等,没有规律。数据样本如下: 12.jpg
专注 信念 坚忍 改变

报纸
zyner 发表于 2010-12-1 19:16:48
见回答》》》》》》》》

地板
zyner 发表于 2010-12-1 19:18:17
tmpdata = xlsread('D:\MATLAB\work\1','Sheet1','g2:i16948');
改为:
tmpdata = xlsread('D:\MATLAB\work\1','Sheet1','g:i');  %即把开始和结束的行号删去即可

7
sosiumann 发表于 2010-12-1 21:16:43
5# zyner 这样只能读一个表的数据啊,循环读取啊……
专注 信念 坚忍 改变

8
zyner 发表于 2010-12-1 23:16:34
6# sosiumann
兄弟,你的所有excel的文件名是怎样的,你说清楚先吧

9
sosiumann 发表于 2010-12-1 23:59:00
8# zyner 我的整个程序是这样的:
global x tx T
tmpdata = xlsread('D:\MATLAB\work\1','Sheet1','g2:i16850');
x = tmpdata(:,1);
tx = tmpdata(:,2);
T = tmpdata(:,3);
clear tmpdata;

lb = .0001 * ones(1,4);
ub = 20 * ones(1,4);

initial = ones(1,4);

[params ll] = fmincon('pareto_nbd_ll',initial,[],[],[],[],lb,ub)
params=[1,1,1,1];

r = params(1); alpha = params(2);
s = params(3); beta  = params(4);

maxab = max(alpha,beta);
absab = abs(alpha-beta);
param2 = s+1;
if alpha < beta
    param2 = r+x;
end   

F0 = (alpha+T).^(r+x).*(beta+T).^s;
F1=h2f1(r+s+x,param2,r+s+x+1,absab./(maxab+tx))./...
    ((maxab+tx).^(r+s+x));
F2=h2f1(r+s+x,param2,r+s+x+1,absab./(maxab+T))./...
    ((maxab+T).^(r+s+x));
pactive = 1./(1+(s./(r+s+x)).*F0 .*(F1-F2));

xlswrite('1.xls',pactive,'Sheet1','J2');

表名就是如您所说的那样从1到3000,现在就是差如何循环倒入数据,每一个表计算出一个结果并依次写入相应的表格,您能否具体点帮我改一下程序,不胜感激啊!!!
专注 信念 坚忍 改变

10
sosiumann 发表于 2010-12-2 00:21:45
8# zyner 我的QQ:594975087,想向你讨教啊。
专注 信念 坚忍 改变

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-24 10:01