首页/文章/ 详情

高精度数值运算解病态方程组

7月前浏览4139

本文摘要(由AI生成):

本文介绍了针对病态方程组数值不稳定性的问题,可采用高精度数值运算解决。Fortran内置的SELECTED_REAL_KIND函数能够根据需要选择实型数据的精度和范围,保持程序通用性。函数调用方式灵活,参数可选。文章通过算例展示了采用不同精度计算的结果,并指出更复杂的方程组同样可用该函数选择所需精度。往期相关介绍了病态方程组的来源和背景。


针对病态方程组对任何算法都将产生数值不稳定性,可采用高精度数值运算解决这个问题。

Fortran内置函数SELECTED_REAL_KIND(p, r),默认两个参数p是精度,r是范围。p是所需精度的十进制数值,r是以10^r次方表示的所需数值的范围。当执行该函数的时候,会返回达到或者超过指定精度或者范围的的实型数据的最小类别参数。使用该函数可以保持程序通用性,而不受平台限制。

kind_num = SELECTED_REAL_KIND(13,100)

kind_num = SELECTED_REAL_KIND(13)

kind_num = SELECTED_REAL_KIND(r=100,p=13)

kind_num = SELECTED_REAL_KIND(r=100)

以上都是函数的调用方法皆正确,因为函数参数是可选的。


注意程序中第二个变量所需的精度为13位小数和10^200次方的范围,但是处理器实际分配的精度为15位小数和10^308次方的范围.


●算例

采用的精度计算,结果为:

采用双精度计算,结果为:

更复杂的方程组可以用函数SELECTED_REAL_KIND选择所需精度。


★★★  往期相关  ★★★

病态方程组

来源:数值分析与有限元编程
通用UM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:7月前
太白金星
本科 慢慢来
获赞 5粉丝 10文章 321课程 0
点赞
收藏
作者推荐

病态方程组

本文摘要(由AI生成):本文研究了方程组解对系数误差的敏感性。方程组(1)的解在系数产生1%的相对误差后几乎不变,而方程组(2)的解则发生了显著变化。这是因为方程组(2)所表示的两条直线几乎平行,导致其对系数误差非常敏感,这种方程组称为病态方程组。对于病态方程组,处理原则包括采用高精度数值运算、预处理方法、特殊数值解法或改变原问题提法,以减轻数值不稳定性。这些研究对于数值分析和有限元编程具有重要意义。对于方程组(1)其精确解是x=1.0,y=0.0 。如图所示,点(1.0,0.0)是方程组所表示的两条直线的交点。对于方程组(2)其精确解是x=-1.5,y=0.5 。如图所示,点(-1.5,0.5)是方程组所表示的两条直线的交点。现假设方程组(1)的系数a11产生了1%的相对误差,即3.00变成了3.03 。那么方程组的解变成了x=0.995,y=0.008,几乎和原来的解相同。假设方程组(2)的系数a11产生了1%的相对误差,即1.00变成了1.01 。那么方程组的解变成了x=1.789,y=0.193,和原方程组相比,发生了很大的变化,由此可见,方程组(2)对系数误差非常敏感。实际上,方程组(2)所表示的两条直线几乎是相互平行的,所以方程组系数的微小变化都会使他们的交点产生较大变化。像方程组(2)这样的因系数的很小改变却导致解改变很大的方程组,称为病态方程组,称相应的系数矩阵A为病态矩阵。病态方程组对任何算法都将产生数值不稳定性。对病态方程组有四种处理原则:采用高精度的数值运算;采用预处理方法;采用特殊的数值解法或寻找出现病态的原因,改变原问题的提法。来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈