CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5...

35
CS 101 Computer Programming and Utilization Dr Deepak B Phatak Subrao Nilekani Chair Professor Department of CSE, Kanwal Rekhi Building IIT Bombay Lecture 5, More Numerical computing (Slides courtesy Prof Ranade) IIT BOMBAY

Transcript of CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5...

Page 1: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

CS 101

Computer Programming and Utilization

Dr Deepak B Phatak

Subrao Nilekani Chair Professor

Department of CSE, Kanwal Rekhi Building

IIT Bombay

Lecture 5, More Numerical computing

(Slides courtesy Prof Ranade)

IIT BOMBAY

Page 2: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 2

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Overview

• Review of CPP Dumbo

• Iterative Numerical computations

•Factorial of a given integer

•Hemachandra Numbers

•Finding roots of an equation

• Course and Lab organization

Page 3: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 3

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

C++ program structure

#include <iostream>

using namespace std;

int main(){

---

--- statements/instructions;

---

return(0);

}

• We will learn later what each of these lines mean. Right now, this is a mandatory structure

Page 4: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 4

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

C++ Data types

• We have seen numerical and string data

7.45, 12.3E-12, “Ranade”, “\n”,

• Constant values are written like this by us

C++ stores these in an internal format

• Numerical values have an associated type

int, long, float, double

• Memory location names, called variables,

must be predefined with associated data type

int count; float a, b, sum; double largevalue;

Page 5: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 5

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

C++ statements

• Each instruction of our program can ordinarily convey any one of the 3 actions

•Assignment, input, output

• Assignement

sum = a + b;

area = (x-1.0)*(1/(x-1.0);

m = m + x/2.5

•The last one is to be seen as “reassignment”

Page 6: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 6

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

C++ statements ...

• “increment” is special form of reassignment

count = count + 1;

or count += 1;

or, more simply, ++count or count++

• Input

cin >> x >> maxvalue;

• Output

cout << “Value of y is “ << y << “\n”;

Page 7: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 7

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Conditional execution

• Program instructions are normally executed in

the given sequence

• C++ can examine conditions, and based on the

result, can execute conditions out of sequence

if (condition)

{ statement group 1};

else

{ statement group 2};

Page 8: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 8

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Conditional execution ...

• Based on the age of a passenger, the ticket

cost is different. Let us say, it is Rs 25.50 for

an adult, and Rs 12.75 for a child (< 12 Years)

cin >> age;

ticket = 12.75;

ticket = 25.50;

cout << “Rs. “ << ticket << endl;

Page 9: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 9

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Conditional execution ...

• Suppose we alter the sequence of assigning a value to ticket

cin >> age;

ticket = 25.50;

ticket = 12.75;

cout << “Rs. “ << ticket << endl;

• The assignment to variable ticket will always be the last assigned value irrespective of age!

Page 10: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 10

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Conditional execution …

• Use of the if – else statements will permit us to correctly evaluate the ticket

cin >> age;

if (age > 12)

{ticket = 25.50};

else

{ticket = 12.75};

cout << “Rs. “ << ticket << endl;

• What if elders are charged Rs 20?

Page 11: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 11

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

If – else if ladder

cin >> age;

if (age > 60){

ticket = 20.00;}

else if (age > 12){

ticket = 25.50;}

else {

ticket = 12.75;}

cout << “Rs. “ << ticket << endl;

Page 12: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 12

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Repetitive actions

int nfactorial, n, i

cin >> n

nafactorial = 1;

for (i =1; i <= n, i++){

nfactorial = nfactorial * i;

};

cout << “factorial ” << n << “ is ” << nfactorial;

Page 13: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 13

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Complete program for n!

#include <iostream>

using namespace std;

int main() {

int nfactorial, n, i;

cout << “ Give value of n” << endl;

cin >> n;

Page 14: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 14

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Complete program for n! …

nafactorial = 1;

for (i =1; i <= n, i++){

nfactorial = nfactorial * i;

};

cout <<“factorial ”<<n<< “is ”<<nfactorial<< endl;

Return(0);

}

Page 15: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 15

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Hemachandra’s Problem (12th century AD)

Suppose I have to build a wall of length 8 feet. I have bricks 2 feet long and also 1 foot long. In how many ways I can lay the bricks so that I fill the 8 feet?

Possibilities:

2,2,2,2;

1,1,1,1,1,1,1,1;

2,2,2,1,1

....

Page 16: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 16

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Hemachandra’s Actual Problem

Suppose I am designing a poetic meter with 8 beats. The meter is made of short syllables and long syllables.

Short syllable (s) = 1 beat,

Long syllable (l) = 2 beats.

How many ways are there of filling 8 beats?

Example of a poetic meterya kun den du tu sha r ha r dha va la ya shubh r vas tra vru ta

l l l s s l s l s s s l l l s l l s s

Page 17: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 17

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Hemachandra’s Solution

“By the method of Pingala, it is enough to

observe that the last beat is long or short”

Pingala: mathematician/poet from 500 A.D.

Hemachandra is giving credit to someone who

lived hundreds of years before him!!

Copy if necessary and if permitted,

but always give credit

Page 18: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 18

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Hemachandra’s solution contd.

S : Class of 8 beat patterns with short last beat.

L : Class of 8 beat patterns with long last beat.

Each 8 beat pattern is in class L or class S

S = all 7 beat patterns + short beat appended.

L = all 6 beat patterns + long beat appended

| class S | = Number of patterns with 7 beats

| class L | = Number of patterns with 6 beats

|8 beat patterns| = |class S| + |class L|

= |7 beat patterns| + |6 beat patterns|

Page 19: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 19

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Algebraically..

Hn = number of patterns with n beats

H8 = H7 + H6

In general Hn = Hn-1 + Hn-2

Does this help us to compute H8?

We need to know H7, H6, for which we need H5, ...

Page 20: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 20

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Algorithm Idea

H1 = number of patterns with 1 beat = 1 {S}

H2 = Number with 2 beats = 2 {SS, L}

H3 = H2 + H1 = 2 + 1 = 3 {SSS, SL, LS}

H4 = H3 + H2 = 3 + 2 = 5

H5 = H4 + H3 = 5 + 3 = 8

H6 = H5 + H4 = 8 + 5 = 13

H7 = H6 + H5 = 13 + 8 = 21

H8 = H7 + H6 = 21 + 13 = 34 ...

Page 21: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 21

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Program to compute Hn

int n; cin >> n; // which number to compute

int hprev = 1, hcurrent = 2;

for(int i=3; i <= n; i++){

hnext = hprev + hcurrent;

// prepare for next iteration

hprev = hcurrent;

hcurrent = hnext; }

cout << hnext;

Page 22: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 22

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Code is tricky!

Need a comment:

/* At the begining of an iteration

hcurrent = Hi-1 write ith term if you like.

hprev = Hi-2

where i is the value of variable i */

Can you prove this?

Will mathematical induction help?

Proving this is enough

-- hnext = hprev + hcurrent –

hence correct answer will be generated.

Page 23: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 23

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Proof by induction

Base case: At the beginning of the first iteration is this true? Yes, i will have value 3, and hprev = 1 = H1, hcurrent = 2 = H2

Suppose it is true at some later iteration, when i has value v >= 3. By induction hypothesis, hprev and hcurrent have values Hv-1, Hv-2 respectively

The first statement hnext = hprev + hcurrent makes hnext = Hv-1 + Hv-2 = Hv. After this the statement hprev = hcurrent makes hprev = Hv-1. The next statement hcurrent = hnext makes hcurrent=Hv.

In the next iteration i will have value v+1. But hprev,hcurrent will have exactly the right values!

Page 24: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 24

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

On Hemachandra Numbers

Mathematics from poetry!

Series is very interesting.

- Number of petals in many flowers.

- Ratio of consecutive terms tends to a limit.

What are these numbers more commonly known as?

Fibonacci numbers!!

Hemachandra lived before Fibonacci.

Page 25: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 25

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Newton Raphson method

Method to find the root of f(x), i.e. x s.t. f(x)=0.

Method works if:

f(x) and f '(x) can be easily calculated.

A good initial guess is available.

Example: To find square root of k.

use f(x) = x2 - k. f’ (x) = 2x.

f(x), f’ (x) can be calculated easily.

2,3 arithmetic operations

Initial guess x0 = 1 always works! can be proved.

Page 26: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 26

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

How to get better xi+1 given xi

f(x)

xi

xi+1

Point A =(xi,0) known.

A

B

C

f’ (xi) = AB/AC = f(xi)/(xi - xi+1) xi+1

= (xi- f(xi)/f’ (xi))

Calculate f(xi).

Point B=(xi,f(x

i)) known

Approximate f by tangent

C= intercept on x axis

C=(xi+1

,0)

Page 27: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 27

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Square root of k

xi+1

= (xi- f(xi)/f’ (xi))

f(x) = x2 - k, f’ (x) = 2x

xi+1 = xi - (xi2 - k)/(2xi) = (xi + k/xi)/2

Starting with x0=1, we compute x1, then x2, then...

We can get as close to sqrt(k) as required.

Proof not part of the course.

Page 28: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 28

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Code

float k;

cin >> k;

float xi=1; // Initial guess. Known to work.

for(int i=0; i < 10; i++){

// 10 iterations

xi = (xi + k/xi)/2;

}

cout << xi;

Page 29: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 29

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Another way

float xi, k; cin >> k;

for( xi = 1 ;

// Initial guess. Known to work.

xi*xi – k > 0.001 || k - xi*xi > 0.001 ;

// until error in the square is at most 0.001

xi = (xi + k/xi)/2);

cout << xi;

Page 30: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 30

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Yet Another way

float k; cin >> k;

float xi=1;

while(xi*xi – k > 0.001 || k - xi*xi > 0.001){

xi = (xi + k/xi)/2 ;

}

cout << xi;

}

Page 31: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 31

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

While statement

while (condition) { loop body}

check condition, then execute loop body if true.

Repeat.

If loop body is a single statement, then need not

use { }. Always putting braces is recommended;

if you insert a statement, you may forget to put

them, so do it at the beginning.

True for other statements also: for/repeat/if.

Page 32: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 32

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

For vs. while

If there is a “control” variable with initial value,

update rule, and whose value distinctly defines

each loop iteration, use for.

If loop executes fixed number of times, use for.

Page 33: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 33

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Homework

Write a program to calculate the cube root

using Newton Raphson method.

Check how many iterations are needed to get

good answers. Should be very few.

Page 34: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 34

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

evaluation approach for CS101

Quizzes 10%

Assignments 10%

Course Project 30%

Mid-semester exam 20%

End Semester Exam 30%

Minimum passing grade (DD) at >= 40% marks

Page 35: CS 101 IIT BOMBAY Computer Programming and Utilizationcs101/2009.2/Lectures/...CS 101 - Lecture 5 More numerical Computing C++ Data types •We have seen numerical and string data

Dr. Deepak B Phatak 35

IIT BOMBAY

CS 101 - Lecture 5 More numerical Computing

Consulting support

Monday 13:30 to 17:30

Tuesday 13:30 to 17:30

TAs will be available to help you with

your queries regarding lectures/labs and

with programming problems

Additional hours for lab access on both

these days

//possibly also Thursday 13:30 to 17:30

// will be announced tomorrow