找回密码
 欢迎注册
查看: 6439|回复: 7

[求助] MMA 中,如何指定某些假设(条件)成立?

[复制链接]
发表于 2022-12-27 20:14:23 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 uk702 于 2022-12-27 20:22 编辑

如下的一道几何题:
Rt△ABC 中,∠ABC=90°,直线 l 交 BC、CA 及 BA 的延长线于 D、E、F,若 DE=DC=AB,求证:AF+EF=BD。

以下的 MMA 代码是对问题的简单 “直译”:

  1. ClearAll["Global`*"];
  2. b={0,0}; a={0,u}; d={v,0}; c={u+v, 0}; (* 令 AB=u, BD=v,则 BC=u+v *)

  3. (* E 在 AC 上且 DE=DC=u *)
  4. e = {x, y} /. Simplify@First@Solve[{{x,y} \[Element] InfiniteLine[{a, c}] && EuclideanDistance[{x,y}, d] == u && 0 < x < v}, {x, y}];

  5. (* 求直线{e, d} 和 直线{b, a} 的交点 *)
  6. f = {x, y} /. Simplify@First@Solve[Cross[#1 - {x, y}] . (#2 - {x, y}) == 0 & @@@ {{e, d}, {b, a}}, {x, y}];

  7. lenAfAndFe = (EuclideanDistance[a, f] + EuclideanDistance[f, e]) // Simplify;
  8. Print["AF+FE = ", lenAfAndFe, " , BD = v,两者当相等"]
复制代码


结果显示:
AF+FE = v if u>0&&v>0 , BD = v,两者当相等

故命题得证。

其中,求解 E  有坐标时,MMA 返回
\( \left\{\fbox{$\frac{v^2 (u+v)}{2 u^2+2 v u+v^2}\text{ if }u>0\land v>0$},\fbox{$\frac{2 u^2 (u+v)}{2 u^2+2 v u+v^2}\text{ if }u>0\land v>0$}\right\} \)

求助各位专家,不知是否有办法让 MMA 知道 u>0 和 v>0 这两个假设已经作为预置条件总是成立的?

2022-12-27_202134.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2022-12-27 20:26:00 | 显示全部楼层
本帖最后由 uk702 于 2022-12-27 20:44 编辑

经实验将代码改为如下可行,求大佬们提供更好的写法(多处都要加 Assuming[{u > 0, v > 0}, xxx] 挺烦人的):

  1. ClearAll["Global`*"];
  2. b={0,0}; a={0,u}; d={v,0}; c={u+v, 0}; (* 令 AB=u, BD=v,则 BC=u+v *)

  3. (* E 在 AC 上且 DE=DC=u *)
  4. e = {x, y} /. Simplify@First@Assuming[{u > 0, v > 0}, Solve[{{x,y} \[Element] InfiniteLine[{a, c}] && EuclideanDistance[{x,y}, d] == u && 0 < x < v}, {x, y}]];

  5. Print["e = ", e];

  6. (* 求直线{e, d} 和 直线{b, a} 的交点 *)
  7. f = {x, y} /. Simplify@First@Solve[Cross[#1 - {x, y}] . (#2 - {x, y}) == 0 & @@@ {{e, d}, {b, a}}, {x, y}];
  8. Print["f = ", f];

  9. lenAfAndFe = Assuming[{u > 0, v > 0}, FullSimplify[(EuclideanDistance[a, f] + EuclideanDistance[f, e])]];
  10. Print["AF+FE = ", lenAfAndFe, " , BD = v,两者当相等"]

复制代码


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2022-12-27 22:43:44 | 显示全部楼层
经实验,可以将 Assuming[{u > 0, v > 0} 放到最外层,让整个代码都包裹进这个假设里,这样就可以避免多处重复写这段代码:

  1. ```
  2. ClearAll["Global`*"];
  3. Assuming[{u > 0, v > 0},
  4.         b={0,0}; a={0,u}; d={v,0}; c={u+v, 0}; (* 令 AB=u, BD=v,则 BC=u+v *)

  5.         (* E 在 AC 上且 DE=DC=u *)
  6.         e = {x, y} /. Simplify@First@ Solve[{{x,y} \[Element] InfiniteLine[{a, c}] && EuclideanDistance[{x,y}, d] == u && 0 < x < v}, {x, y}];

  7.         Print["e = ", e];

  8.         (* 求直线{e, d} 和 直线{b, a} 的交点 *)
  9.         f = {x, y} /. Simplify@First@Solve[Cross[#1 - {x, y}] . (#2 - {x, y}) == 0 & @@@ {{e, d}, {b, a}}, {x, y}];
  10.         Print["f = ", f];

  11.         lenAfAndFe = FullSimplify[(EuclideanDistance[a, f] + EuclideanDistance[f, e])];
  12.         Print["AF+FE = ", lenAfAndFe, " , BD = v,两者当相等"]
  13. ]       
  14. ```
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2022-12-28 10:55:03 | 显示全部楼层
我只会做具体的题目,可以这样(恒等式)。

\(AB=\sin(\theta),BD=\cos(\theta)-\sin(\theta),AE=1-\sin(2\theta)\)

\(\frac{AF+EF}{BD}=\frac{(1-\sin(2\theta))(\cos(\theta)+\sin(\theta))/cos(2\theta)}{\cos(\theta)-\sin(\theta)}=1\)

点评

漂亮!  发表于 2022-12-28 11:00
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2022-12-29 16:45:57 | 显示全部楼层
$Assumptions=u>0;

点评

果真好使!非常感谢!  发表于 2022-12-29 20:20

评分

参与人数 2威望 +2 金币 +22 贡献 +2 经验 +2 鲜花 +2 收起 理由
gxqcn + 20 首帖奖励,欢迎常来。
uk702 + 2 + 2 + 2 + 2 + 2 赞一个!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2023-1-2 00:35:32 | 显示全部楼层
CD=AB → Rt△ABD≌Rt△CDG
所以BC=BD-CD=BH-AB=AH=AF+FH=AF+EF
捕获.PNG

评分

参与人数 1威望 +2 金币 +2 贡献 +2 经验 +2 鲜花 +2 收起 理由
uk702 + 2 + 2 + 2 + 2 + 2 很给力!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-22 05:52 , Processed in 0.026014 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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