2016-09-19 8 views
0

私はxの知っている1つの値を持っています。私も1つの数式を持っています。 Y = 0.92xは、今私は、乗算や除算のためX = Y/0.92そのでしょうRHS期待される出力にLHSを反転します。すべての基本的な数学演算を処理する必要があります。 Rで、このための任意のパッケージまたはいずれかは、私はあなたが望むものを達成するためにどのような方法があるとは思わないRRの反転式

答えて

0

で関数を定義してあります。 R関数として表現されている間に数式を書き直すことは簡単ではありません。できることは機能を解決するためにunirootを使用することです。たとえば:

# function for reversing a function. y is your y value 
# only possible x values in interval will be considered. 
inverseFun = function(y, fun, interval = c(-1e2, 1e2), ...) { 
    f = function(.y, .fun, ...) y - fun(...) 
    uniroot(f, interval, .y = y, .fun = fun, ...) 
} 
# standard math functions 
add = function(a, b) a + b 
substract = function(a, b) a - b 
multiply = function(a, b) a * b 
divide = function(a, b) a/b 

# test it works 
inverseFun(y = 3, add, b = 1) 
# 2 
inverseFun(y = -10, substract, b = 1) 
# -9 
inverseFun(y = 30, multiply, b = 2) 
# 15 
inverseFun(y = 30, divide, b = 1.75) 
# 52.5 

は、上記は一例であり、何が起こっているかあまり明確であるかもしれませんが、inverseFun(y = 3, `+`, b = 1)も動作します。最後の発言は、unirootは複雑な機能に時間のかかる機能を最小限にしようとしているということです。