Fortran Coder

标题: 拟牛顿法求解轴承静力学模型 [打印本页]

作者: zuiwojinxiao    时间: 2014-12-18 14:51
标题: 拟牛顿法求解轴承静力学模型
本人借鉴徐士良的Fortran常用算法程序集的拟牛顿法求解非线性方程组,方程总共3个方程3个未知量,求解发现计算老是出现error,或者fail求解失败。初值与计算步长也不知道如何选取,附件中是我编写的程序,求大神支招。
GAUSS.F90与NTN.F90是借鉴的徐士良的程序(电子版可在百度上随意搜到---[size=14.3999996185303px]Fortran常用算法程序集)。FS为我的方程,NTN0是主函数。FS中的Fa,Fr,M分别为轴向力,径向力与力矩,数值可变化,一般更改Fa为0-40000,Fr=0,M=0。 X为未知量,y为方程组。


如果大神有高招,如果方便的话,希望不吝赐教。多谢。

FS.F90

2.6 KB, 下载次数: 30

方程组

GAUSS.F90

1.88 KB, 下载次数: 13

高斯消去法

NTN.F90

1.8 KB, 下载次数: 13

拟牛顿法

NTN0.F90

360 Bytes, 下载次数: 13

主函数


作者: li913    时间: 2014-12-18 18:17
太复杂了。你可以先用简单的方程去调试代码,方程太复杂,调试很难。
作者: zuiwojinxiao    时间: 2014-12-18 19:19
li913 发表于 2014-12-18 18:17
太复杂了。你可以先用简单的方程去调试代码,方程太复杂,调试很难。

其实方程形式很简单,估计就是中间变量太多了。我现在想不出方程该如何简化?我想问一下你对拟牛顿法了解吗?  对于初值和步长的选择我很困惑。还有就是拟牛顿法的收敛方向我也不是很清楚
作者: li913    时间: 2014-12-19 15:05
方法不懂。只能讲讲调试代码的技巧。先用已知解的简单方程去调试代码,这样比较容易找出逻辑错误(计算结果不符合预期)。
作者: zuiwojinxiao    时间: 2014-12-23 09:28
li913 发表于 2014-12-19 15:05
方法不懂。只能讲讲调试代码的技巧。先用已知解的简单方程去调试代码,这样比较容易找出逻辑错误(计算结果 ...

ok,多谢
作者: kerb    时间: 2015-3-21 23:11
你的方程最好写出来,如果是非线性的方程组,你在牛顿法中,雅克比矩阵往往接近奇异,高斯消元法往往不能进行下去,即便能进行下去,求解结果也未必正确,看你的程序里面好象没有雅克比矩阵,你说的拟牛顿法也不像,里面也没看见海塞矩阵。

牛顿法是这样的:假设你的方程组用F表示,S = X_{n+1}-X_n;假设J是雅克比矩阵,迭代是这样:S =- (J^tJ)^{-1}J^tF(X_n);X_{n+1} = X_n +S
作者: 111    时间: 2023-8-4 15:47
您好。请问您的问题解决了吗?




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2