1

数値であるペアのリストを受け取り、ペアの最初の要素のリストを2番目の要素の逆累乗で出力する関数をMathematicaで作成しようとしています。たとえば、{{1,3}、{2、 2} ....}-> {1 ^(1/3)、2 ^(1/2)、...}。

これは私がこれまでに得たものです:

pairsToRoots3[list : {{_, _} ..}] := 
list /. {p_Real, q_Real} :> p^(1/q)

p_Realでは機能しないようですが、p_Integerを入力すると正常に機能します。理由はわかりません。理想的には、条件を次のように表現したい

 pairsToRoots3[list : {{_Real, _Real} ..}]      

またはこのような何かが、私が試したすべてがうまくいかなかったようでした。

4

3 に答える 3

1

これは、番号に頭がある場合に機能しますReal

pairsToRoots[list : {{_Real, _Real} ..}] :=  #^(1/#2) & @@@ list

pairsToRoots[{{1`, 3`}, {2`, 2`}}]
{1., 1.41421}

しかし、これらの数字には頭がありませんReal

Head /@ {1, 2, Pi 7/8}
{Integer, Integer, Integer, Symbol, Rational}

NumericQしたがって、おそらくジョージが使用するようにしたいと思うでしょう:

pairsToRoots[list : {{_?NumericQ, _?NumericQ} ..}] :=  #^(1/#2) & @@@ list

pairsToRoots[{{1, 3}, {2, 2}}]
{1, Sqrt[2]}
于 2013-02-12T18:25:09.053 に答える
1
f[{x_,y_}/;NumericQ[x]&&NumericQ[y]&&x>0&&y!=0]:=x^(1/y)
h[list_List]:=f/@list

h[{{1,2},{3,4}}]->{1,3^1/4}

個人的には「h」をわざわざ定義するのではなく、必要に応じてfを適用するだけです。

于 2013-02-12T12:55:56.313 に答える
0

何かのようなもの :

p2R[listOfPairs_] := #[[1]]^(1/#[[2]]) & /@ listOfPairs

p2R[{{a1, a2}, {b1, b2}, {c1, c2}}]
(* {a1^(1/a2), b1^(1/b2), (c1^((1/c2)))} *)

または:

MapThread[#1^(1/#2) &, Transpose[{{a1, a2}, {b1, b2}, {c1, c2}}]] 
(* {a1^(1/a2), b1^(1/b2), c1^(1/c2)} *)
于 2013-02-11T16:18:38.890 に答える