Wolfram mathematica 如何强迫Mathematica用我指定的分母表示有理数?

Wolfram mathematica 如何强迫Mathematica用我指定的分母表示有理数?,wolfram-mathematica,Wolfram Mathematica,我想写一个函数来强制Mathematica以我指定的分母显示一个有理数。例如,具有指定分母6的有理2/3应该变成4/6 我尝试使用HoldForm[]或Unevaluated[],但没有成功 In[1]:= setDenominator[x_, d_] := Unevaluated[Rational[x*d, d]]; In[2]:= setDenominator[2/3, 6] 2 Out[2]= - 3 您可以在以下情况下使用: sakra示例的替代方法

我想写一个函数来强制Mathematica以我指定的分母显示一个有理数。例如,具有指定分母6的有理2/3应该变成4/6

我尝试使用
HoldForm[]
Unevaluated[]
,但没有成功

In[1]:= setDenominator[x_, d_] := Unevaluated[Rational[x*d, d]];

In[2]:= setDenominator[2/3, 6]

        2
Out[2]= -
        3
您可以在以下情况下使用:


sakra
示例的替代方法是将值存储在字符串中:

setDenominator[x_, d_] := ToString[x d] <> "/" <> ToString[d];
setDenominator[x_ux,d_x]:=ToString[x d]“/”ToString[d];

HoldForm
可以工作,但是你必须偷偷地获取
x*d
的数值

setDenominator[x_, d_] := HoldForm@Rational[foo, d] /. foo -> x*d

这可以通过增加一些对
d

的适用性的检查来改进。这里是sakra思想的一个变体,它允许加法和乘法

Format[setDenominator[x_, d_]] := DisplayForm@FractionBox[x*d, d]
setDenominator /: Plus[left___, setDenominator[x1_, d1_], right___] := left + x1 + right;
setDenominator /: Times[left___, setDenominator[x1_, d1_], right___] :=left*x1*right;
试一试:

a = setDenominator[3/5, 10];
Print[a, " + ", 2/3, " = " , a + 2/3]
Print[a, " + ", 2/3, " = " , setDenominator[a + 2/3, 30]]
Print[a, " × ", 2/3, " = " , a * 2/3]
Print[a, " × ", 2/3, " = " , setDenominator[a * 2/3, 30]]
Print[a, " ÷ ", 2/3, " = " , a /( 2/3)]

+1即使分母选择不当,你的建议也适用于分数:例如,
setDenominator[1/3,5]
。我对你的解决方案做了一个修改,允许你对分数进行加法和乘法。@Liang我添加了一些代码,让你可以对未减数的分数进行加法和乘法。setDenominator基于sakra的例程。提升价值的技巧是我从莱昂尼德那里学到的。[@Qiang Li谢谢,我很高兴你喜欢它。@Qiang Li我在最新版本中使加法和乘法功能更加明显。@Mr.Wizard这令人费解,但我认为你对“x”的看法是正确的乘法符号。我刚刚将上面的代码复制到一个空白的Mma 8.0笔记本中。它运行起来没有问题!不管怎样,我只是添加了[Times]符号来替换“x”。如果有帮助,请告诉我。@Oops先生。我没有看到您更改了“x”乘法符号。(我上次发表评论时,我的浏览器没有刷新。)您是如何更改“x”乘法符号的?我通过基本数学助手调色板插入了它。
a = setDenominator[3/5, 10];
Print[a, " + ", 2/3, " = " , a + 2/3]
Print[a, " + ", 2/3, " = " , setDenominator[a + 2/3, 30]]
Print[a, " × ", 2/3, " = " , a * 2/3]
Print[a, " × ", 2/3, " = " , setDenominator[a * 2/3, 30]]
Print[a, " ÷ ", 2/3, " = " , a /( 2/3)]