Register to reply

Bisection method in fortran 90

by jhosamelly
Tags: bisection, fortran, method
Share this thread:
jhosamelly
#1
Dec14-12, 03:47 AM
P: 126
Bisection method for the equation x3−2x−2 = 0 which has a single root
between x=−4 and x = 2.

here's the code I have


program bisection2
implicit none
real :: fxa, xnew, xu, xl, fxb, fnew

 
xu=4
xl=2

1 xnew=(xu+xl)/2
fxa=(xnew**3-(2*xnew)-2)
fxb=(xl**3-(2*xl)-2)

fnew=fxa*fxb

if fxnew<0 then
xl=xl
xnew=xu
go to 1

if fxnew>0 then
xnew=xl
xu=xu
go to 1


print *, "fx(a) = ", fxa
print *, "fx(b) = ", fxb


end program bisection2
I know there's something wrong with my code. Can somebody help me please?

Here are the Bisection Method formulas

xm = (xl+xu)/2

Phys.Org News Partner Science news on Phys.org
Scientists develop 'electronic nose' for rapid detection of C. diff infection
Why plants in the office make us more productive
Tesla Motors dealing as states play factory poker
uart
#2
Dec14-12, 04:13 AM
Sci Advisor
P: 2,751
The code at the line starting: "if fxnew>0 then" can never execute. Take a close look and see if you can tell me why?

A couple of other points.
1. Even if you fix the above problem, your code may never terminate. Requiring exact (FP) equality with zero is a bad idea.
2. There's no real reason to use to goto in this code. You should look at alternative methods of program flow control.
3. It will really help you keep track of your code if you start making use of indentation.
jhosamelly
#3
Dec14-12, 04:15 AM
P: 126
I'm guessing coz there is no "end if"?

I don't know. sorry.. How can I do the iteration here?

Thanks for the help

uart
#4
Dec14-12, 04:26 AM
Sci Advisor
P: 2,751
Bisection method in fortran 90

Quote Quote by jhosamelly View Post
I'm guessing coz there is no "end if"?
Yes, unless you use "end if" then the statement "if fxnew>0 then" is still under the control if the previous "if".

I'm surprised that the program even compiled without the "end if" statements. (BTW. does it actually compile?)
jhosamelly
#5
Dec14-12, 04:28 AM
P: 126
Can you please please help me? How can I put the conditions above and do the iteration? Please? thanks.

Yes it did compile.
uart
#6
Dec14-12, 06:51 AM
Sci Advisor
P: 2,751
Quote Quote by jhosamelly View Post
Can you please please help me? How can I put the conditions above and do the iteration? Please? thanks.
Yes there's still quite a few thing wrong with code, but you know we can't write your program for you. :)

I'll look at one section:
if fxnew<0 then
xl=xl
xnew=xu
You're kind of got the right idea. This section is executed if xnew is opposite sign to xlow, so you now know the zero crossing is between xlow and xnew. Now you want to let xnew become the new xhigh, and keep xlow as is. Can you see that of your two assignment statements, one is redundant and the other is the wrong way around.
TheoMcCloskey
#7
Dec14-12, 08:52 AM
P: 182
... and don't forget to correct your inital conditions.
jhosamelly
#8
Dec14-12, 08:55 AM
P: 126
Ow. So it should be

xl=xl
xu=xnew

Correct? Then? What should I do?
uart
#9
Dec14-12, 09:13 AM
Sci Advisor
P: 2,751
Quote Quote by jhosamelly View Post
O
Correct? Then? What should I do?
Take all the advice and hints you've been given so far then sit down and write a new iteration of your program.
SteamKing
#10
Dec14-12, 10:16 AM
Emeritus
Sci Advisor
HW Helper
Thanks
PF Gold
P: 6,553
xl = xl is redundant
jhosamelly
#11
Dec14-12, 07:53 PM
P: 126
Quote Quote by SteamKing View Post
xl = xl is redundant
hmmm.. yes. But how can I put that xl=xl and use it on the equation again in program?

just give me one example and i'll do it for the rest of the statements. Thanks. I really don't have any idea.
Mark44
#12
Dec15-12, 12:25 PM
Mentor
P: 21,311
Quote Quote by jhosamelly View Post
hmmm.. yes. But how can I put that xl=xl and use it on the equation again in program?
It's silly and a waste of time to set a variable to its own value.

You're doing the same thing later in your program where you set xu = xu.

What is your purpose in doing this?
Quote Quote by jhosamelly View Post
just give me one example and i'll do it for the rest of the statements. Thanks. I really don't have any idea.
jhosamelly
#13
Dec15-12, 05:05 PM
P: 126
I need to put in codes the conditions given.
Mark44
#14
Dec15-12, 05:30 PM
Mentor
P: 21,311
Quote Quote by jhosamelly View Post
Here are the Bisection Method formulas

xm = (xl+xu)/2

I'm not convinced that you understand what the above means.

xL - Lower (left) endpoint of an interval
xM - Midpoint of an interval
xU - Upper (right) endpoint of an interval

a) If f(xL)*f(xM) < 0, the graph of the function crosses the x-axis somewhere between xL and xM, so the root you're looking for must be in the left half of the original interval. If so, USE THE SAME VALUE FOR xL (i.e., don't change xL) but reset xU to xM. Your code should NOT include xL = xL.

b) If f(xL)*f(xM) > 0, the graph of the function does not cross the x-axis between xL and xM, so we should look in the other half of the interval - in [xM, xU]. If so, USE THE SAME VALUE FOR xU (i.e., don't change xU), but reset xL to xM. Your code should NOT include xU = xU.

At each step for a) or b), we are shortening the interval by half its length, so that we eventually find the root.

c) If f(xL)*f(xM) = 0 then either f(xL) = 0 or f(xM). There's probably an assumption that f(xL) ≠ 0 and f(xU) ≠ 0, but you didn't show it in the attachment you posted.
jhosamelly
#15
Dec15-12, 05:45 PM
P: 126
Yes, I understand that,, I just dont know how to put it in codes. i'll work on all your hints now. Thanks :)
Integral
#16
Dec15-12, 08:01 PM
Mentor
Integral's Avatar
P: 7,320
Perhaps you could work through several iterations by hand. Once you get an understanding of how the algorithm works you can then write the code.

Step 1. Is there a root on the interval?
Step 2. Find the midpoint.
step 3. Find the half that has a root.
Step 4. Repeat.
jhosamelly
#17
Dec15-12, 08:04 PM
P: 126
I did that already. Im not getting the same answer with the the program so I know there's something wrong. Thanks for the help guys. Appreciate it.
uart
#18
Dec15-12, 10:54 PM
Sci Advisor
P: 2,751
Quote Quote by jhosamelly View Post
I did that already. Im not getting the same answer with the the program so I know there's something wrong. Thanks for the help guys. Appreciate it.
What answer are you getting. Is you program even terminating? As it's written, I wouldn't have though it would do.


Register to reply

Related Discussions
Bisection method in c++ Engineering, Comp Sci, & Technology Homework 2
FORTRAN Help: Bisection Method & Roots of Functions Engineering, Comp Sci, & Technology Homework 3
Differential equations, euler's method and bisection method Calculus & Beyond Homework 3
Bisection method by c Programming & Computer Science 10
Bisection Method Programming & Computer Science 2