- 注册时间
- 2021-11-19
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 9220
- 在线时间
- 小时
|
本帖最后由 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]])]
复制代码
|
|