[Scilab-users] Avoiding a loop

Frieder Nikolaisen Frieder.Nikolaisen at student.hs-rm.de
Fri May 12 09:23:10 CEST 2017


 

Hello Tim, 

Yes. batt is the is the State of Charge of the battery.
P(n,2) (kN) is the power taken rom battery, engine or both. I will
calculate the battery in As, so P(n,2) is only an in alternate value -
but thats fare to complicated for the example code. 

"Proving that it's
correct will be a pain." - prooving the for-loop and getting the same
result with your way - that might be a prooving. 

As I have to code the
loop anyway, I will consider your if the loop is very slow. 

Best
regards 

Frieder 

Am 2017-05-11 18:48, schrieb Tim Wescott: 

>
Depending on how often you switch between battery and generator, and
>
how icky-picky you're willing to be, there may be a way to reduce
>
computation.
> 
> It looks like the term P(n,2) * (P(n+1,1) - P(n,1)) is
always there,
> and you're either adding it to 'gen' (is it energy
production?) or
> subtracting it from 'batt'.
> 
> If you really want to
go there, you can vectorize "if" statements by
> using boolean
expressions on vectors and the "find" function, which
> returns indexes
of true results. Then you can use "cumsum" on your
> P(n,2) * (P(n+1,1)
- P(n,1)) term to find where the battery state of
> charge (I assume
that's what 'batt' is) hits 800.
> 
> It'll be complicated. It'll be
prone to error. Proving that it's
> correct will be a pain. But when you
get it working, it'll be
> considerably faster.
> 
> On Thu, 2017-05-11
at 09:17 +0200, Frieder Nikolaisen wrote:
> 
>> Thanks for all the
answers. I feared that there is no way around a loop. During the process
batt (Battery) is charged and discharged. In my example, it is only
discharged. I will code the entire problem with a loop, maybe somebody
knows something to speed up the process with the full problem. (Tim: I
am not a programming pro, a C-function might not be a solution. ) Why do
I try avoidng a loop? I do have txt-document with 50 000 to 100 000
lines about a (hybrid-)locomotive shunting process. I do need to
optimize the energy managment. Because I am not mathemtic student, I
have to solve the problem empirical (try and error). The programm has to
run a few hundred times. With a matrix thats no problem, but with
matrixes only, I can only calculate the diesel usage without any battery
energy storage. Thanks for the checking my code anyway. Am 10.05.2017 um
20:53 schrieb Amanda Osvaldo: 
>> 
>>> What it's the equation you need
to compute ? Perhaps I can help. I think it's possible to compute with
something in this way: map = find (P(:,2) > 100 ); if batt > 800 then
batt = batt - P(map,2) * (P(map+1,1) - P(map,1)); end On Wed, 2017-05-10
at 17:23 +0200, Frieder Nikolaisen wrote: 
>>> 
>>>> Hello, I did write
an example code, but I do not like the time consuming way I solved the
problem. With 50 000 lines in the matrix, it wouldn't be fun. How can I
avoid using the for-loop? 10, 80; 11, 200 15, 0]; batt = 1000; gen = 0;
n = 1 for n=1:5 if P(n,2) > 100 then if batt > 800 then batt = batt -
P(n,2) * (P(n+1,1) - P(n,1)) else gen = gen + P(n,2) * (P(n+1,1) -
P(n,1)) end else batt = batt - P(n,2) * (P(n+1,1) - P(n,1)) end disp('n
' + string(n)) disp('batt ' + string(batt)) disp('gen ' + string(gen))
end Thanks alot! Best regards Frieder
_______________________________________________ users mailing list
users at lists.scilab.org [1]
http://lists.scilab.org/mailman/listinfo/users [2]
>>>
_______________________________________________ users mailing list
users at lists.scilab.org [3]
http://lists.scilab.org/mailman/listinfo/users [4]
>>
_______________________________________________ users mailing list
users at lists.scilab.org [5]
http://lists.scilab.org/mailman/listinfo/users [6]

 

Links:
------
[1]
mailto:users at lists.scilab.org
[2]
http://lists.scilab.org/mailman/listinfo/users
[3]
mailto:users at lists.scilab.org
[4]
http://lists.scilab.org/mailman/listinfo/users
[5]
mailto:users at lists.scilab.org
[6]
http://lists.scilab.org/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20170512/c25b81bb/attachment.htm>


More information about the users mailing list