声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1501|回复: 6

[编程技巧] 矩阵维数对不上...

[复制链接]
发表于 2008-12-12 08:31 | 显示全部楼层 |阅读模式

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

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

x
Initial_stock=5;
Weeks=40;
Sum=zeros(7,8);
Stock=0;
for Reorder_point=0:6
    for Order_quantities =1:8
        f=zeros(1,Weeks);
        Stock=Initial_stock;
        for w=1:1:Weeks
      Stock=Stock+f(w)*Order_quantities;
re=600; % Offset for random seed
for i=1:10000
xxx=i+re;
rand('seed',xxx);% Set the function to xxx state
X=rand(1);% Generate a uniformly distributed random variable over (0,1)
if(X<=0.04)&(X>=0)% Generate the random variable following the given distribution
D(i)=0;
elseif (X>0.04)&(X<=0.12)
Demand (i)=1;
elseif (X>0.12)&(X<=0.4)
Demand (i)=2;
elseif (X>0.4)&(X<=0.8)
Demand (i)=3;
elseif (X>0.8)&(X<=0.96)
Demand (i)=4;
elseif (X>0.96)&(X<=0.98)
Demand (i)=5;
elseif (X>0.98)&(X<=1)
Demand (i)=6;
end
Stock=Stock-Demand;     % the item amount at the end of the week
  if Stock<0     
Sum(Reorder_point+1,Order_quantities)= Sum(Reorder_point+1,Order_quantities) +20; % stockout cost
  Stock=0;
end
if Stock<=Reorder_point
Sum(Reorder_point+1,Order_quantities) = Sum(Reorder_point+1,Order_quantities) +10+5*Stock; %order replacement cost
else if Stock> Reorder_point
   Sum(Reorder_point+1,Order_quantities)= Sum(Reorder_point+1,Order_quantities)+5*Stock
end
end
end
end
end
end
mina=0;                           %initial value of re-order point
minb=0;                           %initial value of order quantity
minsum=sum(1,1);                  %comparison
for i=0:6
for j=1:8
  if sum(i,j)<minsum
   minsum = sum(i,j)
    mina=i-1
minb=j;
  end
end
end

就是要求一个order quantity和re-order point 一运行就说??? Error using ==> minus
Matrix dimensions must agree.
Error in ==> m2_2 at 31
Stock=Stock-Demand;     % the item amount at the end of the week
再运行??? Subscripted assignment dimension mismatch.
Error in ==> m2_2 at 39
   Sum(Reorder_point+1,Order_quantities)= Sum(Reorder_point+1,Order_quantities)+5*Stock

小弟菜鸟一只 麻烦高手指点下  非常感谢~!

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2008-12-12 09:12 | 显示全部楼层
通过对"常见的程序出错问题整理"的学习 受益非浅  把Demand (i) 后面的()去掉就能运行了 要不然维数对不上...不过运行很慢  数字也很大  估计还有其他错误  

我想请问如果把DEMAND那段换成 Demand_frequency=rand(1)*100;
            Demand_frequency=ceil(Demand_frequency);
            if Demand_frequency<=4,
                Demand_quantity=0
            elseif Demand_frequency>=5 & Demand_frequency<=12,
                Demand_quantity=1
            elseif Demand_frequency>=13&Demand_frequency<=40,
                Demand_quantity=2
            elseif Demand_frequency>=41&Demand_frequency<=80,
                Demand_quantity=3
            elseif Demand_frequency>=81&Demand_frequency<=96,
                Demand_quantity=4
            elseif Demand_frequency>=97&Demand_frequency<=98,
                Demand_quantity=5
            else Demand_frequency>=99,
                Demand_quantity=6
            end
就运行的很快   如果可以的话 麻烦指点下为什么?

[ 本帖最后由 zhou7069 于 2008-12-12 09:15 编辑 ]
发表于 2008-12-12 15:53 | 显示全部楼层
循环层数太多,当然慢了
发表于 2008-12-12 21:34 | 显示全部楼层
不好意思, 个人认为写程序还是要养成好习惯!
尽可能有层次, 简易的设定使用一行, 参考参考!
楼主有多馀的end未发现!
发表于 2008-12-12 23:53 | 显示全部楼层

回复 楼主 zhou7069 的帖子

if Stock<=Reorder_point
Sum(Reorder_point+1,Order_quantities) = Sum(Reorder_point+1,Order_quantities) +10+5*Stock; %order replacement cost
else if Stock> Reorder_point
   Sum(Reorder_point+1,Order_quantities)= Sum(Reorder_point+1,Order_quantities)+5*Stock
end
end
end
end
end
end
红色代码是不是有问题?
 楼主| 发表于 2008-12-13 00:41 | 显示全部楼层
原帖由 ch_j1985 于 2008-12-12 23:53 发表
if Stock Reorder_point
   Sum(Reorder_point+1,Order_quantities)= Sum(Reorder_point+1,Order_quantities)+5*Stock
end
end
end
end
end
end
红色代码是不是有问题?


我现在换了个思路在作了...非常感谢你~!
 楼主| 发表于 2008-12-13 00:42 | 显示全部楼层
原帖由 ChaChing 于 2008-12-12 21:34 发表
不好意思, 个人认为写程序还是要养成好习惯!
尽可能有层次, 简易的设定使用一行, 参考参考!
楼主有多馀的end未发现!


是的  是我写的太乱了  我现在重新换了个思路写了   谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-5 04:53 , Processed in 0.069427 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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