How to set ranges for 2 different variables in the same loop?

I have a set of x and y values and I need to isolate and substitute the values which are within the range to a formula that I've already typed out, but it keeps coming up with the "Operands to the || and && operators must be convertible to logical scalar values."
This is the loop section of code =
while ((x < 40) & (x > 15) && (y < 25) & (y > 5))
deltaLdeltax = ((-(40 - x))/sqrt(((40-x)^2)+((y-10)^2)))+((x-15)/sqrt(((x-15)^2)+((y-25)^2)))+((x-10)/sqrt(((x-10)^2)+((y-5)^2)))
deltaLdeltay = ((y-10)/sqrt(((40-x)^2)+((y-10)^2)))+((-(25-y))/sqrt(((x-15)^2)+((y-25)^2)))+((y-5)/sqrt(((x-10)^2)+((y-5)^2)))
end

 Akzeptierte Antwort

Alex Sune
Alex Sune am 20 Mai 2019
Bearbeitet: Alex Sune am 20 Mai 2019
You don't need a loop:
x = randi(100,1,100);
y = randi(100,1,100);
idx = ((x < 40) & (x > 15) & (y < 25) & (y > 5));
x = x(idx);
y = y(idx);
deltaLdeltax = ((-(40 - x))./sqrt(((40-x).^2)+((y-10).^2)))+((x-15)./sqrt(((x-15).^2)+((y-25).^2)))+((x-10)./sqrt(((x-10).^2)+((y-5).^2)));
deltaLdeltay = ((y-10)./sqrt(((40-x).^2)+((y-10).^2)))+((-(25-y))./sqrt(((x-15).^2)+((y-25).^2)))+((y-5)./sqrt(((x-10).^2)+((y-5).^2)));

4 Kommentare

madhan ravi
madhan ravi am 20 Mai 2019
Bearbeitet: madhan ravi am 20 Mai 2019
Alex find() is not necessary in the line idx, direct logical indexing is more efficient.
Thanks Madhan. I know it, but I think it is better to understand what the code is doing for someone who is trying to do it with a loop. (changed anyway ;))
Thanks for your help! Sorry I'm not so confident with my matlab skills so I'm not sure what the x = randi(100,1,100); and the y = randi(100,1,100) is supposed to do in this section. What does this do?
It is just an example for x and y (row vectors of random numbers between 1 and 100). You have to use your x and y variables.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 20 Mai 2019
while ((x < 40) && (x > 15) && (y < 25) && (y > 5))
deltaLdeltax = ((-(40 - x))/sqrt(((40-x)^2)+((y-10)^2)))+((x-15)/sqrt(((x-15)^2)+((y-25)^2)))+((x-10)/sqrt(((x-10)^2)+((y-5)^2)));
deltaLdeltay = ((y-10)/sqrt(((40-x)^2)+((y-10)^2)))+((-(25-y))/sqrt(((x-15)^2)+((y-25)^2)))+((y-5)/sqrt(((x-10)^2)+((y-5)^2)));
end

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by