1 view (last 30 days)

Show older comments

Hi everyone,

So I have this code:

% Repulsive forces (Fr)

rho_r = sqrt((x-xo).^2+(y-yo).^2);

if rho_r > rho_0

Fr(1,1) = 0;

Fr(2,1) = 0;

elseif rho_r <= rho_0

Fr(1,1) = Fr(1,1)-Kr*(x-xo)*((rho_r-rho_0)/rho_r);

Fr(2,1) = Fr(2,1)-Kr*(y-yo)*((rho_r-rho_0)/rho_r);

end

Frc = [Frc Fr];

And the first values for x and y are as follow. The values inside the array xo and yo are:

x = 15

y = 10

xo = [20 30 35 50 65]

yo = [13 25 35 38 45]

As you can see with those values for x and y, the elseif should be operating however I still have Fr == 0. I've tried some things out but it still doesn't work. I even created a for loop just as followed:

rho_r = sqrt((x-xo).^2+(y-yo).^2);

for i = 1:5

if rho_r(1,i) > rho_0(1,i)

Fr(1,i) = 0;

Fr(2,i) = 0;

elseif rho_r(1,i) <= rho_0(1,i)

Fr(1,i) = Fr(1,i)-Kr*(x-xo(1,i))*((rho_r(1,i)-rho_0(1,i))/rho_r(1,i));

Fr(2,i) = Fr(2,i)-Kr*(y-yo(1,i))*((rho_r(1,i)-rho_0(1,i))/rho_r(1,i));

end

end

Sorry my bad i forgot to add the values of rho_0 and Kr:

rho_0 = [7 4 5 3 4];

Kr = [500 350 500 250 250];

I've attached the full code

Birdman
on 2 Apr 2020

Edited: Birdman
on 2 Apr 2020

Maybe the following code will get you going:

x = 10;

y = 10;

xo = [20 30 35 50 65];

yo = [13 25 35 38 45];

rho_r = sqrt((x-xo).^2+(y-yo).^2);

%dummy data

rho_0=30;

Kr=5;

%initial Fr

Fr=zeros(1,numel(xo));

%change values based on conditions

Fr(rho_r > rho_0)=0;

temp=-Kr*(x-xo)*((rho_r-rho_0)/rho_r);

Fr(rho_r <= rho_0)=temp(rho_r <= rho_0)

EDIT:

rho_r>rho_0

ans =

1x5 logical array

1 1 1 1 1

which means that every value in rho_r is greater than every corresponding value in rho_0. Therefore the following line

Fr(rho_r > rho_0)=0;

works and Fr becomes

Fr =

0 0 0 0 0

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!