I in Fortran please -- Bairstow's method & Newton-Raphson

  • Context: Fortran 
  • Thread starter Thread starter moebot
  • Start date Start date
  • Tags Tags
    Fortran Method
Click For Summary
SUMMARY

This discussion focuses on implementing Bairstow's method in Fortran while integrating the Newton-Raphson method into a subroutine. The user encountered issues with incorrect outputs during execution, which were traced back to formatting errors in the code, such as unnecessary spaces. The final solution was achieved after debugging and refining the code, leading to successful execution of the algorithm.

PREREQUISITES
  • Understanding of Bairstow's method for polynomial root-finding
  • Familiarity with the Newton-Raphson method
  • Proficiency in Fortran programming, specifically Fortran 77 style
  • Knowledge of numerical methods and error analysis
NEXT STEPS
  • Explore advanced debugging techniques in Fortran
  • Learn about polynomial root-finding algorithms beyond Bairstow's method
  • Study the implementation of Newton-Raphson in various programming languages
  • Investigate numerical stability and convergence criteria in iterative methods
USEFUL FOR

Students and professionals in computational mathematics, software developers working with numerical algorithms, and anyone interested in implementing root-finding methods in Fortran.

moebot
Messages
5
Reaction score
2
this is bairstow's method , i need to put Newton-raphson in a subroutine and i don't know what's wrong i keep getting the wrong answer when i execute please help

Code:
parameter (np=100)
parameter (eps=1e-3)
real a(np) ,b(np),c(np)
real r ,s ,ri,si   
integer n,i

write(*,*)'n,r,s'
read(*,*)n,r,s

    do i=n+1,1,-1
write(*,*)'a(i)'
read(*,*) a(i)
end do

10 ri=r
   si=s
   b(n+1)=a(n+1)
   b(n)=a(n)+r*b(n+1)
   do i=n-1,1,-1
   b(i)=a(i)+r*b(i+1)+s*b(i+2)
   end do

   c(n+1)=b(n+1)
   c(n)=b(n)+r*c(n+1)
   do i=n-1,1,-1
   c(i)=b(i)+r*c(i+1)+s*c(i+2)
   end do

   do i=n+1,1,-1
   write(*,*) i,a(i),b(i),c(i)
   end do
 
   write(*,*)
 
 
 
  d=c(3)*c(3)-c(2)*c(4)
  r=r-(1./d)*(c(3)*b(2)-c(4)*b(1))
  s=s-(1./d)*(-c(2)*b(2)+c(3)*b(1))   if(sqrt(ri**2-r**2).ge.eps.or.sqrt(si**2-s**2).ge.eps)    goto 10
   write(*,*) r,s

 
   end


thanks in advance :)
 
Last edited by a moderator:
Technology news on Phys.org
Have you run an example problem with known intermediate values and checked them? If so, where do they start to disagree?
 
You have extra spaces in the following code:

real a(np) ,b(np),c(np)
real r ,s ,ri,si

I haven't used Fortran in many years, but I would make sure the unnecessary spaces are deleted and that you have spaces after the commas.
 
magoo said:
You have extra spaces in the following code:
I don't believe this makes any difference whatsoever.
 
  • Like
Likes   Reactions: DrClaude
@moebot Are you able to provide some comments to your code, such as
  • What the equation is, whose root(s) you're trying to find
  • What you are intending each section of code to do
  • Why you're writing in F77 (fixed) style with GOTOs instead of loops
?
 
I hope that after more than three months, moebot has gotten his code to work...
 
jtbell said:
I hope that after more than three months, moebot has gotten his code to work...
hahaha, i am doing my second degree now, and i just remembered this, thanks a lot for the help.

p.s i got the code to work ! haha
 
  • Like
  • Haha
Likes   Reactions: jtbell and Tom.G

Similar threads

  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 23 ·
Replies
23
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
Replies
9
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K