找回密码
 欢迎注册
查看: 25654|回复: 11

[讨论] mathematica如何把第二部分的分母进一步化简?

[复制链接]
发表于 2018-12-24 12:21:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
  1. FullSimplify[-1+p/(ds*pw-ds*n*pw)]
复制代码

很显然分母上的ds*pw可以提出来,但是软件不能进一步化简(见附件图片),
有什么办法呢?

我是个菜鸟,只会FullSimplify,Simplify,
别的不知道怎么弄

QQ截图20181224121746.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-12-26 14:00:49 | 显示全部楼层
  1. FullSimplify[-1 + p/(ds*pw - ds*n*pw), ComplexityFunction -> StringLength@*ToString]
复制代码

这个是chyanog的代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-12-29 10:16:17 | 显示全部楼层
化简这个嵌套根式的一个方法:15/Sqrt[59+24 Sqrt[6]]/. 1/Sqrt[x_]:>1/FunctionExpand[Sqrt[x]]/. 1/(a_+b_):>(a-b)/(a^2-b^2)
https://bbs.emath.ac.cn/forum.ph ... 241&fromuid=865
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-12-29 10:35:27 | 显示全部楼层
根据chyanog的代码的启示,
我得到如下代码:
  1. Clear["Global`*"];(*Clear all variables*)
  2. -1 + p/(ds*pw - ds*n*pw) /. (a_/b_) :> (a/FullSimplify[b])
复制代码

得到结果
-1-p/(ds (-1+n) pw)
这下子终于把分子因式分解了,但是又来了一个结果:
此处n通常是小于1的,如何把
-1-p/(ds (-1+n) pw)
化简成
-1+p/(ds (1-n) pw)
呢?
所以有时候我觉得不能完全依靠机器,感觉有时候机器太笨了,没思想,
不懂得如何思考

点评

FullSimplify[(ds*pw - ds*n*pw), ComplexityFunction -> (LeafCount[#] + 10 Count[#, _?Negative, -1] &)]  发表于 2019-1-3 12:06
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-12-29 10:41:25 | 显示全部楼层
mathematica 发表于 2018-12-29 10:35
根据chyanog的代码的启示,
我得到如下代码:

为什么这样会行呢?
我也不懂,我只是抄袭chyanog的代码然后自己乱尝试的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2019-1-3 13:42:40 | 显示全部楼层
mathematica 发表于 2018-12-29 10:35
根据chyanog的代码的启示,
我得到如下代码:

@chyanog FullSimplify[-1 + p/(ds*pw - ds*n*pw),
ComplexityFunction -> (LeafCount[#] + 10 Count[#, _?Negative, -1] &)]
这个代码似乎不行呀

点评

楼上不是已经有了吗 FullSimplify[-1 + p/(ds*pw - ds*n*pw), ComplexityFunction -> StringLength@*ToString]  发表于 2019-1-3 14:22
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-11 11:22:54 | 显示全部楼层
我的练习:
t = -(ds*pw - ds*n*pw);
in[2]= -1 - p/FullSimplify[t]
out[2]= -1 - p/(ds (-1 + n) pw)

in【3】= Simplify[p/(ds*pw - ds*pw*n) - 1]
out[3]= -1 + p/(ds pw - ds n pw)
两种表达式简化程度相当,没有优劣

点评

要是你的办法行,我还不如直接自己人肉化简算了  发表于 2019-1-11 12:55
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-11 15:22:31 | 显示全部楼层
我的练习做了2部分
第1部分只进行分母的化简,得到楼主希望的表达式 -1 - p/(ds (-1 + n) pw)
第2部分对楼主希望的表达式进行化简,得到原始表达式 -1 + p/(ds pw - ds n pw)

in[3]=FullSimplify[-1 - p/(ds (-1 + n) pw)]
out[3]= -1 + p/(ds pw - ds n pw)

可见,在FullSimplify看来
-1 - p/(ds (-1 + n) pw)不是最简的表达式
-1 + p/(ds pw - ds n pw)是对应的最简的表达式
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-1-11 16:43:48 | 显示全部楼层
本帖最后由 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指定自己需要的评定标准。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 21:27 , Processed in 0.028635 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表