- 注册时间
- 2021-11-19
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 8645
- 在线时间
- 小时
|
发表于 2024-3-12 13:51:52
|
显示全部楼层
进一步优化代码!
- Clear["Global`*"];(*Clear all variables*)
- (*子函数,四面体体积公式,a,b,c分别是从一个顶点出发的三条棱,x,y,z分别是对棱*)
- fun[a_,b_,c_,x_,y_,z_]:=Sqrt[Det[{{0,1,1,1,1},{1,0,a^2,b^2,c^2},{1,a^2,0,z^2,y^2},{1,b^2,z^2,0,x^2},{1,c^2,y^2,x^2,0}}]/288]
- (*子函数,给定一个四面体六条棱的数组,让四面体体积等于零,计算出x的值,并且只计算正实数根,返回求解结果*)
- sol[list_]:=Module[{},Flatten@FullSimplify@Solve[fun@@list==0&&x>=1,{x},Reals]]
- (*假设四面体的最小的棱的长度=1,由于相似,总可以做到*)
- aaa=Tuples[{1,x},6];(*形成所有的可能*)
- bbb=Select[aaa,sol[#]=!={}&];(*选择当中有意义的*)
- ccc={#,sol[#],Total[#/.sol[#]]}&/@bbb;(*对有意义的,每一个求解出结果,并且算出六条棱的长度和*)
- (*根据第二个元素从小到大排列,如果第二个相同,则排列第三列(第三列六条棱的长度和)*)
- ddd=Sort[ccc,Or[((x/.#1[[2]])<(x/.#2[[2]])),And[((x/.#1[[2]])==(x/.#2[[2]])),#1[[3]]<#2[[3]]]]&];
- eee=Grid[ddd,Alignment->Right](*列表显示*)
- N[eee](*数值化*)
复制代码
求解结果
|
|