24小时热门版块排行榜    

查看: 1062  |  回复: 12

woqunina

新虫 (初入文坛)

[求助] 如何算第四、五列

94372.000     74670.000           0.000        1491.000            1491.000
          94372.000     74670.000          50.000        1493.000            1496.000
          94372.000     74670.000         100.000        1494.000            1793.000
          94372.000     74670.000         150.000        1497.000            1792.000
          94372.000     74670.000         200.000        1491.000            1795.000
          94372.000     74670.000         250.000        1497.000            1793.000
          94372.000     74670.000         300.000        1496.000            1794.000
          55688.500     65415.340           0.000        1571.000            1553.000
          55688.555     65415.340          50.000        1573.000            1553.000
          55688.555     65415.340         100.000        1574.000            1763.000
          55688.555     65415.340         150.000        1577.000            1773.000
          55688.555     65415.340         200.000        1571.000            1763.000
          55688.555     65415.340         250.000        1577.000            1776.000
          55688.555     65415.340         300.000        1576.000            1774.000
          81677.912     81412.098           0.000        1571.000            1553.000
          81677.912     81412.098          50.000        1573.000            1553.000
          81677.912     81412.098         100.000        1574.000            1763.000
          81677.912     81412.098         150.000        1577.000            1773.000
          81677.912     81412.098         200.000        1571.000            1763.000
          81677.912     81412.098         250.000        1577.000            1776.000
          81677.912     81412.098         300.000        1576.000            1774.000
              .
              .
              .
一个数据文件“A.txt” 一共有五列,几千行。所有数据每7行为一组,即(1-7行)具有相同的第一列,第二列。
(8-14行)具有相同的第一列,第二列。。。。
第三列从0以50递增直到第7行的300。然后从第8行的0 增加到第14行300 。。。         
第四列和第五列是两个实验值(无规律)。
  
  我想通过matlab运算
  输出一个文件“B.txt”,他的格式如下:
                 
  第一列二列,三列不变,     第四列的计算公式如下                                   第五列数据
                                              【第四列第n行记做" B(n,4)" 】                                   
                                                B(1,4)=A(1,4)                                                     B(1,5)=A(1,4)/A(1,5)
                                                B(2,4)=[50*A(2,4)+  0*B(1,4)]/50                         B(2,5)=A(2,4)/A(2,5)
                                                B(3,4)=[50*A(3,4)+ 50*B(2,4)]/100                       B(3,5)=A(3,4)/A(3,5)
                                               B(4,4)=[50*A(4,4)+100*B(3,4)]/150                        。
                                               B(5,4)=[50*A(5,4)+150*B(4,4)]/200                         。
                                               B(6,4)=[50*A(6,4)+200*B(5,4)]/250                          。
                                              B(7,4)=[50*A(7,4)+250*B(6,4)]/300                          。
                                              B(8,4)= A(8,4)                                                         。
                                              B(9,4)= [50*A(9,4)+   0*B(8,4)]/50               
                                             B(10,4)=[50*A(10,4)+ 50*B(9,4)]/100              
                                             B(11,4)=[50*A(11,4)+100*B(10,4)]/150            
                                             B(12,4)=[50*A(12,4)+150*B(11,4)]/200            
                                                B(13,4)=[50*A(13,4)+200*B(12,4)]/250            
                                             B(14,4)=[50*A(14,4)+250*B(13,4)]/300            
                                               B(15,4)= A(15,4)                                          
                                               。                                                            
                                               。                                                            
                                              。                                                            
                                            以此类题                                                      
                                                                                                   
其中第五列数据,判断的第n行数据B(n,5)是否介于0.7-1.6之间, 如果是则输出实际值。
如果 B(n,5)<0.7,那么 B(n,5)=A(n,5)/4+0.525,   如果B(n,5)>1.6,那么B(n,5)=, A(n,5)/4+1.2

最后输出   “ B.txt   ”




clc;
clear;
dat=dlmread('D:\A.dat');
filename='D:\B.txt';
fp = fopen(filename,'w');
[M,N]=size(dat);
for i=1:M

  if dat(i,3)=0  
    dat(1,4)= dat(1,4)
     else ????
   
       fprintf(fp,'%20.2f   %20.2f  %20.2f  %20.2f   %20.2f \n',dat(i,1),dat(i,2),dat(i,3),dat(i,4),dat(i,5));
        end
    end
end
fclose(fp);

第四列和第五列我不知道该怎么办了,请大家帮忙给看看,谢谢

[ Last edited by woqunina on 2011-11-30 at 21:24 ]
回复此楼

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woqunina

新虫 (初入文坛)

有没有会啊
2楼2011-12-01 19:06:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

★ ★
xiegangmai(金币+2): 谢谢应助! 2011-12-04 18:58:41
我不知道怎么在回帖中粘贴代码,就直接复制过来了
a表示A,b表示B,建议楼主少用大写字母,大写字母一般都是留给外部变量使用的。我不是很清除格式化输出,感觉楼主比我更了解
clc
clear
a = dlmread('D:\A.dat');
filename='D:\B.txt';
fp = fopen(filename,'w');
[m, n]=size( a );
b = data;   %因为有三列值不用改变,可以将原始数据直接赋给b
for i = 1 : 7 : m
     if dat(i, 3) <= 10^(-5)
         b( i,   4 ) = a( i, 4 );
         b( i+1, 4 ) = ( 50 * a( i+1, 4 ) +    0  * b( i,     4 ) ) / 50;
         b( i+2, 4 ) = ( 50 * a( i+2, 4 ) +  50  * b( i+1, 4 ) ) / 50;
         b( i+3, 4 ) = ( 50 * a( i+3, 4 ) + 100 * b( i+2, 4 ) ) / 50;
         b( i+4, 4 ) = ( 50 * a( i+4, 4 ) + 150 * b( i+3, 4 ) ) / 50;
         b( i+5, 4 ) = ( 50 * a( i+5, 4 ) + 200 * b( i+4, 4 ) ) / 50;
         b( i+6, 4 ) = ( 50 * a( i+6, 4 ) + 250 * b( i+5, 4 ) ) / 50;
         b( i,     5 ) = a( 1,    4 ) / a( 1, 5 );
         b( i+1, 5 ) = a( i+1, 4 ) / a( i+1, 5 );
         b( i+2, 5 ) = a( i+2, 4 ) / a( i+2, 5 );
         b( i+3, 5 ) = a( i+3, 4 ) / a( i+3, 5 );
         b( i+4, 5 ) = a( i+4, 4 ) / a( i+4, 5 );
         b( i+5, 5 ) = a( i+5, 4 ) / a( i+5, 5 );
         b( i+6, 5 ) = a( i+6, 4 ) / a( i+6, 5 );
     end
end

%  判断B( n ,5 )
for i = 1 : m
     if b( i, 5 ) < 0.7
         b( i, 5 ) = a( i, 5 ) / 4 + 0.525;
     else b( i, 5 ) > 1.6
         b( i, 5 ) = a( i, 5 ) / 4 + 1.2;
     end
end
往事并不如烟
3楼2011-12-03 20:57:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

★ ★
xiegangmai(金币+2): 辛苦了! 2011-12-04 18:58:51
修改一下,效率提高了一些
CODE:
clc
clear
a = dlmread('D:\A.dat');
filename='D:\B.txt';
fp = fopen(filename,'w');
[m, n]=size( a );
b = data;   %因为有三列值不用改变,可以将原始数据直接赋给b
for i = 1 : 7 : m
     if dat(i, 3) <= 10^(-5)
         b( i,   4 ) = a( i, 4 );
         b( i+1, 4 ) = ( 50 * a( i+1, 4 ) +    0  * b( i,     4 ) ) / 50;
         b( i+2, 4 ) = ( 50 * a( i+2, 4 ) +  50  * b( i+1, 4 ) ) / 50;
         b( i+3, 4 ) = ( 50 * a( i+3, 4 ) + 100 * b( i+2, 4 ) ) / 50;
         b( i+4, 4 ) = ( 50 * a( i+4, 4 ) + 150 * b( i+3, 4 ) ) / 50;
         b( i+5, 4 ) = ( 50 * a( i+5, 4 ) + 200 * b( i+4, 4 ) ) / 50;
         b( i+6, 4 ) = ( 50 * a( i+6, 4 ) + 250 * b( i+5, 4 ) ) / 50;
      end
end

%  用matlab的数组运算计算B的第5列
b( :, 5 ) = a( :, 4 ) ./ a( :, 5 );

%  判断B( n ,5 )
for i = 1 : m
     if b( i, 5 ) < 0.7
         b( i, 5 ) = a( i, 5 ) / 4 + 0.525;
     else b( i, 5 ) > 1.6
         b( i, 5 ) = a( i, 5 ) / 4 + 1.2;
     end
end

往事并不如烟
4楼2011-12-04 12:12:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woqunina

新虫 (初入文坛)

感谢你的回复,但是不对啊,运算不出来。b = data; 是否应该改成b=a;但是再往下也不对。麻烦在看看,谢谢
5楼2011-12-04 17:53:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖


xiegangmai(金币+1): 谢谢参与! 2011-12-04 23:45:39
引用回帖:
5楼: Originally posted by woqunina at 2011-12-04 17:53:22:
感谢你的回复,但是不对啊,运算不出来。b = data; 是否应该改成b=a;但是再往下也不对。麻烦在看看,谢谢

的确,不好意思弄错了,还有第一个 if 语句中的 dat 也要改为 a
我又修改并检查了一遍,逻辑上应该没有错误了。
如果用的是C语言,就不会出现这种名称弄错的问题了
CODE:
clc
clear;
a = dlmread('D:\A.dat');
filename='D:\B.txt';
fp = fopen(filename,'w');
[m, n]=size( a );
b = a;   %因为第1,2,3列值不用改变,可以将原始数据直接赋给b
for i = 1 : 7 : m
     if a(i, 3) <= 10^(-5)
         b( i  , 4 ) = a( i, 4 );
         b( i+1, 4 ) = ( 50 * a( i+1, 4 ) + 0   * b( i  , 4 ) ) / 50;
         b( i+2, 4 ) = ( 50 * a( i+2, 4 ) + 50  * b( i+1, 4 ) ) / 50;
         b( i+3, 4 ) = ( 50 * a( i+3, 4 ) + 100 * b( i+2, 4 ) ) / 50;
         b( i+4, 4 ) = ( 50 * a( i+4, 4 ) + 150 * b( i+3, 4 ) ) / 50;
         b( i+5, 4 ) = ( 50 * a( i+5, 4 ) + 200 * b( i+4, 4 ) ) / 50;
         b( i+6, 4 ) = ( 50 * a( i+6, 4 ) + 250 * b( i+5, 4 ) ) / 50;
     end
end

%  用matlab的数组运算计算B的第5列
b( :, 5 ) = a( :, 4 ) ./ a( :, 5 );

%  判断并修改B的第5列
index = b( :, 5 ) < 0.7;
b( index ) = a( index ) / 4 + 0.525;
index = b( :, 5 ) > 1.6;
b( index ) = a( index ) / 4 + 1.2;

%{尽量不用循环
for i = 1 : m
     if b( i, 5 ) < 0.7
         b( i, 5 ) = a( i, 5 ) / 4 + 0.525;
     elseif b( i, 5 ) > 1.6
         b( i, 5 ) = a( i, 5 ) / 4 + 1.2;
     end
end
}%

往事并不如烟
6楼2011-12-04 20:01:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)


xiegangmai(金币+1): 谢谢参与! 2011-12-04 23:45:54
最后一个块注释弄错了,百分号都要放在大括号的前面,应该是:
%{
注释内容
%}
往事并不如烟
7楼2011-12-04 20:05:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖


xiegangmai(金币+1): 谢谢参与! 2011-12-04 23:46:04
楼主能够把输入数据和正确的输出数据给我吗?这样可以方便我调试程序,
第4列的求解公式的最后一个数字看错了,没有注意到它们按50递增
把第4列的求解公式尽可能化简了,以提高效率。
CODE:
clc
clear
a = dlmread('D:\A.dat');
filename='D:\B.txt';
fp = fopen(filename,'w');
[m, n]=size( a );
b = a;   %因为第1,2,3列值不用改变,可以将原始数据直接赋给b,简化后面的计算
for i = 1 : 7 : m
     %  b( i  , 4 ) = a( i, 4 );
     %  b( i+1, 4 ) = ( 50 * a( i+1, 4 ) + 0   * b( i  , 4 ) ) /  50;
     
     %  b( i+2, 4 ) = ( 50 * a( i+2, 4 ) + 50  * b( i+1, 4 ) ) / 100;
     b( i+2, 4 ) = 0.5 * ( a( i+2, 4 ) + b( i+1, 4 ) );
     
     b( i+3, 4 ) = ( 50 * a( i+3, 4 ) + 100 * b( i+2, 4 ) ) / 150;
     
     %  b( i+4, 4 ) = ( 50 * a( i+4, 4 ) + 150 * b( i+3, 4 ) ) / 200;
     b( i+4, 4 ) = 0.25 * a( i+4, 4 ) + 0.75 * b( i+3, 4 );
     
     %  b( i+5, 4 ) = ( 50 * a( i+5, 4 ) + 200 * b( i+4, 4 ) ) / 250;
     b( i+5, 4 ) = 0.2 * a( i+5, 4 ) + 0.8 * b( i+4, 4 );
     
     b( i+6, 4 ) = ( 50 * a( i+6, 4 ) + 250 * b( i+5, 4 ) ) / 300;
end

%  用matlab的数组运算计算B的第5列
b( :, 5 ) = a( :, 4 ) ./ a( :, 5 );

%  判断并修改B的第5列
index = b( :, 5 ) < 0.7;
b( index ) = a( index ) / 4 + 0.525;
index = b( :, 5 ) > 1.6;
b( index ) = a( index ) / 4 + 1.2;

往事并不如烟
8楼2011-12-04 20:29:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woqunina

新虫 (初入文坛)

非常感谢楼上的大力支持
现在豁然开朗!
谢谢!
现将最后完成的程序发上。
clc
clear
a = load('D:\A.dat');
filename='D:\B.txt';
fp = fopen(filename,'w');
[m, n]=size( a )
b = a;
for i = 1 : 7 : m
     %  b( i  , 4 ) = a( i, 4 );
     %  b( i+1, 4 ) = ( 50 * a( i+1, 4 ) + 0   * b( i  , 4 ) ) /  50;
     
     %  b( i+2, 4 ) = ( 50 * a( i+2, 4 ) + 50  * b( i+1, 4 ) ) / 100;
     b( i+2, 4 ) = 0.5 * ( a( i+2, 4 ) + b( i+1, 4 ) );
     
     b( i+3, 4 ) = ( 50 * a( i+3, 4 ) + 100 * b( i+2, 4 ) ) / 150;
     
     %  b( i+4, 4 ) = ( 50 * a( i+4, 4 ) + 150 * b( i+3, 4 ) ) / 200;
     b( i+4, 4 ) = 0.25 * a( i+4, 4 ) + 0.75 * b( i+3, 4 );
     
     %  b( i+5, 4 ) = ( 50 * a( i+5, 4 ) + 200 * b( i+4, 4 ) ) / 250;
     b( i+5, 4 ) = 0.2 * a( i+5, 4 ) + 0.8 * b( i+4, 4 );
     
     b( i+6, 4 ) = ( 50 * a( i+6, 4 ) + 250 * b( i+5, 4 ) ) / 300;
end

%  用matlab的数组运算计算B的第5列
b( :, 5 ) = a( :, 4 ) ./ a( :, 5 );

%  判断并修改B的第5列
index = b( :, 5 ) < 0.7;
b( index ) = a( index ) / 4 + 0.525;
index = b( :, 5 ) > 1.6;
b( index ) = a( index ) / 4 + 1.2;
for i = 1 : m
    fprintf(fp,'%20.2f   %20.2f  %20.2f  %20.4f   %20.4f \n',b(i,1),b(i,2),b(i,3),b(i,4),b(i,5));
end
      
fclose(fp);
9楼2011-12-05 10:44:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

woqunina

新虫 (初入文坛)

送鲜花一朵
лл
10楼2011-12-05 10:46:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 woqunina 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +35 医学老男孩 2026-08-13 84/4200 2026-08-17 20:26 by 大快人心啦
[基金申请] 感觉是下周放榜了 +4 angus9576 2026-08-17 8/400 2026-08-17 17:26 by angus9576
[基金申请] 时间戳变了,能看出什么问题? +4 基诺咪客 2026-08-17 4/200 2026-08-17 16:10 by Vivilian
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +12 Ldrop2023 2026-08-13 15/750 2026-08-17 15:02 by 小豌豆_发芽
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[基金申请] 时间戳又变了8-15 +13 archvillain 2026-08-15 25/1250 2026-08-16 20:13 by zhaosm1982
[基金申请] 2027广东省杰青 +3 奶牛小黑 2026-08-15 6/300 2026-08-16 20:07 by 奶牛小黑
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +3 Tide man 2026-08-14 3/150 2026-08-16 17:47 by jurkat.1640
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[基金申请] 有时候,自然基金真的不能太认真 (我的申报经验) +10 majunge000 2026-08-11 12/600 2026-08-16 08:18 by xli1984
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] 分享一下我之前已中青C的计划书的filecode +4 布布和一二 2026-08-11 5/250 2026-08-13 12:56 by cratir
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
信息提示
请填处理意见