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@lists.scilab.org [1] http://lists.scilab.org/mailman/listinfo/users [2] >>> _______________________________________________ users mailing list users@lists.scilab.org [3] http://lists.scilab.org/mailman/listinfo/users [4] >> _______________________________________________ users mailing list users@lists.scilab.org [5] http://lists.scilab.org/mailman/listinfo/users [6] Links: ------ [1] mailto:users@lists.scilab.org [2] http://lists.scilab.org/mailman/listinfo/users [3] mailto:users@lists.scilab.org [4] http://lists.scilab.org/mailman/listinfo/users [5] mailto:users@lists.scilab.org [6] http://lists.scilab.org/mailman/listinfo/users
_______________________________________________ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users