- #1
Belgium 12
- 43
- 0
Hi,
Below is a fortran program to calculate the roots of an equation by Newton's method.
I compile the program with the free compiler g95:
g95 -c Newton.f95 then g95 Newton.f95 -o Newton.exe
When I run the program Newton.exe I get the error can't assign value INTENT(IN)::x to
x=x-fx/g(x).It goes wrong at the do loop.When I change x1=x-fx/g(x) I get six times
the same result.
4 33.
What goes wrong with the program.I'm not a specialist.
Thank you for help
! Numerical Mathematics and Computing, Fifth Edition
! Ward Cheney & David Kincaid
! Brooks/Cole Publ. Co.
! Copyright (c) 2003. All rights reserved.
! For educational use with the Cheney-Kincaid textbook.
! Absolutely no warranty implied or expressed.
!
! Section 3.2
!
! File: Newton.f90
!
! Sample Newton's method program using subroutine Newton(f,fp,x,m)
!
program main
integer, parameter :: dp = kind (1d0)
real (kind = dp) :: x, true
integer :: m
interface
function f(x)
integer, parameter :: dp = kind(1d0)
real (kind=dp), intent(in) :: x
end function f
function g(x)
integer, parameter :: dp = kind (1d0)
real (kind=dp), intent(in) :: x
end function g
end interface
m = 6
x = 4.0_dp
call Newton(f,g,x,m)
end program main
subroutine Newton(f,g,x,m)
interface
function f(x)
integer, parameter :: dp = kind(1d0)
real (kind=dp), intent(in) :: x
end function f
function g(x)
integer, parameter :: dp = kind(1d0)
real (kind =dp), intent(in) :: x
end function g
end interface
integer, parameter :: dp = kind(1d0)
real (kind=dp), intent(in) :: x
integer, intent(in) :: m
print *, "n x f(x)"
fx = f(x)
print *, 0, x, fx
do n = 1,m
x = x - fx/g(x)
fx = f(x)
print "(i2, f20.16, f20.16)", n, x, fx
end do
end subroutine Newton
function f(x)
integer, parameter :: dp = kind (1d0)
real (kind = dp) , intent(in) :: x
f = ((x - 2.0_dp)*x + 1.0_dp)*x - 3.0_dp
end function f
function g(x)
integer, parameter :: dp = kind (1d0)
real (kind = dp), intent(in) :: x
g = (3.0_dp*x - 4.0_dp)*x + 1.0_dp
end function g
Below is a fortran program to calculate the roots of an equation by Newton's method.
I compile the program with the free compiler g95:
g95 -c Newton.f95 then g95 Newton.f95 -o Newton.exe
When I run the program Newton.exe I get the error can't assign value INTENT(IN)::x to
x=x-fx/g(x).It goes wrong at the do loop.When I change x1=x-fx/g(x) I get six times
the same result.
4 33.
What goes wrong with the program.I'm not a specialist.
Thank you for help
! Numerical Mathematics and Computing, Fifth Edition
! Ward Cheney & David Kincaid
! Brooks/Cole Publ. Co.
! Copyright (c) 2003. All rights reserved.
! For educational use with the Cheney-Kincaid textbook.
! Absolutely no warranty implied or expressed.
!
! Section 3.2
!
! File: Newton.f90
!
! Sample Newton's method program using subroutine Newton(f,fp,x,m)
!
program main
integer, parameter :: dp = kind (1d0)
real (kind = dp) :: x, true
integer :: m
interface
function f(x)
integer, parameter :: dp = kind(1d0)
real (kind=dp), intent(in) :: x
end function f
function g(x)
integer, parameter :: dp = kind (1d0)
real (kind=dp), intent(in) :: x
end function g
end interface
m = 6
x = 4.0_dp
call Newton(f,g,x,m)
end program main
subroutine Newton(f,g,x,m)
interface
function f(x)
integer, parameter :: dp = kind(1d0)
real (kind=dp), intent(in) :: x
end function f
function g(x)
integer, parameter :: dp = kind(1d0)
real (kind =dp), intent(in) :: x
end function g
end interface
integer, parameter :: dp = kind(1d0)
real (kind=dp), intent(in) :: x
integer, intent(in) :: m
print *, "n x f(x)"
fx = f(x)
print *, 0, x, fx
do n = 1,m
x = x - fx/g(x)
fx = f(x)
print "(i2, f20.16, f20.16)", n, x, fx
end do
end subroutine Newton
function f(x)
integer, parameter :: dp = kind (1d0)
real (kind = dp) , intent(in) :: x
f = ((x - 2.0_dp)*x + 1.0_dp)*x - 3.0_dp
end function f
function g(x)
integer, parameter :: dp = kind (1d0)
real (kind = dp), intent(in) :: x
g = (3.0_dp*x - 4.0_dp)*x + 1.0_dp
end function g