风平老涡 发表于 2023-8-25 21:10:09

八爪鱼 发表于 2023-8-25 09:25
您好,非常感谢您提的建议。
我在这里给您回复一下:
1、关于您提到的循环变量用整数型,循环变量t是要参 ...

1)循环变量用整数型,不会对计算结果有影响
2)了解你的思路,以上2)和3)就没有问题了。除了p12,p21,p23,p32是数组,其他数组可以为简单变量,不过对结果没有影响。
3)请显示4个输录文件的前几行的数据。
4)请显示p12,p21,p23,p32前几行的数据。
5)请显示yn1(i),yn2(i),yn3(i)和yn(i)前几行的数据。

八爪鱼 发表于 2023-8-27 10:18:01

风平老涡 发表于 2023-8-25 21:10
1)循环变量用整数型,不会对计算结果有影响
2)了解你的思路,以上2)和3)就没有问题了。除了p12,p21 ...

对的,对的,其实如果不想定义数组的话,p12,p21,p23,p32直接定义为常量也是可以的。
您好,非常感谢。我这边可以把p12,p21,p23,p32的问价给到您。
请允许我再重新描述一下我这边遇到的问题:在数学上已经证明yn1+yn2+yn3=1(yn)是恒量,与任何数(p12,p21,p23,p32,还有程序中的t)都无关。按道理来讲,不管p12,p21,p23,p32取任何数,程序运行出来的yn=1才对,但是实际情况却不是这样的,我这边把p32减小,立马就不守恒了

风平老涡 发表于 2023-8-28 10:16:10

注意

本帖最后由 风平老涡 于 2023-8-28 10:24 编辑

八爪鱼 发表于 2023-8-27 10:18
对的,对的,其实如果不想定义数组的话,p12,p21,p23,p32直接定义为常量也是可以的。
您好,非常感谢。我 ...
看上去入r1和r2是二元方程的两个根。如果两个根很接近的话,根据程序中的算法, c1, c2和c3会产生较大误差,引起最后结果不符预期。
请注意,两个相近的数相减会使有效位数减小从而引起误差。所以在编程中一定要注意两个操作:相近的数相减及除以一个很小的数。

八爪鱼 发表于 2023-8-28 13:26:01

风平老涡 发表于 2023-8-28 10:16
看上去入r1和r2是二元方程的两个根。如果两个根很接近的话,根据程序中的算法, c1, c2和c3会产生较大误差 ...

对的,r1和r2是一元二次方程的两个根

八爪鱼 发表于 2023-8-28 13:41:06

风平老涡 发表于 2023-8-28 10:16
看上去入r1和r2是二元方程的两个根。如果两个根很接近的话,根据程序中的算法, c1, c2和c3会产生较大误差 ...

您好,哥。我刚才用Excel表格分步算了一下。当p32=0.1时,r1和r2相差了12个数量级。我在想是不是在后续的计算时,由于r1,r2相差太大造成的误差,计算机把较小的数忽略了。

风平老涡 发表于 2023-8-28 23:02:52

本帖最后由 风平老涡 于 2023-8-29 02:11 编辑

八爪鱼 发表于 2023-8-28 13:41
您好,哥。我刚才用Excel表格分步算了一下。当p32=0.1时,r1和r2相差了12个数量级。我在想是不是在后续的 ...
用你的数据算了一下,当p32=0.1时发现几个问题:
1)当t=0时, yn1和 yn2 相对精确, yn3 误差较大。这是典型的误差传递,因为 yn3运算步骤较多。请参考有关数值分析书开头几章关于误差传递的描述。
2)当t>0时, 如t=1, 计算指数函数有溢出,无法得到准确解。
建议改变算法,算法需考虑误差传递及函数的变量可用范围。

八爪鱼 发表于 2023-8-29 09:40:08

风平老涡 发表于 2023-8-28 23:02
用你的数据算了一下,当p32=0.1时发现几个问题:
1)当t=0时, yn1和 yn2 相对精确, yn3 误差较大。这是 ...

非常感谢,我这边再试一下。关于数值分析的书,有哪些好的可以推荐一下吗?
如果改变算法,考虑范围的话,不守恒的问题是不是大概率就可以解决了。

风平老涡 发表于 2023-8-29 10:17:14

八爪鱼 发表于 2023-8-29 09:40
非常感谢,我这边再试一下。关于数值分析的书,有哪些好的可以推荐一下吗?
如果改变算法,考虑范围的话 ...

数值分析的书有很多,关於误差传递的基础知识所有的书都会涉及。

八爪鱼 发表于 2023-8-30 09:31:22

风平老涡 发表于 2023-8-29 10:17
数值分析的书有很多,关於误差传递的基础知识所有的书都会涉及。

好的,非常感谢提醒,我去看一下。谢谢

八爪鱼 发表于 2023-8-30 09:51:59

风平老涡 发表于 2023-8-28 23:02
用你的数据算了一下,当p32=0.1时发现几个问题:
1)当t=0时, yn1和 yn2 相对精确, yn3 误差较大。这是 ...

您好,哥,关于函数变量的可用范围,能再稍微提示一下吗?或者说Fortran程序书上是不是有关于溢出这一块的介绍?我自己看一下。刚刚接触Fortran和数值计算这一块,还是小白,有点不太懂。非常感谢!
页: 1 [2] 3
查看完整版本: fortran 程序运行不守恒是什么问题?急