1

我正在尝试在 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

如果您的号码有 head ,则此方法有效Real

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

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

但是这些数字没有 head 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 回答