| 
注册时间2021-11-19最后登录1970-1-1威望 星金币 枚贡献 分经验 点鲜花 朵魅力 点上传 次下载 次积分9921在线时间 小时 
 | 
 
 发表于 2025-3-28 12:21:38
|
显示全部楼层 
| 本帖最后由 nyy 于 2025-3-28 12:40 编辑 
 
 代码优化,结果优化
 
 
 复制代码Clear["Global`*"];(*mathematica11.2,win7(64bit)Clear all variables*)
(*子函数,利用三边计算角的余弦值,角是c边所对的角*)
cs[a_,b_,c_]:=((a^2+b^2-c^2)/(2*a*b))
(*线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了*)
AB=BA=b
BC=CB=3*a
CD=DC=2*a
AD=DA=c
AC=CA=d
BD=DB=10
(*列方程组解决问题*)
ans=Solve[{
    Numerator@Together[cs[CD,CA,AD]-cs[CA,CB,AB]]==0,(*AC平分∠BCD,因此这两个角的余弦值相等*)
    Numerator@Together[cs[CD,CB,BD]-(2*cs[CD,CA,AD]^2-1)]==0,(*∠BCD为∠ACD的2倍,利用了余弦的二倍角公式*)
    Numerator@Together[cs[CA,CB,AB]-(2*(AB/AD)^2-1)]==0,(*∠ACB为∠BAD的2倍,利用了余弦的二倍角公式*)
    AB^2+BD^2==AD^2,(*三角形ADB勾股定理*)
    a>=0&&b>=0&&c>=0&&d>=0(*限制变量范围*)
},{a,b,c,d}]//Simplify
Grid[ans,Alignment->Left](*列表显示*)
aaa=Thread[{"AB","AC","AD","BC","BD","CD"}->({AB,AC,AD,BC,BD,CD}/.ans[[1]])]
 求解结果
 \[\left\{\left\{a\to 10 \sqrt{\frac{2}{23}},b\to 10 \sqrt{7},c\to 20 \sqrt{2},d\to 110 \sqrt{\frac{2}{23}}\right\}\right\}\]
 
 \[\left\{\text{AB}\to 10 \sqrt{7},\text{AC}\to 110 \sqrt{\frac{2}{23}},\text{AD}\to 20 \sqrt{2},\text{BC}\to 30 \sqrt{\frac{2}{23}},\text{BD}\to 10,\text{CD}\to 20 \sqrt{\frac{2}{23}}\right\}\]
 
 vim的编辑器的命令
 
 复制代码(*把AB=3,修改成AB=BA=3*)
.,$s/\(\([A-Z]\)\([A-Z]\)=\)/\1\3\2=/gec
 代码再修改修改
 
 复制代码Clear["Global`*"];(*mathematica11.2,win7(64bit)Clear all variables*)
(*子函数,利用三边计算角的余弦值,角是c边所对的角*)
cs[a_,b_,c_]:=((a^2+b^2-c^2)/(2*a*b))
(*线段长度赋值,AB与BA都赋值,这样两个变量都能用了,这样再不用考虑线段的两个端点哪个在前、哪个在后了*)
AB=BA=b
BC=CB=3*a
CD=DC=2*a
AD=DA=c
AC=CA=d
BD=DB=10
(*列方程组解决问题*)
ans=Solve[{
    (*AC平分∠BCD,因此这两个角的余弦值相等,∠ACB为∠BAD的2倍,利用了余弦的二倍角公式*)
    cs[CD,CA,AD]==cs[CA,CB,AB]==(2*(AB/AD)^2-1),
    cs[CD,CB,BD]==(2*cs[CD,CA,AD]^2-1),(*∠BCD为∠ACD的2倍,利用了余弦的二倍角公式*)
    AB^2+BD^2==AD^2,(*三角形ABD勾股定理*)
    a>=0&&b>=0&&c>=0&&d>=0(*限制变量范围*)
},{a,b,c,d}]//Simplify
Grid[ans,Alignment->Left](*列表显示*)
aaa=Thread[{"AB","AC","AD","BC","BD","CD"}->({AB,AC,AD,BC,BD,CD}/.ans[[1]])]
 | 
 |