0
$\begingroup$

I have a function f defined by points:

finput = {{0, 1/5}, {1/5, 1/5}, {1/2, 1}, {1, 0}};
ListLinePlot[finput, PlotRange -> {{0, 1}, {0, 1}}]

enter image description here

Then I create a piecewise linear function from it

pcw[pts_, otherwise_: - 1] :=
  Module[{ptsPairs, line, x},
    line[p_] :=
      Module[{p1 = p[1], p2 = p[[2]], m, b}, 
        m = (p2[[2]] - p1[[2]])/(p2[1] - p1[1]); 
        b = p1[[2]] - p1[1] m; 
        {mx + b, p1[1] <= x <= p2[1]}]; 
    ptsPairs = Partition[pts, 2, 1]; 
    ptsPairs = Select[ptsPairs, #[1][1] != #[[2]][1]&]; 
    Piecewise[line /@ ptsPairs /. x -> #, otherwise]&]

f = pcw[finput];

Now I would like to find patterns of the function, but the problem is to find patterns of the part, where the function is constant.

Normally I use Solve to get the set of points. But it doesn't work for this case so I am trying to use Reduce

Reduce[f[x] == 1/5, x]

But I get as result this inequality:

0 <= x <= 1/5 || x == 9/10

My question is, is there any possibility to get set of points containing these points from inequalities? It means to get as result:

{0,1/5,9/10}

$\endgroup$
  • $\begingroup$ I’m not sure the answer you want is the actually the right answer. The Reduce[ ] function has it right, returning an interval for the one portion. Not seeing how {0, 1/5, 9/10} corresponds to the interval portion. $\endgroup$ – MikeY Dec 29 '18 at 15:41
1
$\begingroup$

I think an interpolation function of order 1 might be what you are looking for.

pts = {{0, 1/5}, {1/5, 1/5}, {1/2, 1}, {1, 0}};
f = Interpolation[pts, InterpolationOrder -> 1];
Plot[f[x], {x, 0, 1}]

plot

Then

f /@ Range[0, 1, 1/10]

{1/5, 1/5, 1/5, 7/15, 11/15, 1, 4/5, 3/5, 2/5, 1/5, 0}

|improve this answer|||||
$\endgroup$
1
$\begingroup$

Try

Cases[  0 <= x <= 1/5 || x == 9/10   , z_?NumericQ -> z, Infinity]
(*{0, 1/5, 9/10}*)

to get the numbers in your condition.

|improve this answer|||||
$\endgroup$
  • $\begingroup$ Thank you, I have one more question, if I am looking for patterns for example of the set {11/15,1}, then using Reduce I get: x==2/5||x==19/30,x==1/2 and using Cases I get: {2/5,19/30,1/2} but I would like to get a set containing results for 11/15 and 1 in brackets like this {{2/5,19/30},{1/2}}. Do you thing its possible? $\endgroup$ – Nikol Š Dec 29 '18 at 12:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.