mathematica如何把第二部分的分母进一步化简?
FullSimplify[-1+p/(ds*pw-ds*n*pw)]很显然分母上的ds*pw可以提出来,但是软件不能进一步化简(见附件图片),
有什么办法呢?
我是个菜鸟,只会FullSimplify,Simplify,
别的不知道怎么弄
FullSimplify[-1 + p/(ds*pw - ds*n*pw), ComplexityFunction -> StringLength@*ToString]
这个是chyanog的代码 化简这个嵌套根式的一个方法:15/Sqrt]/. 1/Sqrt:>1/FunctionExpand]/. 1/(a_+b_):>(a-b)/(a^2-b^2)
https://bbs.emath.ac.cn/forum.php?mod=redirect&goto=findpost&ptid=15285&pid=74241&fromuid=865 根据chyanog的代码的启示,
我得到如下代码:
Clear["Global`*"];(*Clear all variables*)
-1 + p/(ds*pw - ds*n*pw) /. (a_/b_) :> (a/FullSimplify)
得到结果
-1-p/(ds (-1+n) pw)
这下子终于把分子因式分解了,但是又来了一个结果:
此处n通常是小于1的,如何把
-1-p/(ds (-1+n) pw)
化简成
-1+p/(ds (1-n) pw)
呢?
所以有时候我觉得不能完全依靠机器,感觉有时候机器太笨了,没思想,
不懂得如何思考 mathematica 发表于 2018-12-29 10:35
根据chyanog的代码的启示,
我得到如下代码:
为什么这样会行呢?
我也不懂,我只是抄袭chyanog的代码然后自己乱尝试的 mathematica 发表于 2018-12-29 10:35
根据chyanog的代码的启示,
我得到如下代码:
@chyanog FullSimplify[-1 + p/(ds*pw - ds*n*pw),
ComplexityFunction -> (LeafCount[#] + 10 Count[#, _?Negative, -1] &)]
这个代码似乎不行呀 我的练习:
t = -(ds*pw - ds*n*pw);
in= -1 - p/FullSimplify
out= -1 - p/(ds (-1 + n) pw)
in【3】= Simplify
out= -1 + p/(ds pw - ds n pw)
两种表达式简化程度相当,没有优劣
我的练习做了2部分
第1部分只进行分母的化简,得到楼主希望的表达式 -1 - p/(ds (-1 + n) pw)
第2部分对楼主希望的表达式进行化简,得到原始表达式 -1 + p/(ds pw - ds n pw)
in=FullSimplify[-1 - p/(ds (-1 + n) pw)]
out= -1 + p/(ds pw - ds n pw)
可见,在FullSimplify看来
-1 - p/(ds (-1 + n) pw)不是最简的表达式
-1 + p/(ds pw - ds n pw)是对应的最简的表达式
本帖最后由 zeroieme 于 2019-1-11 16:51 编辑
dlpg070 发表于 2019-1-11 15:22
我的练习做了2部分
第1部分只进行分母的化简,得到楼主希望的表达式 -1 - p/(ds (-1 + n) pw)
第2部分对 ...
对于“最简”依不同场合有不同标准。
如纯数学上的对称简洁;保存或打印时最短;精确数值计算时运算量最少;近似数值计算时减少误差扩大……。您是老前辈,一定有所体会。
这里计算-1 + p/(ds pw - ds n pw)需要2次加法3次乘法1次除法,计算-1 - p/(ds (-1 + n) pw)需要2次加法2次乘法1次除法。因此也可以说简单了一点点。
至于软件怎么“看待”“最简”?FullSimplify函数有高级用法就是如4#评点,用ComplexityFunction指定自己需要的评定标准。
页:
[1]