## Sunday, November 27, 2016

### TI-84 Plus and HP Prime: Differential Equations and Half-Increment Solution, Numerical Methods

TI-84 Plus and HP Prime:  Differential Equations and Half-Increment Solution, Numerical Methods

Introduction

The program HALFSTEP solves the numerical differential equation

d^2y/dt^2 = f(dy/dt, y, t)  given the initial conditions y(t0) = y0 and dy/dt (t0) = dy0

In this notation, y is the independent variable and t is the dependent variable.

The Method

Let C = f(dy/dt, y, t).  Give the change of t as Δt.

First Step:

With t = t0:
h_1/2 = dy0 + C * Δt/2
y1 = y0 + dy0 * Δt

Loop:

t = t0 + Δt
h_I+1/2 = h_I-1/2 + C * Δt
y_I+1 = y_I +h_I+1/2 * Δt

Repeat as many steps as desired.

This method was presented by Robert M. Eisberg in his 1976 calculator programming book (see source below).

Variables

The program uses the following variables:

C:  d^2y/dt^2.   Represent dy/dt as the variable A, y as the variable Y, and t as the variable T.

The program will always designate Y as the independent variable and T as the dependent variable.

Examples:

 Application C C for HALFSTEP Free-Fall d^2y/dt^2 = g “9.80665” (SI) or “32.1740468” (US) Free-Fall with Friction d^2y/dt^2 = g - α (dy/dt)^2 (α = F/m) “g - α * A^2” (sub numeric values for g, α) Spring d^2x/dt = -k/m * x “-k/m * T” (sub numeric values for k, m) Pendulum d^2θ/dt = -α*sin(θ) (α = -g/l) “-α * sin(Y)” (sub numeric values for α) Damped, Driven Oscillations d^2x/dt = -α*x – β*dx/dt + γ * sin(ω*t) “-α*Y-β*A+γ*sin(ω*T)” (sub numeric values for α, β, γ)

HP Prime Program HALFSTEP

Input:  C.  Use single quotes to enclose d^2y/dt^2.  Represent dy/dt as A, y as Y, and t as T.

Output:  A matrix of two columns, t and y.

EXPORT HALFSTEP(c,A,Y,D,tmax)
BEGIN
// d^2y/dt^2=C,dy0,y0,Δt,tmax
// EWS 2016-11-17
// C use single quotes
// 'dy=A, y=Y, t=T'

HAngle:=0;

LOCAL mat:=[[0,Y]],T,H;
LOCAL K:=3,I;

T:=D;
H:=A+EVAL(c)*D/2;
Y:=Y+H*D;

FOR I FROM 2*D TO tmax STEP D DO
T:=I; A:=H;
H:=H+EVAL(c)*D;
Y:=Y+H*D;
K:=K+1;
END;

RETURN mat;

END;

TI-84 Plus Program HALFSTEP

Input:  For C, use enclose d^2y/dt^2 in quotes.  Represent dy/dt as A, y as Y, and t as T.

Output:  A matrix of two columns, t and y.

"EWS 2016-11-27"
Func
Disp "D²Y/DT²=C"
Disp "USE A=DY/DT,Y,T"
Input "C, USE A STRING:",Y1
Input "DY0:",A
Input "Y0:",Y
Input "DELTA TIME:",D
Input "TIME MAX:",N
[[Y]]→[A]
D→T
A+Y1*D/2→H
Y+H*D→Y
augment([A],[[D][Y]])→[A]
For(I,2D,N,D)
I→T:H→A
H+Y1*D→H
Y+H*D→Y
augment([A],[[I][Y]])→[A]
End
[A]^T→[A]

Examples:

Please see the screen shots below.  Both are screen shots from the TI-84 Plus.

Source:  Eiseberg, Robert M.  Applied Mathematical Physics with Programmable Pocket Calculators  McGraw-Hill, Inc:  New York.  1976.  ISBN 0-07-019109-3

This blog is property of Edward Shore, 2016.

## Thursday, November 24, 2016

### Casio fx-7400g Plus: Program Library

Casio fx-7400g Plus: Program Library

Contents:
* Polar Graphing (POLAR)
* Summation and Integration (FX, SUMFX, INTFX)
* Binomial Expansion (BINOMEXP)
* Forward Triangle Intersection (FORDINT)
* Coordinates of a Traverse (TRAVEZ)

The classic fx-7400g (we’re talking about the early 2000s) lacked numerical integration, summation, and polar graphing.  Let’s remedy that through programming.

Fortunately any of the programs created on the fx-7400g Plus can be translated literally to later Casio graphing calculators.

Casio fx-7400g Plus Program POLAR

Program POLAR
ClrGraph
“THETA MIN”? → A
“THETA MAX”? → B
“THETA STEP”? → S
For A → I To B Step S
sin (2I) →  R       (see note below)
PlotOn R cos I, R sin I
Next
DrawGraph

Notes:
*  This is best used when the function list is clear.
*  Set up graph screen parameters (Xmin, Xmax, Ymin, Ymax) before hand.
*  Insert polar functions by editing the 7th line (in italics), using I for θ.  The result must be stored to R  (by → R).

Casio fx-7400g Plus Programs FX, SUMFX, INTFX

The programs SUMFX and INTFX will require the subroutine program FX.  FX is where you insert the function f(x).   The result is stored to Y.

Program FX
X^2+1 → Y
Return

Program SUMFX
“LOWER”? → L
“UPPER”? → U
0 → T
For L → X To U
Prog “FX”
T + Y → T
Next
“SUM=”
T

Example:  FX contains X^2 +1, with L = 1, U = 15.  Result:  1255
Program INTFX
“LOWER”? → L
“UPPER”? → U
“NO. PARTS”? → N
L → X
Prog “FX”
Y → T
U → X
Prog “FX”
T + Y → T
(U – L) ÷ N → H
For 1 → I To N-1
L + I * H → X
Prog “FX”
If I Rmdr 2 = 0
Then T + 2*Y → T
Else T + 4*Y → T
IfEnd
Next
T * H ÷ 3 → T
“INTEGRAL=”
T

Example:  FX contains X^2 +1, with L = 1, U = 15, N = 24.  Result:  1138.666667

Casio fx-7400g Plus Program BINOMEXP

The program BINOMEXP shows the coefficients of the binomial expansion (Ax + B)^N.

Program BINOMEXP
“(AX+B)^N”
“A”? → A
“B”? → B
“N”? → N
For 0 → I To N
N nCr I * A^(N-I) * B^I → T
“{COEF, POWER}”
{T, N-I}
Next

Example:  (2x – 3)^2
Results:  {4, 2}, {-12, 1}, {9, 0}   (4x^2 – 12x + 9)

Casio fx-7400g Plus Program FORDINT

The program FORDINT calculates the third point on a triangle where the coordinates of points A  (xa, xb) and B (xb, yb) are known.  Also, a line towards P point is aimed from point A at angle α° and from point B at angle β°.

 Variable Casio fx-7400g Plus Variable Casio fx-7400g Plus Variable Casio fx-7400g Plus xa N ya S α A xb O yb T β B xp P yc U γ C

Source: Casio.   Casio fx-FD10 Pro User’s Guide Tokyo. 2014

Program FORDINT
Deg
“XA”? → N
“YA”? → S
“ANGLE A”? → A
“XB”? → O
“YB”? → T
“ANGLE B”? → B
1 ÷ tan A + 1 ÷ tan B → C
(N ÷ tan B + O ÷ tan A + (T – S)) → P
(S ÷ tan B + T ÷ tan A + (N – O)) → U
180 – A – B → C
“{XP, YP, C}”
P
U
C

Example:
Point A:  (1000, 950), angle towards point P:  30°
Point B:  (1012, 997), angle towards point P:  44°

Result:
Point P:  (approximately) (1024.49237, 975.078358)
Angle γ: 106°

Casio fx-7400g Plus Program TRAVEZ

TRAVEZ calculates the new point knowing the original coordinates, direction, and angle of travel.  The angle 0° comes from due east and rotates counterclockwise.

Program TRAVEZ
Deg
“1ST EAST”? → E
“1ST NORTH”? → N
0 → D
Lbl 1
“DISTANCE”? → I
“ANGLE”? → A
I * cos A + E → E
I * sin A + N → N
D + I → D
“POINT”
{E, N}
“DONE? Y=1”
? → Y
Y ≠ 1 Goto 1
“DISTANCE =”
D

Example:  Initial point (1000,1000)
Distance: 750, Angle:  276; Point {1078.396347, 254.1085785}
Distance: 600, Angle:  35; Point {1569.887574, 598.2544403}
Distance: 700, Angle:  118; Point {1241.25748, 1216.317755}
Total Distance:  2050

Casio fx-7400g Plus Program QUAD

The program QUAD is the quadratic equation which finds the roots of

Ax^2 + Bx + C = 0

Yes, I just can’t resist.

“A”? → A
“B”? → B
“C”? → C
B^2 – 4AC → D
If D≥0
Then “REAL ROOTS”
(-B + √D) ÷ (2A) → S
(-B - √D) ÷ (2A) → T
Else “ROOTS S+TI”
-B ÷ (2A) → S
√(Abs D) ÷ (2A) → T
IfEnd
{S, T}

Example:
A = 2.5, B = -3, C = -1.1
Roots:  “REAL ROOTS”, 1.494427191, -0.294427191

A = 2.5, B = -3, C = -1.1
Roots:  “ROOTS S+TI”,  -0.375 ± .3665719575i   (T:  -3.665719575)

Happy Thanksgiving!  Eddie

This blog is property of Edward Shore, 2016.

### Retro Review: Casio fx-7400g Plus

Eddie’s Math and Calculator Blog:  Retro Review:  Casio fx-7400g Plus

Specifications

Time:  Early 2000s, I have the early style where all the keys are rectangular
Screen:  48 x 80 pixels, 6 x 13 text
Power:  2 AA batteries with 2032 backup
Accuracy:  10 digits shown on screen, 15 digits internally
Memory:  20,000 bytes for programming (despite the 32K label on the calculator)

The calculator feels pretty good to hold, it is lightweight.

A Scaled Down fx-9850g

The fx-7400g Plus is a simplified version of fx-9850g family, marketed as entry level graphing calculator.  The features have been scaled down.  As a result the fx-7400g Plus lacks matrices, distribution functions, numerical integral, and polar graphing.

Casio is known as for their icon menus and the fx-7400g is no exception.  Here is the icon menu:

 1:  Run 2:  Statistics 3:  List 4:  Graph 5:  Table 6:  Program 7:  Link 8:  Contrast 9:  Memory

For statistics, the fx-7400g offers the following regressions:  linear, med-med, quadratic, logarithmic, exponential, and power.

Curiosities of the fx-7400g Plus

Instead of the usual six function keys (F1 – F6), the fx-7400g Plus has four function keys, with two of them replaced with [ G<>T ] (graph-table switch) and [ > ] (next menu page).  I don’t know if the [G<>T] key is used today, but it is used two switch between the graph and home screen.  Today, the command only works when the current Casio graphing calculators (like the Prizm fx-CG 10) is in the Linear Input/Output mode.

When a program is executed, the calculator is returned to the Run mode rather than stay in Program mode.  Exit program execution by pressing [AC/ON].

When Program Mode is entered, all the programs are listed chronically (when they first created).  There is no option to sort the programs alphabetically.

The fx-7400g handles calculations pretty quickly.

Programming on the fx-7400g Plus

The programming command set on the fx-7400g Plus may be scaled down, but most of the commands we expect on the Casio Graphing calculators are present.  The lack of matrices, complex numbers, and a simplified list command set does provide a challenge, but we should be able to program for a lot of applications.

To get the quotes ( “ “ ), press [ALPHA] then [ F2 ].  This is the only way to get the quotation marks.

Programming Commands Available (not exhaustive):

 [“prompt”]?  → var ◢    (right triangle) :     (colon for multiple commands) If Then [Else] IfEnd Cond ⇒ do if true: next Do commands LpWhile cond While cond commands WhileEnd Dsz  var:  do if var ≠ 0: stmts  (-1) Isz var:  do if var  ≠ 0:  stmts   (+1) Goto,  Lbl Break   (break from loops) Prog “filename” (subroutines) Return Stop ClrGraph ClrList ClrText DrawStat DrawGraph DrawTable

Fortunately any of the programs created on the fx-7400g Plus can be translated literally to later Casio graphing calculators.

I will present programs on next blog entry.

Final Verdict

The fx-7400g Plus is not a bad entry-level calculator.  The early version is more an old-school graphing calculator.

The updated fx-7400gII Casio now includes integral, polar graphing, base calculations, and complex numbers.  ( Link:  https://edu.casio.com/products/graphic/fx7400g2/ )

Happy Thanksgiving!

Eddie

This blog is property of Edward Shore, 2016.

## Saturday, November 19, 2016

### HP Prime and TI-84 Plus: Method of Equal Proportions: Number of U.S. Representatives

HP Prime and TI-84 Plus:  Method of Equal Proportions:  Number of U.S. Representatives

Introduction

The 2016 United States Elections still fresh on the minds of some Americans, even with talk of repealing the Electoral College.  But how does the Electoral College work?

Each of the 50 states receives a set amount of electoral votes, which is based on the number of House Representatives and Senate members.  Each state gets two Senators. The number of House Representatives is determined by popular.  Every ten years, specifically 1990, 2000, 2010, 2020, and so on, the United States takes nationwide census.  That population becomes the basis of determining the number of House of Representatives.   Currently, there are 435 members of the House.

After the election, each state gives the set number of electoral votes to the candidate who wins the popular vote in that state.  For example, California, where I’m from, has 55 electoral votes.  If Candidate A wins by popular vote in California, that candidate gets 55 votes.  The exceptions are Maine and Nebraska, which use a congressional district method.

Note:  In the Electoral College, 3 additional votes goes to the District of Columbia.  However, since D.C. is not a state, it won’t get seats in the House of Representatives.

The Method of Equal Proportions: Determining the Number of Seats

In order to represent the population as fair as possible, methods must be used to distribute the number of seats.  The method currently used is the Method of Equal Proportions, which has been in use since 1940.

The first step is to give each state one seat at the House of Representatives.  For the United States, after each state gets one seat, there are 385 seats to assign.

The population of the states are recalculated by the following formula:

A_n = P / √(m * (m + 1))

where P = the state population, and m = the next potential seat (so for example, if the state currently has 5 seats, m = 6)

A recursive method, the method used in the program EQPROP is used:

A_1 = P / √2

A_n+1 = A_n * √(n/(n+2))

where n = the number the seats the state currently has

Example:  Small Hypothetical Nation

Suppose we have a small hypothetical nation, called the Country of Celestia that consists of five states.  The government is similar to the United States, having both a House and Senate.  Each state has 2 Senators.  The five states have the following population for which 24 seats need to be distributed:

 Virgo 148,000 Andromeda 107,500 Orion 95,500 Sagittarius 95,000 Pegasus 93,000 Total 539,000

As the first step, each state gets 1 seat.  That means there are 19 seats remaining. (24  - 5)  I am going to use the recursive definition.

We need to adjust the population (to determine the priority number) by dividing each population by √2.  Note:  calculations in this example are rounded to the nearest integer.

 Virgo 104,652 1 Andromeda 76,014 1 Orion 67,259 1 Sagittarius 67,175 1 Pegasus 65,761 1

The next seat (6 out of 24), will go to Virgo because Virgo has the highest adjusted population.  Then Virgo’s next adjusted population will be:  104,652 * √(1/3) = 60,421

 Virgo 60,421 2 Andromeda 76,014 1 Orion 67,259 1 Sagittarius 67,175 1 Pegasus 65,761 1

Seat #7, goes to Andromeda, because Andromeda now has the largest adjusted population at 76,014.  Adjusting the population:  76,014 * √(1/3) = 43,887, and Andromeda gets another seat.

After 7 seats, this is what the adjusted population looks like:

 Virgo 60,421 2 Andromeda 43,887 2 Orion 67,259 1 Sagittarius 67,175 1 Pegasus 65,761 1

We continue:
 Virgo Andromeda Orion Sagittarius Pegasus Seat # Adj. Pop. # Seats Adj. Pop. # Seats Adj. Pop. # Seats Adj. Pop. # Seats Adj. Pop. # Seats 8 60421 2 43887 2 38832 2 67175 1 65761 1 9 60421 2 43887 2 38832 2 38784 2 65761 1 10 60421 2 43887 2 38832 2 38784 2 37967 2 11 42724 3 43887 2 38832 2 38784 2 37967 2 12 42724 3 31033 3 38832 2 38784 2 37967 2 13 33094 4 31033 3 38832 2 38784 2 37967 2 14 33094 4 31033 3 27458 3 38784 2 37967 2 15 33094 4 31033 3 27458 3 27424 3 37967 2 16 33094 4 31033 3 27458 3 27424 3 26847 3 17 27021 5 31033 3 27458 3 27424 3 26847 3 18 27021 5 24038 4 27458 3 27424 3 26847 3 19 27021 5 24038 4 21269 4 27424 3 26847 3 20 27021 5 24038 4 21269 4 21243 4 26847 3 21 22837 6 24038 4 21269 4 21243 4 26847 3 22 22837 6 24038 4 21269 4 21243 4 20796 4 23 22837 6 19627 5 21269 4 21243 4 20796 4 24 19777 7 19627 5 21269 4 21243 4 20796 4

Final Distribution for Celestia (our example):  Virgo, 7 House seats, Andromeda, 5 House seats, Orion, Sagittarius, and Pegasus get 4 each.

On to the programming!

The Program EQPROP

The program EQPROP takes two arguments:  the list of populations, and the number of House of Representative seats to be assigned.  The program assumes that two Senators will also be assigned.

Output:  A matrix of three columns:
Column 1:  The population of each state.  The population is sorted in descending order.
Column 2:  The number of House Representatives.
Column 3:  The number of House Representatives plus the 2 senators.

For the TI-84 Plus:  L1 is used as the population list, lists L2, L3, and L4 are used for calculations, and the results are returned in Matrix [A].

HP Program EQPROP

EXPORT EQPROP(lp,n)
BEGIN
// Method of equal proportions
// 2016-11-18 EWS
// population, no of seats

LOCAL la,s,lr,k,m,p,w;

// initialization
lp:=REVERSE(SORT(lp));
la:=lp/√2;
s:=n-SIZE(lp);
lr:=MAKELIST(1,X,1,SIZE(lp));

// loop
FOR k FROM s DOWNTO 1 STEP 1 DO
m:=MAX(la);
p:=POS(la,m);
w:=lr(p);
la(p):=la(p)*√(w/(w+2));
lr(p):=w+1;
END;

// output, organize matrix
// [population, senate, + house]
LOCAL l2,m2,l3;
l3:=lr+2;
l2:={lp,lr,l3};
l2:=TRN(list2mat(l2,3));
m2:=l2(1);
RETURN m2;

END;

TI-84 Plus Program EQPROP

"EQUAL PROPORTIONS"
"2016-11-18 EWS"
Input "POP. LIST: ",L
Input "NO. OF SEATS: ",N
SortD(L)
L→L
N-dim(L)→S
L→L
Fill(1,L)
L/√(2)→L
"LOOP"
For(K,S,1,­1)
max(L)→M
"POS"
1→P
While L(P)≠M
1+P→P
End
"REST"
L(P)→W
L(P)*√(W/(W+2))→L(P)
W+1→L(P)
End
"OUTPUT"
L+2→L
List>matr(L,L,L,[A])
Pause [A]

Sources:

Burnett, Kristin D.  “Congressional Apportionment:  2010 Census Briefs”  U.S. Census Bureau.  November 2011.  Download the PDF file here:  http://www.census.gov/library/publications/2011/dec/c2010br-08.html

Wikipedia   “Electoral College (United States)”  https://en.wikipedia.org/wiki/Electoral_College_(United_States)  Retrieved November 16, 2016

Wikipedia “United States Congressional Apportionment”  https://en.wikipedia.org/wiki/United_States_congressional_apportionment#cite_note-22   Retrieved November 16, 2016

This blog is property of Edward Shore, 2016

### Matrices in Python without Numpy: Part 1

Matrices in Python without Numpy:  Part 1 Introduction Python is a wonderful programming language and is a welcome addition to graphing calc...