[Scilab-users] modifying a variable changes the value of another variable!!!
Ezequiel Soule
ezequielsoule at gmail.com
Mon Jan 28 19:11:17 CET 2013
Sorry I didn't clarify that: I define the initial random positions, I
store them in a variable, say pos_in, and then I call the functions (the
different versions) with pos_in as input, so the initial positions are
the same in every case.
On 28/01/13 14:07, Serge Steer wrote:
> If the initial position of your sphere are randomly set, it can be
> normal than you do not have the same number of iteration from one
> simulation to an other one.
> can you check using
> rand("seed",0)
> to force identical initial points for your various tests.
>
> Serge Steer
> Le 28/01/2013 16:18, Ezequiel Soulé a écrit :
>> The algorithm essentially starts with a set of spheres in random
>> positions and in a relatively dense state, and runs an iterative
>> process where the spheres are moved in each iteration in order to
>> reduce the overlaps.
>> The core of the script is more or less like this
>>
>> superp=calc_D_superp_dobcel(pos); //this line uses an external function to calculate a matrix with the overlap between paritcles, defined as superp(i,j)=max(R(i)+R(j)-D(i,j),0) . D(i,j) is the distance between the spheres and R is the radius. pos is a 3-colum matrix containging the coordinates of the position of each sphere
>>
>> control=0; //number of iterations
>>
>> sup_2(int(control/max_mov*20)+1)=sumsupant/max_mov*20; // this defines a third control system as will be described bellow. **
>>
>> while max(superp)>tol // the maximum value of superp controls when the system is considered overlap-free and the algorithm is finished
>>
>>
>> ...
>> // Several lines where the positions of each sphere are modified, acording to the values of the matrix superp
>> ...
>>
>> superp=calc_D_superp_dobcel(pos); //matrix superp is re-calculated with the new positions
>>
>>
>> control=control+1;
>>
>> if control>max_mov then break; end // control by maximum number of iterations
>>
>> //the following belongs to the third control system:
>>
>> if length(sup_2)==int(control/max_mov*20) then sup_2(int(control/max_mov*20)+1)=sum(superp)/max_mov*20; //**
>> else//**
>> sup_2(int(control/max_mov*20)+1)=sup_2(int(control/max_mov*20)+1) + sum(superp)/max_mov*20; //**
>> end //**
>>
>> if length(sup_2)>4.5 then //**
>> if sup_2($-1)>0.85*sup_2($-2) & sup_2($-2)>0.85*sup_2($-3) then break; end //**
>> if sup_2($-1)>0.7*sup_2($-2) & sup_2($-2)>0.7<
>> span styl
>> e="color:rgb(92,92,92)">*sup_2($-3) & sup_2($-3)>0.6*sup_2($-4) then break; end //**
>> end //**
>>
>> end//ends while loop
>>
>> The third control system essentially controls if the overlap is
>> decreasing as the iterations proceed. It defines a new variable,
>> sup_2, that stores the average value of sum(superp) in max_mov/20
>> iterations. If this average does not decrease fast enough (>15%
>> decrease in two or >30%decrease in three consecutive groups of
>> max_mov/20 iterations), it considers that it will not converge and
>> breaks.
>> Now, this third control system seems to be problem. As you can see,
>> non of its lines (marked with ** for more clarity), affects the
>> values of superp (at least, it shouldn´t). But still, the value of
>> superp is modified when I include this control system.
>> The other problem I had was with a similar algorithm, without the
>> third control system, but just adding a "pause" rigth after the last
>> end. This will also modify the values of superp and the number of
>> iterations.
>> As I said, the error in superp is not important (it is in the order
>> of 1.d-15), but this difference propagates exponentially through the
>> iterations and can significantly modify (like a 30%) the total number
>> of iterations (I was trying to evaluate if the third control really
>> worked, but I couldn´t do it because the algortihm CONVERGES with a
>> different number of iterations...)
>>
>>
>> _______________________________________________
>> users mailing list
>> users at lists.scilab.org
>> http://lists.scilab.org/mailman/listinfo/users
>
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20130128/ddc3a4df/attachment.htm>
More information about the users
mailing list