fortran 程序源程序设计 :利用牛顿迭代法求出x^3+2x^2+2x+1=0 在x=0附近的根 误差为10^(-6)。
要求:1将牛顿迭代法,函数f(x)以及函数f'(x)设计成子程序代码2调用子程序求根e那个tanzq2007你能不能改的简单点,就是把newton那个子程序放成单独的不要...
要求:1将牛顿迭代法,函数f(x)以及函数f'(x)设计成子程序代码
2调用子程序求根e
那个tanzq2007你能不能改的简单点,就是把newton那个子程序放成单独的不要和其他程序代码并在一块 展开
2调用子程序求根e
那个tanzq2007你能不能改的简单点,就是把newton那个子程序放成单独的不要和其他程序代码并在一块 展开
1个回答
展开全部
我来帮你
real function newton(a,f,df)
real, parameter :: zero=1.e-6
real :: a ! 起始的猜值
real, external :: f ! 传入的求值函数
real, external :: df ! f'(x)的函数
real :: b ! 逼近得到解
real :: fb ! 记录f(a),f(b),f(c)
b = a-f(a)/df(a)
fb= f(b)
do while( abs(fb) > zero )
a=b
b=a-f(a)/df(a)
fb=f(b)
end do
newton=b
return
end function newton
! 求值的函数
real function func(x)
implicit none
real :: x
func=x**3+2*x*x+2*x+1
return
end function func
! func'(x)
real function dfunc(x)
implicit none
real :: x
dfunc= 3*x**2+4*x +2
return
end function dfunc
program main
implicit none
real ,external :: func
real ,external ::dfunc
real ,external ::newton
real, parameter :: zero=1.e-6
real :: a
real :: ans
write(*,*) "输入起始猜值"
read (*,*) a
ans=newton(a,func,dfunc)
write(*,"('x=',F8.4)") ans
end program
real function newton(a,f,df)
real, parameter :: zero=1.e-6
real :: a ! 起始的猜值
real, external :: f ! 传入的求值函数
real, external :: df ! f'(x)的函数
real :: b ! 逼近得到解
real :: fb ! 记录f(a),f(b),f(c)
b = a-f(a)/df(a)
fb= f(b)
do while( abs(fb) > zero )
a=b
b=a-f(a)/df(a)
fb=f(b)
end do
newton=b
return
end function newton
! 求值的函数
real function func(x)
implicit none
real :: x
func=x**3+2*x*x+2*x+1
return
end function func
! func'(x)
real function dfunc(x)
implicit none
real :: x
dfunc= 3*x**2+4*x +2
return
end function dfunc
program main
implicit none
real ,external :: func
real ,external ::dfunc
real ,external ::newton
real, parameter :: zero=1.e-6
real :: a
real :: ans
write(*,*) "输入起始猜值"
read (*,*) a
ans=newton(a,func,dfunc)
write(*,"('x=',F8.4)") ans
end program
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询