How to use cumsum function?
显示 更早的评论
not able to get the expected output.
if col5<200 then, col5+25
and the result will be replaced in next row of col5 untill col5 <200.
for example:
B(30,5)=194.87 so, it will be 194.87+25 = 219.87
B(31,5)=219.87 +25 = 244.87
B(32,5)=244.87+25 = 269.87
B(33,5)=269.87+0= 269.87
A=load("B.mat");
B=A.B;
B(:,5)=B(1,4)-cumsum(B(:,3));
CG=25;
for i=1:size(B,1)
if B(i,5)<200
B(i,6)=CG;
else
B(i,6)=0;
end
B(i,7)=B(i,6)+cumsum(B(i,5));
% B(i,5)=B(i,7);
end
1 个评论
Jan
2022-9-30
Please avoid pseudo-syntax like "if col5<200 then, col5+25". Use Matlab syntax, because the readers can understand it.
cumsum of a single element replies the value of the element. A cumulative sum is meaningful for a vector only.
采纳的回答
更多回答(1 个)
Jan
2022-9-30
CG = 25;
C = 0;
for i = 1:size(B, 1)
if B(i, 5) < 200
if C == 0
C = CG;
else
C = 0;
end
end
B(i, 5) = B(i, 5) + C;
end
or shorter:
CG = 25;
C = 0;
for i = 1:size(B, 1)
if B(i, 5) < 200
C = CG * (C == 0);
end
B(i, 5) = B(i, 5) + C;
end
8 个评论
Arif Hoq
2022-10-4
Arif Hoq
2022-10-4
Jan
2022-10-4
@Arif Hoq: You've spent a lot of time to create this image. Remember, that I do not have any idea about what you are doing. I see 3 columns. The first element of the first column is blank, the other elements of the first column contain values. Are they related to the problem? What does "300-50" in the 2nd element of the 3rd column mean? Is this the first element of the 2nd column minus the constant? Formerly you have mentioned, that 25 is added. So what does this row mean:
50 250 arrow 300-50
I still do not understand, what you want to achieve.
The sentence "But in the next hour battary capacity starts from B(49,7)" is jard to understand also. "Hour"? "Battery capacity"? "kWh"? Too many information, which do not matter the question, and too few information about what you want to achieve.
@Arif Hoq: cumsum is the cumulative sum over the elements of a vector. In your code the argument of cumsum is a scalar. Then you can omit the cumsum inside the loop. A simplified version of your code:
loadValue = [0;50;20;10;5;30;12;8;20;30;5];
capacity = 300;
mat = capacity(1,:) - cumsum(loadValue);
for i = 1:numel(loadValue)-1
if mat(i) < 200
mat(i) = mat(i) + 25;
end
mat(i+1) = mat(i) - loadValue(i+1);
end
mat
Avoid redefining important Matlab commands as "load" as variables.
Remember that size() replies a vector. Then for i = 1:size(x) is fragile. Use the unique and clear numel instead or sprcify the dimension: size(x,1).
Now you have removed the load values twice from the capacity. Is this wanted?
Arif Hoq
2022-10-6
类别
在 帮助中心 和 File Exchange 中查找有关 MATLAB Coder 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
