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.

  • 0
    @Rasmus the standart is what i want, for example here x < 21 → y = 24 and (x+7) < (21+7) → y = (24+8) ...2012-08-10
  • 0
    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 ?)2012-08-10
  • 0
    @RaymondManzoni not, the y will vary between 17 values. and x between n values.2012-08-10
  • 0
    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...2012-08-10

1 Answers 1

1

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$.)

  • 0
    Whoops! Misread it. Editing, thanks!2012-08-10
  • 0
    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?2012-08-10
  • 2
    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.2012-08-10
  • 0
    @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.2012-08-10
  • 0
    @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 pairs, and searching the array for the appropriate value. (4) et cetera2012-08-10
  • 0
    @Hurkyl I agree but a simple function will can improve my solution, this type of question is necessarily mathematical because I wanted first a mathematical solution after implements in my programming language.2012-08-10
  • 0
    @ademar111190: you haven't given enough properties of your function for there to be a "mathematical solution". Besides, "mathematical solutions" aren't always good for computer (or other sorts of) calculation. The indicator function given in this answer **is** an implementation in a language -- worse, it's in a language that was meant for manipulation by mathematicians, not execution by computers.2012-08-11
  • 0
    @Hurkyl Indeed, but the indicator function method is probably the *easiest* and most straightforward way to implement the conditional approach. One could easily define an anonymous function and pass it a logical argument; heck, in C, you could use the ? operator straight-up.2012-08-11