Loop until a condition is met

How can i do a function that give values for P0, P1, P2 and P3 until the condition Rt<Rmax is met
h=0.001;
Rmax=zeros(1,length(v));
t=zeros(1,length(v));
x=zeros(1,length(v));
for i=1:length(v)
t(i)=(v(i)-v(0))/a;
x(i)=v(0)*t(i)+(1/2)*a;
Rmax(i)=(v(i)^2)/amax;
end
B(x)=(1-x)^3*P0+3*x*(1-x)^2*P1+3*x^2*(1-x)*P2+t^3*P3;
Rt=(1+(diff(B)/h)^2)^(3/2)/(diff(B,2)/h);
end

8 Comments

Few things -
Indexing in MATLAB starts with 1, not 0, thus these lines will lead to an error
t(i)=(v(i)-v(0))/a;
x(i)=v(0)*t(i)+(1/2)*a;
If you want to refer it the first element, use v(1).
Secondly, you can vectorize some parts of your code
%Assuming a and amax are a scalar constant
h=0.001;
%define a value as a variable if you have to use it many times
len=length(v);
%Rmax=zeros(1,len);
%t=zeros(1,len);
%x=zeros(1,len);
%Note that, as the code uses another variable to directly define
%t, x and Rmax, I have chosen not to preallocate them
%Assuming you want to refer to the first element
t=(v-v(1))/a;
x=v(1)*t+(1/2)*a;
Rmax=(v.^2)/amax;
% ^
%Since v is an array, it requires element-wise operation
However, it's not clear what you want to achieve with B and subsequently Rt.
B(x)=(1-x)^3*P0+3*x*(1-x)^2*P1+3*x^2*(1-x)*P2+t^3*P3;
Rt=(1+(diff(B)/h)^2)^(3/2)/(diff(B,2)/h);
Is B supposed to be a polynomial in x? If not then specify what it is supposed to be.
Are P0, P1, P2 and P3 supposed to be unknown whose value you have to find? If they are unknowns, how is one supposed to find the value of Rt to compare with Rmax?
And to which value of Rmax do you want to compare? As Rmax is an array.
Thats right, B(x) is suposed tu be a polynomial in x that defines a curve and P0, P1, P2, P3 are unknown values. But x cant have any valor because I know de longitude, acceleration and speed of the object and because of that i define de valors of x before. For each speed theris a point "x" in the curve and a Rtmax, i want to do a function that calculates de valors of P0,P1, P2 and P3 to meet the condition Rt<Rtmax en each point.
Thanks for the help
Alright.
What is t supposed to be here? The variable defined above in terms of v?
If yes, then you will have a vector as a coefficient. If no, then please specify.
syms X P0 P1 P2 P3
B(X)=(1-X)^3*P0+3*X*(1-X)^2*P1+3*X^2*(1-X)*P2+t^3*P3;
Rt=(1+(diff(B)/h)^2)^(3/2)/(diff(B,2)/h)
It would be helpful if you can attach the data for v, as all calculations depend on it.
Thats a mistake i made, sorry
B(x)=(1-x)^3*P0+3*x*(1-x)^2*P1+3*x^2*(1-x)*P2+x^3*P3;
Okay, it was a typo.
Please attach the data for v, as I mentioned earlier as well.
function [v] = VelTren(v0,a,Lt)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
l=0:0.1:Lt;
v=zeros(1,length(l));
v(1)=v0;
for i=2:length(l)
v(i)=((v0.^2)+2*a*l(i)).^(1/2);
end
end
Again, the for loop can be vectorized
l=0:0.1:Lt;
v=(v0.^2+2*a*l).^(1/2);
What are the inputs to the function VelTren? Please provide the values of v0, a, Lt and amax.
John, please note that when I say data, it means anything that is necessary to run the code, including definitions of variables and input values to functions.
This might be helpful to you, as that is the norm on this forum.
I didnt know that, thanks.
There are no stabliced because the purpose is to calculate the transition curve of any train, the idea is that introducing some values of v0, a Lt, R and L the prpgram will calculate the needed transition curve
a is the acceleration of the train it could be 1,5m/s^3
v0 is the speed that the trai has in the start of the curve tha could be 5m/s
Lt is the train longitude that could be 90m
L=the longitude of the curve 130m
R= Radius of the curve in the end of the transition curve, when the radius is constant
The purpose of the first code that i send is to claculate polynomical fuction (B(x)) in the transition curve, being Rt its radius, that make the de normal acceleration be less than 0,8 m/s^2.

Sign in to comment.

Answers (1)

I understand that you want to find values P0,P1,P2 and P3 until Rt<Rmax.
For this you can use while loop with condition Rt<Rmax;
while (Rt < Rmax)
% your code here
end

Categories

Find more on Mathematics in Help Center and File Exchange

Asked:

on 20 Mar 2023

Commented:

on 21 Mar 2023

Community Treasure Hunt

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

Start Hunting!