2016-08-30 6 views
2

私はJavaでいくつかの関数を持っています。Javaで逆関数を計算する

Function<BigDecimal, BigDecimal> f = x -> {/*..*/} 

入力値を出力で見つけることはできますか?つまり、何らかの形で逆関数を計算できますか?

ありがとうございました。

+0

もちろん自動的ではありません。 – Kayaman

+3

一般的に、逆関数は* many values *を返すことができます。 'x - > x * x'の場合、 '9'の逆の値は' 3'と '-3'です。 'x - > sin(x)'の逆値は 'PI * k'(kは任意の整数*)です。逆の値が –

+0

を探しているはずのドメイン( '[0..Inf]')を指定しなければなりません(2番目の場合は '[-PI/2..PI/2]')。それが一方通行の機能ならば、あなたはできません。あなたの質問は機能に特有ですが、あなたは特定の機能を提供していません。 – Plirkee

答えて

2

Javaで自動的に「逆を見つける」方法はありません。しかし、逆関数を自分で実装することはもちろん自由です。実際の多くの関数では、逆関数は適切なアルゴリズムで文書化されているか、簡単に計算されています。

4

逆関数は、基底関数がinjective functionの場合にのみ計算できます。数学

、単射又は注射または一対一の関数が鮮明を保存することが機能である:それは、その終域の同じ要素にそのドメインの別個の要素をマッピングすることはありません。

一般に、Java関数は注入型ではありません。

Ciao -> CIAO 
ciao -> CIAO 
cIaO -> CIAO 

機能はさらに時間に依存又はrandomically生成される内部情報を使用することができるので、例えばtoUpperCaseため単射されません。これらの状況では、逆関数を作成することはできません。 単射について

しかしながら、逆関数を作成することが可能であるが、それは自動プロセスありません。

+0

"自動プロセスではありません"を提案しました。それを自動的に行うのは不可能だろうか?どうして? Thanks – pabvid

+0

@pabvidは、1対1の機能の背後にあるルールを知る必要があるため、自動プロセスではありません。逆論理を別の関数に適用しない限り、元の値を見つけるために使用できる自動化されたメカニック・プロセスはありません。逆論理は、手動で書き込む場合にのみ適用できます。 –

0
public class myReverse { 
    public static void main(String[] args) { 
     int num=54321,reverse=0; //This 54321 is any input.you can Scan new number if you want. 
     while(num !=0){ 
      int a=num%10; 
      reverse=reverse*10 + a; 
      num=num/10; 
     } 
     System.out.println(reverse); 
    } 
} 
+0

コードを追加しないでください。説明を追加してください – Jens