回 帖 发 新 帖 刷新版面

主题:请高手帮忙~~~!!非线性方程组求解

F(1)=xa(1)+y(3)/y(1)+1./cf*(xa(3)-xa(1)**2-1./3.*xa(2)**2-2./3.*xa(2)*y(4)/y(1))
  F(2)=xa(2)+2*y(4)/y(1)+1./cf*(xa(4)-2*xa(1)*xa(2))
  F(3)=xa(3)-1./(1+sigm)*((0.5+0.5*noug/nouf+sigm)*(xa(1)**2+1./3.*xa(2)**2)-noug/nouf*cg*y(3)/y(1)+2./3.*(1+sigm)*xa(2)*y(4)/y(1)-z)
  F(4)=xa(4)-1./(1+sigm)*((1+noug/nouf+2*sigm)*xa(1)*xa(2)-(1-noug/nouf)*g*y(1)-noug/nouf*cg*(2*y(4)/y(1)+y(5)/y(1))+3./8.*Cd*xa(2)**2)
  F(5)=xa(5)-1./(1+sigm)*((2+cg/cf+sigm)*xa(1)*xa(2)+cg/cf*(1-noug/nouf)*g*y(1)-cg*(2*y(4)/y(1)+y(5)/y(1))-cg/cf*3./8.*Cd*xa(2)**2)

系数已知,xguess(5)赋的初值都是0,y(5)已知的数组y=[0.3673,0.0,-68.8183,0,-0.507]
求解xa(5)
我用的isml库函数 call neqnf(fcn,errrel,n,itmax,xguess,x,fnorm)
求解的到错误的答案
请问还有没有库函数可以求解??或者能否有高手给出解答方案!!谢谢各位!!

回复列表 (共6个回复)

沙发

楼主最好把你求解的完整计算条件给出来,你的方程组中还有其它参数。另外答案错误应该不是库函数的问题吧,建议对初值、相对差值以及迭代次数等进行适当调整再进行求解。

板凳

[quote]楼主最好把你求解的完整计算条件给出来,你的方程组中还有其它参数。另外答案错误应该不是库函数的问题吧,建议对初值、相对差值以及迭代次数等进行适当调整再进行求解。[/quote]
我这个是要循环的,一些系数是固定的,一部分是迭代进去的

3 楼


我要求解非线性方程组的方法,最好是有现成的程序或函数,因为我是Fortran新手,刚学的,短期要独立编写算法有很大的困难

4 楼

如果想找现成的程序或函数,可以查阅数值算法相关的fortran程序,如《Visual Fortran常用数值算法集》,里面有非线性方程组的fortran程序,基于newton-raphson法。当然,求解非线性方程组的方法还有很多,上面的方法比较常见,在工程领域应用比较广泛。

5 楼


感谢superhugo的回复
我查查书那本去~~
我用的那个isml库函数【NEQNF】为什么会算错呢

6 楼

具体算错的原因我没办法说清楚了,可能是你在原函数基础上扩展的部分出了问题,这种可能性估计比较大。另外,如果有NEQNF函数的源代码,你也可以去研究一下,看到底是什么问题。

不过对于NEQNF函数,它主要是采用改进的Powell混合算法,并通过对雅可比矩阵进行有限差分近似对非线性方程组进行求解的。我不是学数学的,对这种方法不是很了解。就我接触的问题而言,非线性方程组计算的常用方法还是newton-raphson法。

我来回复

您尚未登录,请登录后再回复。点此登录或注册