| Schedule | Readings | Labs | Homework | Mechanics | Contact | |
| CSC 151-01, 2007S » Homework 2 » Quadratic Roots | ||||||
Assigned: Wednesday, January 24
Due: Friday, January 26
No extensions!
Summary: In this assignment, you will explore the use of Scheme to compute the square roots of a quadratic equation.
Purposes: To give you exprience writing
expressions in
Scheme form
(prefix notation and parenthesized). To
get you used
to doing daily homework assignments, particularly submitting the
assignments.
To demonstrate the utility of Scheme as an extended calculator.
Expected Time: One hour.
Collaboration: You should work in groups of two or three. You may not work alone. You may not work in groups of four or more. You may discuss the assignment with anyone you wish. You may obtain help from anyone you wish, but you should clearly document that help.
Submitting: Email me your work. More details below.
Warning: So that this exercise is a learning assignment for everyone, I may spend class time publicly critiquing your work.
One advantage of learning a programming language is that you can automate the more tedious computations you encounter. We begin your work in Scheme by considering one such computation.
One of the more painful computations students are often asked to do in high-school mathematics courses is to compute the roots of a polynomial. As you may recall, a root is a value for which the value of the polynomial is 0. For example, the roots of 3x2-5x+2 are 2/3 and 1. (See the end of this assignment for a proof.)
There is, of course, a formula for computing the roots of a quadratic polynomial of the form ax2+bx+c. In a narrative style, it's often expressed
Negative b plus or minus the square root of b squared minus four a c all over two a.
In more traditional mathematical notation, we might write
(-b +/- sqrt(b2 - 4ac))/2a
Our goal, of course, is to convert all of these ideas to a Scheme program.
We can express the coefficients of a particular polynomial by using
define expressions.
(define a 3)
(define b -5)
(define c 2)
If we also define x, we can evaluate the
polynomial.
(define x 5)
(define value-of-polynomial (+ (* a x x) (* b x) c))
Of course, since we've defined a, b,
and
c, we can also compute the roots. Here is a
bit of incorrect
code to compute roots.
(define root1 (/ (+ (- b) (sqrt b))
(* 2 a)))
(define root2 (/ (- (- b) (sqrt b))
(* 2 a)))
Your goal, of course, is to correct the code for root1
and
root2 so that we correctly compute the roots
of the polynomial.
You can test the correctness of your solution by trying something like
(define value-of-polynomial-at-root1 (+ (* a root1 root1) (* b root1) c))
(define value-of-polynomial-at-root2 (+ (* a root2 root2) (* b root2) c))
In the past, we've seen students test their quadratic-root formula by trying essentially arbitrary values for a, b, and c. Unfortunately, many arbitrary quadratic polynomials have no real roots. Hence, we suggest that you test your work by building polynomials for which you know the roots. How? Create your polynomials by multiplying two linear polynomials, (px+q)*(rx+s). You know that the roots of this polynomial will be -q/p and -s/r.
The primary evaluation criterion for this assignment is, of course, correctness. That is, I will check to make sure that you expressed the quadratic formula correctly in Scheme.
Particularly elegant solutions may earn a modicum grade boost. Conciseness is one aspect of elegance. Formatting of your code for clarity, using horizontal and vertical whitespace is another. You may discover others.
Once you have ensured that all of the definitions in the definitions window are correct, please submit your definitions in the body of an email message.
In particular, select all your definitions and then copy them (typically, using from the item). Open a mail composition window, either in Thunderbird or Outlook Express, and paste the definitions into that window. Add your names at the top of the window. Send the mail.
In the narrative above, we claimed that the roots of 3x2-5x+2 are 2/3 and 1. Let's see if that's true.
x=2/3
3*(2/3)*(2/3) - 5*2/3 + 2
= 12/9 - 10/3 + 2
= 4/3 - 10/3 + 2
= (4-10)/3 + 2
= -6/3 + 2
= -2 + 2
= 0
x=1
3*1*1 - 5*1 + 2
= 3 - 5 + 2
= 0
Janet Davis (davisjan@cs.grinnell.edu)
Created January 21, 2007 based on http://www.cs.grinnell.edu/~davisjan/csc/151/2006F/homework/02.quadratic_roots.html