声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2499|回复: 15

[编程技巧] 应该如何编程表示?

[复制链接]
发表于 2009-12-24 16:48 | 显示全部楼层 |阅读模式

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

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

x
问题是这样的:
L 是程序上一步求出的一个值(整数),它决定了有几个A,而A是一个一行k列的矩阵 A(1,k)
假设L=2 那么 有这样的关系 A2(1,k)=A1(1,k-1);    MSL(1,k)=A1(1,k)+A2(1,k);

现在L 是个可变的 我要编一个通式
理想状态是这样的:
for i=1:T-1
     WPD(i+1)(1,k)=WPD(i)(1,k-1);
end
MSL(1,k)=A1(1,k)+A2(1,k)+......+AL(1,k);

但是很明显不能这样表示 应该怎么表示?
百思不得其解:'(  请各位高手支招!

[ 本帖最后由 ChaChing 于 2009-12-26 11:52 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-12-24 21:32 | 显示全部楼层
个人水平专业有限, 看不清楚建议说的, 待高人路过!
发表于 2009-12-25 10:37 | 显示全部楼层
A2(1,k),L or one?
 楼主| 发表于 2009-12-25 19:54 | 显示全部楼层

回复 板凳 VibrationMaster 的帖子 沙发 ChaChing 的帖子

不好意思 写错了 修改后的在这里:还望高手提点,谢谢。
L 是程序上一步求出的一个值(整数),它决定了有几个A,而A是一个一行k列的矩阵 A(1,k)
假设L=2 那么 有这样的关系 A2(1,k)=A1(1,k-1);    MSL(1,k)=A1(1,k)+A2(1,k);
现在L 是个可变的 我要编一个通式   (L是多少就有多少个A)
理想状态是这样的:
for i=1:T-1
     A(i+1)(1,k)=A(i)(1,k-1);
end
MSL(1,k)=A1(1,k)+A2(1,k)+......+AL(1,k);

但是很明显不能这样表示 应该怎么表示?

[ 本帖最后由 ChaChing 于 2009-12-26 11:53 编辑 ]
发表于 2009-12-26 01:27 | 显示全部楼层

回复 地板 zebtra_stripe 的帖子

???
k=15; L=10; a1=1:k;
aa=zeros(L,k);
for ii=1:L, aa(ii,ii:k)=a1(1:k-ii+1); end
MSL=sum(aa)
 楼主| 发表于 2009-12-26 09:35 | 显示全部楼层

回复 5楼 ChaChing 的帖子

非常感谢这么晚还给我回帖,真是好人:@)
请问下这样表示后 最后一个A ( 也就是第L个A ) 是怎么表示  因为我要给它赋值
是 aa(L,L:k)?
谢谢。。
发表于 2009-12-26 09:51 | 显示全部楼层
为什么不能用二维数组?
 楼主| 发表于 2009-12-26 10:17 | 显示全部楼层

回复 7楼 VibrationMaster 的帖子

这个应该可以有,但是这个真不会。。
汗!:@L
发表于 2009-12-26 11:02 | 显示全部楼层

回复 7楼 VibrationMaster 的帖子

二维数组是2-D array吧! 我不是使用aa了?
发表于 2009-12-26 11:08 | 显示全部楼层

回复 6楼 zebtra_stripe 的帖子

k=15; L=10; a1=1:k;
aa=zeros(L,k);
for ii=1:L
   aa(ii,ii:k)=a1(1:k-ii+1);
   eval(['A',num2str(ii),'=aa(ii,:);']);
end
MSL=sum(aa)
 楼主| 发表于 2009-12-27 22:27 | 显示全部楼层

回复10楼 ChaChing 的帖子

主任 我还是有问题想请教一下:
1、这里的k表示周期,每个周期都有L个A值,L是个变量,所以我觉得 a1=1:k;
      这种错误的表达是我没有表达清楚而造成的,不好意思;
2、  eval(['A',num2str(ii),'=aa(ii,:);']);
      这个是什么意思 可以麻烦简单的解释下么?我help 了 但是还是没看懂 :@L
3、程序的大概构架是这样的:
for k=1:index
.................
   if POS(1,k)<=Po
        L=2;
           WIS(1,k)=max(POS(1,k),0);%制造商生产部门在制品投产量(即零部件和原材料出库量)
           WPR(1,k)=WIS(1,k);      
           MIS(1,k)=max(min(WI(1,k-1)+WIS(1,k-1),WB(1,k-1)+WIO(1,k-1)),0);         
           WPR(1,k-2)=MIS(1,k);
          A2(1,k-1)=MIS(1,k-1);       %这里是由于L=2  所以有A1  A2
           A1(1,k)=WPR(1,k-1);
           A2(1,k)=A1(1,k-1);
           MSL(1,k)=A1(1,k)+A2(1,k);
%制造商销售部门产品在途量
           
          else if POS(1,k)>Po

              WIS(1,k)=max(POS(1,k),0);%制造商生产部门在制品投产量(即零部件和原材料出库量)
              WPR(1,k)=WIS(1,k);  
              WOS(1,k)=min(WI(1,k-1)+WIS(1,k-1),WB(1,k-1)+WIO(1,k-1));%制造商生产部门在制品完成量(即产品生产量)
              Uo=WOS(1,k);
              L=ceil(Lo+ (POS(1,k)-Po)/Uo);    %这里决定了L是变量
              MIS(1,k)=WOS(1,k);
             WPR(1,k-L)=MIS(1,k);

              aa=zeros(T,k);   %%现在的问题就在这里 我实在是不会表示了 L个A,  还有着类似于下面注释部分的关系
                                            (当然注释部分的表达不是MATLAB的表示,只是大概这个意思)
             for ii=1:T
                 aa(ii,ii:k)=a1(1:k-ii+1);
             end

%             for i=1:T
%               A(L)(1,k-1)=MIS(1,k-1);
%               A(i)(1,k)=WPR(1,k-1);
%               A2(1,k)=A1(1,k-1);  
%               A(i+1)(1,k)=A(i)(1,k-1);
%               end

            MSL(1,k)=sum(aa);
           end
     end   
end

谢谢你,帮帮忙了,就等着这个程序毕业了,搞不定年都过不好,跪谢跪谢 !!
发表于 2009-12-28 00:11 | 显示全部楼层

回复 11楼 zebtra_stripe 的帖子

个人水平有限, 实在无法子细看懂LZ的程序! LZ一定得让想帮的人知道LZ要什么!
1."k=15; L=10; a1=1:k;"仅是举例而已, 具体看LZ运用!
2.eval(['A',num2str(ii),'=aa(ii,:);']), 简单说: 若当ii=2时, 等同执行A2=aa(2,:);
 楼主| 发表于 2009-12-28 09:27 | 显示全部楼层

回复 12楼 ChaChing 的帖子

谢谢你,我还是问点小的知识自己慢慢写吧
请问下 二维数组 如果要表示  A2(1,k)=A1(1,k-1);类似的表达
可以写成   
for ii=1:T
A[ii+1;1,k]=A[ii;1,k-1];
end  这样吗? 貌似有错误.
谢谢
 楼主| 发表于 2009-12-28 13:16 | 显示全部楼层

回复 12楼 ChaChing 的帖子

想了一早上,最明了的说,我要的是;把下面的表达能够写成一个通式:
  switch T
      
        case 2
           WPD2(1,k-1)=MIS(1,k-1);
           WPD1(1,k)=WPR(1,k-1);
           WPD2(1,k)=WPD1(1,k-1);
           MSL(1,k)=WPD1(1,k)+WPD2(1,k);
        case 3
           WPD3(1,k-1)=MIS(1,k-1);
           WPD1(1,k)=WPR(1,k-1);
           WPD2(1,k)=WPD1(1,k-1);
           WPD3(1,k)=WPD2(1,k-1);
           MSL(1,k)=WPD1(1,k)+WPD2(1,k)+WPD3(1,k);
        case 4
           WPD4(1,k-1)=MIS(1,k-1);
           WPD1(1,k)=WPR(1,k-1);
           WPD2(1,k)=WPD1(1,k-1);
           WPD3(1,k)=WPD2(1,k-1);
           WPD4(1,k)=WPD3(1,k-1);
           MSL(1,k)=WPD1(1,k)+WPD2(1,k)+WPD3(1,k)+WPD4(1,k);
        case 5
           WPD5(1,k-1)=MIS(1,k-1);
           WPD1(1,k)=WPR(1,k-1);
           WPD2(1,k)=WPD1(1,k-1);
           WPD3(1,k)=WPD2(1,k-1);
           WPD4(1,k)=WPD3(1,k-1);
           WPD5(1,k)=WPD4(1,k-1);
           MSL(1,k)=WPD1(1,k)+WPD2(1,k)+WPD3(1,k)+WPD4(1,k)+WPD5(1,k);
。。。。。。。。
end

这样我的问题应该很好理解了吧?实在不好意思:@L
期待高手的帮助,谢谢
发表于 2009-12-29 00:22 | 显示全部楼层

回复 14楼 zebtra_stripe 的帖子

eval(['WPD',num2str(T),'(1,k-1)=MIS(1,k-1);']);
WPD1(1,k)=WPR(1,k-1); MSL(1,k)=WPD1(1,k);
for kk=2:T
    eval(['WPD',num2str(kk),'(1,k)=WPD',num2str(kk-1),'(1,k-1);']);
    eval(['MSL(1,k)=MSL(1,k)+WPD',num2str(kk),'(1,k);']);
end

但真的不确定是否LZ要的!? 假设T是一整数!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-29 18:16 , Processed in 0.057002 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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