MATLAB Answers

Using Inequality in a For loop

63 views (last 30 days)
Ruben
Ruben on 10 Apr 2020
Commented: Les Beckham on 11 Apr 2020
I am attempting to perform a sensitivity analysis on an inequality of two variables, of the form: 4x < y < 40x. I want to use a for loop to make an array of y values for each incremental change in x, and create a plot to visualize the values of y for each x. My biggest issue has been representing the inequality within the for loop, here is the code that I have so far:
%% Sensitivity Analysis
D_rs = 8; %Ratio of D_85(s) and D_15(s), for any value of each
i=0;
for D15_s = 0:0.1:2
4*D15_s < D15_f < (5*D_rs)*D15_s; % <<<issue with representing this inequality>>>
i=i+1;
D15_sg(i)=D15_s; % storing the varied input D15_s in an array
D15_fg(i)=D15_f; % storing the output variable D15_f in an array
end
plot(D15_sg,D15_fg)
xlabel('-')
ylabel('-')
title('-')

  0 Comments

Sign in to comment.

Accepted Answer

Les Beckham
Les Beckham on 11 Apr 2020
Walter has correctly shown how to express mutiple inequality conditions in Matlab (you must include the & (and) operator). However, even replacing that line of code with the correct syntax results in no effect on the rest of your code. The conditional will 'return' a logical value but you are doing nothing with the result.
Are you trying to apply upper and lower limits to D15_f?
If so, perhaps this is what you mean:
D15_f = max(D15_f, 4*D15_s); % apply the lower limit (max returns the larger of the two numbers)
D15_f = min(D15_f, (5*D_rs)*D15_s) % apply the upper limit (min returns the smaller of the two numbers)
If you replace your 'inequality' line by this code, you will be forcing D15_f to stay between these limits.
The rest of your code looks OK as far as I can tell.

  4 Comments

Show 1 older comment
Les Beckham
Les Beckham on 11 Apr 2020
I guess that I assumed that this was defined before your loop.
If you are just trying to find out and visualize what the limits are as a function of D15_s, this should do that:
%% Sensitivity Analysis
% input data
D_rs = 8; %Ratio of D_85(s) and D_15(s), for any value of each
D15_s = 0:0.1:2; % input
% Calculate min and max values
D15_f_min = 4*D15_s;
D15_f_max = (5*D_rs)*D15_s;
% Output data
plot(D15_s, D15_f_min, D15_s, D15_f_max)
xlabel('D15_s', 'Interpreter', 'None')
ylabel('D15_f', 'Interpreter', 'None')
legend('min', 'max', 'Location', 'best')
Ruben
Ruben on 11 Apr 2020
This is more or less what I'm looking for, thank you for the assistance!
Les Beckham
Les Beckham on 11 Apr 2020
You are welcome. Glad I could help.

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 11 Apr 2020
4*D15_s < D15_f & D15_f < (5*D_rs)*D15_s

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by