Вы находитесь на странице: 1из 4

1.

00 Tutorial 7
Agenda
? Administrative Issues (Quiz 2)
? Packaging Function in Objects
? Root Finding
Bisection, Secant, Newton
? Numerical Integration
Rectangular, Trapezoid, Simpson
Quiz 2
? Date: Class Time
? Quiz 2 Review: 1.5 hours
? Topics:
Lecture 11- Lecture 23
Steps in solving numerical
problems
? Packaging functions as objects
write the function as a method that takes an
argument (the x) and return the mathematical
representation of the function inside of a class that
implements certain Function interface.
? In your main, call the root finding or integration
methods by passing your function objects and
other parameters.
Packaging Function in Objects
How do you represent functions such as:
1. Sin(x)+ Cos(x
2
)-0.78
2. x
3
+5x-9
3. x
2
+ 5y+z
?
Answer (1): Sin(x)+ Cos(x
2
)-0.78
public interface MathFunction {
public double f(double x);
}
class Func1 implements MathFunction {
public double f(double x) {
return Math.sin(x)+Math.cos(x*x)-0.78;}
}
Answer (2): x
3
+5x-9
//You will still be able to use the same interface
public interface MathFunction {
public double f(double x);
}
//You just need to create a new class with a different
?f method?
class Func2 implements MathFunction {
public double f(double x) {
return x*x*x+5x*x-9 ; }
}
Answer (3): x
2
+ 5y+z
? What are you going to do?
? Change the interface?s function so that it
can take 3 arguments
? Create a new class that implements the
interface?
Question ?
? Why do you need interfaces? Why not just directly
write your classes?
? How do you represent functions that will be used
for newton root finding?
? For instance: x
3
+5x-9 ?
? You need to change interface so there?s another
method to represent the derivative of the function
? Then just implements the new interface.
Answer (4)
public interface MathFunction2 {
public double fn(double x);
public double fd(double x);
}
class Func4 implements MathFunction2 {
public double fn(double x) {
return x*x*x +5*x- 9;
}
public double fd(double x) {
return 3*x*x + 5;
}
}
Root Finding ? Exercise (1)
? Write a class using both bisection and newton
methods to find the root for the function:
x*x*x +5*x- 9
? Think about the structure first
? Packaging the function as object (as we talked about
before)
? Prepare your root finding methods (usually you want to
have a class that has all your root finding methods so
you can directly use them without any change)
? Call them in your main and print the result
Function preparation for root
finding (1)
public interface MathFunction {
public double f(double x);
}
class Func1 implements MathFunction {
public double f(double x) {
return x*x*x +5*x- 9;}
}
Function Preparation for Root
Finding Using Newton
public interface MathFunction2 {
public double fn(double x);
public double fd(double x);
}
class Func4 implements MathFunction2 {
public double fn(double x) {
return x*x*x +5*x- 9;
}
public double fd(double x) {
return 3*x*x + 5;
}
}
Wrap root finding methods in one
class
class RootFinder {
public static final int JMAX= 40; // Maximum #of iterations
public static final double ERR_VAL= -10E10;
public static double rtbis(MathFunction func, double x1, double x2,
double xacc) { ?}
public static double newt(MathFunction2 func, double a, double b,
double epsilon) { ?}
}
Write your main class to use the
methods
public class MyRootFinder {
public static void main(String[] args) {
double root= RootFinder.rtbis(new Func1(), -1.0, 8.0,
0.0001);
System.out.println("Root: (using bisection) " + root);
root= RootFinder.newt(new Func4(), -1.0, 8.0,
0.0001);
System.out.println("Root: (using newton) " + root);
System.exit(0);
}
}
Integration - Exercise (2)
(Same steps as root finding)
? Write a class using all three integration methods
for the function between the range 1 and 20,
interval 50:
x*x*x +5*x- 9
? Think about the structure first
? Packaging the function as object (as we talked about
before)
? Prepare your integration methods (usually you want to
have a class that has all your integration methods so
you can directly use them)
? Call them in your main and print the result
Wrap all your integration
methods
class Integration {
public static double rect(MathFunction func, double
a, double b, int n) {?}
public static double trap(MathFunction func, double
a, double b, int n) {?}
public static double simp(MathFunction func, double
a, double b, int n) {?}
}
Write your main class
public class MyIntegration {
public static void main(String[] args) {
double r= Integration.rect(new Func1(), 1.0, 20.0, 50);
System.out.println("Rectangle: " + r);
double t= Integration.trap(new Func1(), 1.0, 20.0, 50);
System.out.println("Trapezoid: " + t);
double s=Integration.simp(new Func1(), 1.0, 20.0, 50);
System.out.println("Simpson: " + s);
System.exit(0);
}
}
Pset 7 ? Problem 1
? What is the function? How do you pass
information such as L, N, M, S, P into your
function? (Can you use constructor to take
all these info?)
? What root finding method will you use?
? How do you call them?
Pset 7 - Problem 2
? What is the function? How do you represent
them in your program?
? What is your integration method?
? How do you call them?

Вам также может понравиться