Keep y value below certain value in a loop
古いコメントを表示
Hey,
I am trying to run a function, where y can never be below zero and never above Capacity.
The function looks like that:
remainingCharge = Capacity - usage + ChargingPower
So remainingCharge = y and is not allowed to go below 0 or beyond Capacity.
I've tried:
for x = 1:1:tablesize
t.remainingCharge = Capacity - t.usage(x) + t.ChargingPower(x)
if t.remainingCharge(x) > Capacity
remainingCharge(x) == Capacity
end
end
This is not working, as Capacity needs to be as long as the tablerows - currently I am adding Capacity to the table - hopfeully this works.
In the meantime if anyone has a suggestion on how to solve this I am happily taking hints!
回答 (2 件)
Image Analyst
2021 年 4 月 17 日
t.remainingCharge(x) = Capacity - t.usage(x) + t.ChargingPower(x) % x is the row number I think.
% Make it never be above Capacity
t.remainingCharge(x) = min([t.remainingCharge(x), Capacity]);
% Make it never be below 0
t.remainingCharge(x) = max([t.remainingCharge(x), 0]);
1 件のコメント
Image Analyst
2021 年 4 月 19 日
Lukas, did min() and max() not work to clip the signal for some reason? Why not?
Also note I indexed t.remainingCharge so that you're not overwriting it each time.
Star Strider
2021 年 4 月 17 日
編集済み: Star Strider
2021 年 4 月 17 日
Try something like this:
x = linspace(0, 5*pi, 250);
Capacity = 0.7;
limit_y = @(y,Capacity) (y<0).*0 + (y>Capacity).*Capacity + ((y>=0) & (y<Capacity)).*y;
y = sin(x);
figure
plot(x, y, 'LineWidth',1)
hold on
plot(x, limit_y(y,Capacity), '--', 'LineWidth',1.5)
hold off
grid
xlabel('x')
ylabel('y')
legend('Original','Limited', 'Location','best')
Note that no explicit loops are necessary, since the anonymous functrion does everything in one call.
The anonymous function is designed to work on vectors, however it is certainly possible to call the anonymous function in a loop with individual scalar values as the ‘y’ argument. It will work the same way, regardless.
Experiment with it to get the result you want.
EDIT — (17 Apr 2021 at 17:12)
Added plot image to illustrate function effect —

.
7 件のコメント
Lukas Netzer
2021 年 4 月 18 日
Star Strider
2021 年 4 月 18 日
My pleasure!
I would have to have at least a representative sample of your data, and a more detailed description of what you want to do.
My code addresses only the problem presented, not any others.
Lukas Netzer
2021 年 4 月 18 日
Star Strider
2021 年 4 月 18 日
I re-read this several times. I still do not understand what you want to do, or what the constraints are.
Lukas Netzer
2021 年 4 月 19 日
Lukas Netzer
2021 年 4 月 19 日
Star Strider
2021 年 4 月 19 日
O.K.
I still do not completely understand it, however I am happy you got it to work.
カテゴリ
ヘルプ センター および File Exchange で Mathematics についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

