之前想通过矩阵求拟解决坐标转换(想着和截取晶体平面思路差不多),事实很快就意识到错了。遂考虑确定三个不在同一直线的特殊点确定空间,然后其他点根据到这三点的距离固定这一思路,求出其他原子坐标的准确位置,就是求解三元二次方程。非线性方程牛顿迭代是主要方法,一元多次较好解决,很顺利(得益于大学数学前两本书翻得比较透彻,多年之后印象依然深刻),主要考虑多元多次。翻了翻徐士良的书籍,又找了一本《Visual Fortran常用数值算法集》,有所顿悟,还不透彻,遂翻了翻《数值分析》原理清晰。主要解决问题归于线性方程组求解,高斯方法简单易懂,列消元方法比较保险。代码主要“分为函数值求解,雅各比矩阵求解,线性方程组牛顿求解和主程序三部分,线性方程组求解采用高斯列消元方法。如果有需要,函数和雅各比矩阵需要按需改写,主程序部分本用于坐标转换,也需改写。”为了避免出现不收敛,请将分子尽量先移动到大致位置,估算出大致坐标,给出初值效果较好,初值最好不要含有0元素。
下载代码请前往:https://download.csdn.net/download/xk6891/10675075
18.9