Matlab:在每个日期用相同的量进行计算,并在日期变化时进行调整(用于循环)



我有三个列向量(300x1(Date、VariousA、Amount,我想根据日期时间向量(Date(对我的每一行列向量进行计算。如果日期没有更改,则计算中的金额也不应更改。如果日期发生了变化,我想将上一个日期的所有计算结果相加,并将总和添加到上一日期的金额中。

以下示例基于下表:

首先,"数量矢量"仅在第一行中包含一个值(100(。计算得出60。由于下一行的日期保持不变,因此金额也保持不变-计算结果为30。由于第3行中的日期发生了更改,我现在想调整我的金额。上一日期的结果之和为90,应添加到上一日期金额中。第3行中的新金额因此为190,计算得出85.5需要添加到下一行的190上,因为第4行的日期再次更改,依此类推…

我希望它已经变得清晰起来。有人能帮忙吗?

非常感谢!

| Date          | VariousA  | Amount    | Result    | HelpColumn    |
|-------------  |---------- |--------   |--------   |-------------- |
| 28-Jul-2001   | 0.6       | 100       | 60        | 100*0.6       |
| 28-Jul-2001   | 0.3       | 100       | 30        | 100*0.3       |
| 29-Jul-2001   | 0.45      | 190       | 85.5      | 190*0.45      |
| 04-Aug-2001   | -0.7      | 275.5     | -192.5    | 275.5*(-0.7)  |
| 04-Aug-2001   | 0.1       | 275.5     | 27.55     | 275.5*0.1     |
| 05-Aug-2001   | 0.4       | 110.55    | 44.22     | 110.55*0.4    |

编辑:我已经想出了这个代码,但它根本不起作用:

if     i>1 & Date(i)>Date(i-1) 
Amount(i) = sum(Result(find(Date==Date(i-1)))) + Amount(i-1);
elseif i>1 & Date(i)==Date(i-1)    
Amount(i) = Amount(i-1);
end  
Result(i)=VariousA(i)*Amount(i);

我不太确定,但这就是你想要的吗?

DateString = {'07/28/2001';'07/28/2001';'07/29/2001';'08/04/2001';'08/04/2001';'08/05/2001'};
formatIn = 'mm/dd/yyyy';
Date=datevec(DateString,formatIn);
VariousA=[0.6;0.3;0.45;-0.7;0.1;0.4];
Amount=[100;0;0;0;0;0];
Result=zeros(length(VariousA),1);
k=1;
for i=1:1:length(VariousA)
if i>1
Amount(i)=Amount(i-1);
if sum(Date(i,:)>Date(i-1,:))>0
for j=1:1:k
Amount(i)=Amount(i)+Result(i-j);
end
k=1;
else
k=k+1;
end
end
Result(i)=VariousA(i)*Amount(i);
end

相关内容

  • 没有找到相关文章