0
$\begingroup$

I have a standard and I need create a function to resolve this, for example:

if my $X < 21$ my $Y$ will be $24$ else if my $x < 28$ my $y$ will be $32$ ...

How do I calculate a function for this?

Thanks all.

$\endgroup$
4
  • $\begingroup$ @Rasmus the standart is what i want, for example here x < 21 → y = 24 and (x+7) < (21+7) → y = (24+8) ... $\endgroup$ Aug 10, 2012 at 14:35
  • $\begingroup$ You ask [if (x<21) y=24; else if (x<28) y=32;] but can y really only have these 2 values ? (and what if x>=28 ?) $\endgroup$ Aug 10, 2012 at 14:35
  • $\begingroup$ @RaymondManzoni not, the y will vary between 17 values. and x between n values. $\endgroup$ Aug 10, 2012 at 14:37
  • $\begingroup$ you could create an array of sorted (maximal x, corresponding y) (or two arrays) and parse it in a function with sequential or binary search (rather a question for stack overflow...). But the ifs could be faster... $\endgroup$ Aug 10, 2012 at 14:44

1 Answer 1

1
$\begingroup$

You can simply define the function in piecewise terms over its domain:

$$y=f(x) = \left\{\begin{array}{cc} 24, & \mathrm{if}\ x < 21, \\ 32, & \mathrm{if}\ 21 \le x < 28. \\ \end{array}\right.$$

As to whether there is a pattern herein, there is not enough information to decide.

Another way is to use indicator functions, which are defined as $$\mathbf{1}[\chi] = \left\{\begin{array}{cc} 1, & \mathrm{if}\ \chi\ \mathrm{is\ true}, \\ 0, & \mathrm{if}\ \chi\ \mathrm{is\ false}.\end{array}\right.$$

Them you can write $$y=f(x) = 24\cdot\mathbf{1}[x < 21] + 32\cdot\mathbf{1}[21 \le x < 28] + \cdots$$

In programming, sometimes indicator functions are called "boolean variables" (where you might have to map $\mathrm{true} \mapsto 1$, $\mathrm{false} \mapsto 0$.)

$\endgroup$
8
  • $\begingroup$ Whoops! Misread it. Editing, thanks! $\endgroup$
    – Emily
    Aug 10, 2012 at 14:33
  • $\begingroup$ thanks, but I have 17 ifs in my real problem, and i'm implementing this in java, to do so is bad because wiil be 17 ifs in code, very bad, don't have a other way? $\endgroup$ Aug 10, 2012 at 14:33
  • 2
    $\begingroup$ That is a programming question. There are likely many other ways to implement this using mathematical functions; however, you have given only a small subset of your problem. Furthermore, is the code really more readable if you implement a complicated mathematical function than using obvious heuristics? At any rate, I will edit my answer to specify another approach. $\endgroup$
    – Emily
    Aug 10, 2012 at 14:36
  • $\begingroup$ @EdGorcenski thanks for light I will in this way. really with the function had become less clear but will be faster and with a appropriate comment had been easy to understand. $\endgroup$ Aug 10, 2012 at 14:42
  • $\begingroup$ @ademar: this should be asked on one of the programming sites. Anyways... (1) unless you have good reason to think that it's important for this function to be faster, you should stick to whatever is more clear. (2) you can do clever things with chained if's: you can write them in the order they're most likely to be satisfied, or nest them as a binary search, or other sorts of things. (3) You can encode the relevant data in other fashions, such as having an array of <upper bound, value> pairs, and searching the array for the appropriate value. (4) et cetera $\endgroup$
    – user14972
    Aug 10, 2012 at 15:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .