Solving equations with different ranges

8 views (last 30 days)
I need to get the values of P by using different equations under different values of S, as shown in the attached image. I have written codings for the equations but could someone please guide me on how can I make the equations work along with the given different range of S?
sigma0=5; Lf=12; S=0:0.01:600; S0=0.18; %arbitrary values
P=sigma0*[2*sqrt(S/S0)-(S/S0)]; %Run this eq. for S=<S0 (S is less than & equal to S0)
P=sigma0*(1-2*S/Lf)^2; %Run this eq. for S0<=S<=Lf/2
P=0; %Run this eq. for S>=Lf/2
The value of S0 will be a constant value which I will get by solving another set of equation (not included in this query). All of the values I have taken are arbitrary. Later I will be plotting the resultant values of P and for corresponding values of S.
Thank you
  1 Comment
jack carter
jack carter on 30 Aug 2017
Please add one more detail to this question that later in my function I will be needed to use values of P, from both equations, separately. Like, using the resultant values of equation one (when delta (S) is less than delta0 (S0)) and multiply or add to other parameters. And also using the resultant values of P for second equation and third equation separately with some other parameters. These values will be like my input values to solve other equations. How could I use them separately later on?

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 30 Aug 2017
Using ‘logical vectors’, ‘P’ is not defined for ‘S’ greater than or equal to ‘Lf/2’, so an explicit condition for that region to be 0 is not necessary in the expression.
This seems to me to do what you want:
sigma0=5; Lf=12; S=0:0.01:600; S0=0.18; %arbitrary values
P = @(S,S0,Lf,sigma0) sigma0*((2*sqrt(S/S0)-(S/S0)).*(S<=S0) + ((1-2*S/Lf).^2).*((S0<=S) & (S<=Lf/2)));
figure(1)
plot(S, P(S,S0))
grid
xlabel('S')
ylabel('P')
axis([0 10 ylim])
This uses an anonymous function implementation of your conditional expression.
  9 Comments
Star Strider
Star Strider on 31 Aug 2017
The way I wrote my function, you have to supply all the input arguments. It does not automatically take any arguments from your workspace.
This works:
sigma0=5; Lf=12; S=0:0.01:600; S0=130; %arbitrary values
P = @(S,S0,Lf,sigma0) sigma0*((2*sqrt(S/S0)-(S/S0)).*(S<=S0) + ((1-2*S/Lf).^2).*((S0<=S) & (S<=Lf/2)));
figure(1)
plot(S, P(S,S0,Lf,sigma0))
grid
xlabel('S')
ylabel('P')
axis([0 10 ylim])

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 30 Aug 2017
If you have the symbolic toolbox, you could code in terms of piecewise()

Products

Community Treasure Hunt

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

Start Hunting!