MATLAB Answers

Solve Inequality with inequality constraints

5 views (last 30 days)
Hi there,
i am trying to "solve" an inequality (actually looking for the area of possibel solutions), I have tried this.
syms I I_opt
a=0.1735;
b=0.1967;
c=0.2137;
d=0.2856;
eq_1=I>=0;
eq_2=I_opt>=0;
eq_3=I<=4.67;
eq_4=I_opt<=4.67;
eq_5=a/c*exp(b*I-d*I_opt)*(1-a*exp(b*I))/(1-c*exp(d*I_opt))>1;
eqns=[eq_1 eq_2 eq_3 eq_4 eq_5];
S=solve(eqns,[I I_opt])
Which is actually inequality 5, with 0<=I,I_opt<=4,67;
I get a struct with zero size, although it seems there are solutions for the equations, do you know why?
thanks!!
  3 Comments
Walter Roberson
Walter Roberson on 10 Jul 2020
Two disconnected triangles. They both fit inside I = 0 to 4.67, I_opt = 0 to 4.67 (

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 10 Jul 2020
There is no symbolic solution; the equations are too complicated for that.
syms I I_opt real
Q = @(v) sym(v);
a = Q(0.1735);
b = Q(0.1967);
c = Q(0.2137);
d = Q(0.2856);
eq_1 = I >= Q(0);
eq_2 = I_opt >= Q(0);
eq_3 = I <= Q(4.67);
eq_4 = I_opt <= Q(4.67);
eq_5 = a/c*exp(b*I-d*I_opt)*(1-a*exp(b*I))/(1-c*exp(d*I_opt)) > Q(1);
eqns = [eq_1, eq_2, eq_3, eq_4, eq_5];
S = solve(eqns,[I I_opt], 'returnconditions', true);
disp(S)
[Ig, IoG] = ndgrid(linspace(0,4.7,200));
EQ1 = double(subs(eq_1,{I,I_opt},{Ig, IoG}));
EQ2 = double(subs(eq_2,{I,I_opt},{Ig, IoG}));
EQ3 = double(subs(eq_3,{I,I_opt},{Ig, IoG}));
EQ4 = double(subs(eq_4,{I,I_opt},{Ig, IoG}));
EQ5 = double(subs(eq_5,{I,I_opt},{Ig, IoG}));
mask = EQ1 & EQ2 & EQ3 & EQ4 & EQ5;
surf(Ig, IoG, 0+mask, 'edgecolor','none')
  5 Comments
Walter Roberson
Walter Roberson on 10 Jul 2020
syms I I_opt real
Q = @(v) sym(v);
a = Q(0.1735);
b = Q(0.1967);
c = Q(0.2137);
d = Q(0.2856);
eq_1 = I >= Q(0);
eq_2 = I_opt >= Q(0);
eq_3 = I <= Q(4.67);
eq_4 = I_opt <= Q(4.67);
eq_5_L = a/c*exp(b*I-d*I_opt)*(1-a*exp(b*I))/(1-c*exp(d*I_opt));
eq_5 = eq_5_L > Q(1);
%eqns = [eq_1, eq_2, eq_3, eq_4, eq_5];
%S = solve(eqns,[I I_opt], 'returnconditions', true);
%disp(S)
[Ig, IoG] = ndgrid(linspace(0,4.7,200));
EQ1 = double(subs(eq_1,{I,I_opt},{Ig, IoG}));
EQ2 = double(subs(eq_2,{I,I_opt},{Ig, IoG}));
EQ3 = double(subs(eq_3,{I,I_opt},{Ig, IoG}));
EQ4 = double(subs(eq_4,{I,I_opt},{Ig, IoG}));
EQ5_L = double(subs(eq_5_L,{I,I_opt},{Ig, IoG}));
EQ5 = EQ5_L > 1;
mask = EQ1 & EQ2 & EQ3 & EQ4 & EQ5;
z = nan(size(EQ5_L));
z(mask) = EQ5_L(mask);
surf(Ig, IoG, z, 'edgecolor','none')

Sign in to comment.

More Answers (0)

Categories

Tags

Community Treasure Hunt

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

Start Hunting!