声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2226|回复: 17

[编程技巧] [求助]关于文件内数据的排列

[复制链接]
发表于 2008-9-21 10:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
Clear
m=3;
Ti=228;
v=[1/3,1/3,1/3];
fid=fopen(‘C:\Documents and Setings\Adminitsrtaor\1.txt’, 'r’);
x=fscanf(fid, ‘%f’,[3,inf]);
flose(fid);
n=Iength(x(1,:));
T=x(1,:)+x(2,:)+x(3,:);
j=1;
for i=1:n
if x(1,i)+x(2,i)+x(3,i)==Ti
h(j)=i;
j=j+1;
end
end
t=length(h);
for j=1:m
for v=0.1:1:.1
xh1=0;
xh2=0;
for i=1:t
xhl=v^t*x(j,h(i)) ^t+xhl;
xh2=v^t+xh2;
end
xh(j,10*v)=xhl/xh2;
end
end
G=0;
for j=1:m
for i=1:t
G=x(j,i)*Ti^i+G;
end
Gt(j)=G;
end
for i=1:m
for v=0.1:1:.1
d(i,10*v)=Gt(i)-xh(i.10*v);
end
dd(i)=min(d(1,:));
if d(i,10*v)-dd(i)==0
v(i)=v;
end
end
v(3)=1-v(1)+v(2);
for i=1:m
at(1,:)=v(i)*x(i,:);
end
S=(at(1,:)+at(2,:)+at(3,:));
fid=fopen(‘C:\Documents and Setings\Adminitsrtaor\1.xls’,'w’);
for i=1:n;
fprint(fid, ‘%10.4f %10.4f %10.4f %10.4f %10.4f\n',x(1,i),x(2,i),x(3.i),T(1,i).S (1.i));
end
status=fclose(fid);

以上的这段程序是属性论评估模型的算法我想借助这个算法来计算我的另一组数据。但是,我就是不知道所引用的那两个文件(C:\Documents and Setings\Adminitsrtaor\1.txt和C:\Documents and Setings\Adminitsrtaor\1.xls)中的数据是怎样排列的,是不是需要加些东西,以及我这段程序是不是需要做些更改来计算我的那组数据。哎,新手就是这样,貌似很简单的问题,就是不懂,麻烦高手指点了,本人将不胜感激!
Doc5.doc (179 KB, 下载次数: 17)

[ 本帖最后由 sigma665 于 2008-9-21 10:47 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-9-21 10:45 | 显示全部楼层

回复 楼主 hws2007 的帖子

2) 标题要反映出文章精髓,请保持标题简洁易懂
6) 求助完整格式:出错代码和出错提示


另外,“以及我这段程序是不是需要做些更改来计算我的那组数据”。你所要的数据是什么,别人怎么知道



数据是怎样排列的
我很无语,打开看不就知道了吗

[ 本帖最后由 sigma665 于 2008-9-21 10:48 编辑 ]
 楼主| 发表于 2008-9-21 15:32 | 显示全部楼层
感谢楼上回复,我是新手,还请见谅,要不是时间仓促的话,我也不会来冒昧请教。我之所以问“数据是怎样排列的”,是因为,我没有这两个文本,上面的那组程序是我找到的非常类似算例,但没有这两个文本,所以特来请教的。至于我所要计算的数据,就在在附件中。要是您明白了我想问什么的话,还请指教,谢谢。

[ 本帖最后由 hws2007 于 2008-9-21 15:35 编辑 ]
发表于 2008-9-21 17:42 | 显示全部楼层
你的东西太长,我也看不懂
假如有文件 wenjian.txt
fid=fopen(‘wenjian.txt', 'r’);
x=fscanf(fid, ‘%f’,[3,inf]);
flose(fid);
x里的数据排列顺序与wenjian.txt排列一致

lz 可以简单试一下

评分

1

查看全部评分

 楼主| 发表于 2008-9-21 23:07 | 显示全部楼层
虽然我还是不太明白,但还是感谢您的帮助,希望有其他大侠能帮到我.
 楼主| 发表于 2008-10-9 19:11 | 显示全部楼层
继续期待中!!!!
发表于 2008-10-10 00:59 | 显示全部楼层

回复 6楼 hws2007 的帖子

小西主任说的对, 你所要的数据是什么,别人怎么知道
隔行如隔山, matlab仅是解决问题的工具而已
除非有人刚好背景与你类似, 知道你算甚麽, 否则必须花很大功夫了解
建议将问题稍为转换成别人易切入的问法

还有你晓得你要甚麽资料吗?
1.txt中内含x的资料, 而x为3*n矩阵, n为你要的维数
例如 : 1.txt为
67 70 73
66 63 73
68 74 73
63 67 70
76 74 78
68 68 70
1.xls应该是你要输出的答案, 但你要输出至Excel吗?(xls为Excel档)
但fprint中的格式又不像? 像是文件档
最後建议试run不就结了! 看看输出是否是你要的

评分

1

查看全部评分

发表于 2008-10-10 02:16 | 显示全部楼层
还没有看懂,最好写明白点
发表于 2008-10-11 00:30 | 显示全部楼层
楼主试了没?
我试过7楼的1.txt是可以读的
但你的程式似乎还有其他很多问题
发表于 2008-10-11 05:45 | 显示全部楼层


楼主最近来访是10月9日,显然没有尝试过,估计这个程序是他在网络上搜索到的,他自己根本没有读过
 楼主| 发表于 2008-10-13 15:45 | 显示全部楼层
原帖由 ChaChing 于 2008-10-10 00:59 发表
小西主任说的对, 你所要的数据是什么,别人怎么知道
隔行如隔山, matlab仅是解决问题的工具而已
除非有人刚好背景与你类似, 知道你算甚麽, 否则必须花很大功夫了解
建议将问题稍为转换成别人易切入的问法

还有 ...


首先谢谢你的热心帮助,由于我前几天出去了,刚回来看到你的帖子请谅解。你说的1.txt的排列方式我之前就已经试过了,刚才又试了一下但还是不行。
显示
       “??? Error using ==> fscanf
          Invalid file identifier -1.”
是不是因为你所说的还有很多其它问题?

[ 本帖最后由 hws2007 于 2008-10-13 15:48 编辑 ]
发表于 2008-10-13 17:41 | 显示全部楼层

回复 11楼 hws2007 的帖子

fid=-1表示fopen时可能找不到档案
建议楼主检查path对吗?

还有我说的"其他很多问题", 因不是很确定楼主的流程
不确定如何修改, 直觉程序有问题
现没空, 或许晚点再说说

[ 本帖最后由 ChaChing 于 2008-10-13 23:25 编辑 ]
 楼主| 发表于 2008-10-13 19:48 | 显示全部楼层

回复 12楼 ChaChing 的帖子

没关系,等你有空再说吧,麻烦你啦。我已经检查过路径,但好像没问题啊
发表于 2008-10-14 00:14 | 显示全部楼层

回复 13楼 hws2007 的帖子

我又试了一次1.txt是可以读的 , 再仔细检查一次, 可能是路径有空格造成fopen不成
所以我故意将路径改为有空格, 的确fopen不成
好像在那儿见过这好像是旧版matlab的bug, 楼主试试移动路径吧

直觉程序有问题, 例如
1.for loop中循环变数使用j及v, 但循环中v变数可能变?!
2.v=0.1:1:.1根本就是v=0.1! 干嘛循环?!
3.矩阵中的index如10*v, 直觉好怪?!
...

[ 本帖最后由 ChaChing 于 2008-10-14 00:27 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-10-14 10:19 | 显示全部楼层

回复 14楼 ChaChing 的帖子

不好意思,我仔细检查了一下,真是发现有不少我在输入程序时的错误。但我修改后试了一下,好像还是不行。
就是从“v(3)=1-v(1)+v(2);”这一行开始出现问题。
后面的“at(i,:)=v(i)*x(i,:);”和“S=(at(1,:)+at(2,:)+at(3,:));”好像也是一样。
显示“??? Index exceeds matrix dimensions.”
意思应该是矩阵的维数错误,但我看了一下,好像没什么问题啊
这里是我修改过的程序:
Clear
m=3;
Ti=228;
v=[1/3,1/3,1/3];
fid=fopen('C:\Documents and Settings\Administrator\1.txt', 'r');
x=fscanf(fid,'%f',[3,inf]);
fclose(fid);
n=length(x(1,:));
T=x(1,:)+x(2,:)+x(3,:);
j=1;
for i=1:n
if x(1,i)+x(2,i)+x(3,i)==Ti
h(j)=i;
j=j+1;
end
end
t=length(h);
for j=1:m
for v=0.1:1:.1
xh1=0;
xh2=0;
for i=1:t
xh1=v^t*x(j,h(i)) ^t+xh1;
xh2=v^t+xh2;
end
xh(j,10*v)=xh1/xh2;
end
end
G=0;
for j=1:m
for i=1:t
G=x(j,i)*Ti^i+G;
end
Gt(j)=G;
end
for i=1:m
for v=0.1:1:.1
d(i,10*v)=Gt(i)-xh(i,10*v);
end
dd(i)=min(d(1,:));
if d(i,10*v)-dd(i)==0
v(i)=v;
end
end
v(3)=1-v(1)+v(2);
for i=1:m
at(i,:)=v(i)*x(i,:);
end
S=(at(1,:)+at(2,:)+at(3,:));
fid=fopen('C:\Documents and Settings\Administrator\1.xls', 'w');
for i=1:n;
fprintf(fid,'%10.4f %10.4f %10.4f %10.4f %10.4f\n',x(1,i),x(2,i),x(3,i),T(1,i),S(1,i));
end
status=fclose(fid);

[ 本帖最后由 hws2007 于 2008-10-14 16:15 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 03:22 , Processed in 0.075612 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表