Learn Physics with Functional Programming: A Hands-on Guide to Exploring Physics with Haskell by Scott N. Walck, ISBN-13: 978-1718501669
[PDF eBook eTextbook] – Available Instantly
- Publisher: ? No Starch Press (January 31, 2023)
- Language: ? English
- ISBN-10: ? 1718501668
- ISBN-13: ? 978-1718501669
Deepen your understanding of physics by learning to use the Haskell functional programming language.
Learn Physics with Functional Programming is your key to unlocking the mysteries of theoretical physics by coding the underlying math in Haskell.
You’ll use Haskell’s type system to check that your code makes sense as you deepen your understanding of Newtonian mechanics and electromagnetic theory, including how to describe and calculate electric and magnetic fields.
As you work your way through the book’s numerous examples and exercises, you’ll learn how to:
Table of Contents:
Cover Page
Title Page
Copyright Page
Dedication
About the Author
About the Technical Reviewer
Brief Contents
Contents in Detail
ACKNOWLEDGMENTS
INTRODUCTION
Who This Book Is For
Why Functional Programming, and Why Haskell?
About This Book
PART I A HASKELL PRIMER FOR PHYSICISTS
1 CALCULATING WITH HASKELL
A Kinematics Problem
The Interactive Compiler
Numeric Functions
Operators
Precedence and Associativity
The Application Operator
Functions with Two Arguments
Numbers in Haskell
Negative Numbers in Haskell
Decimal Numbers in Haskell
Exponential Notation
Approximate Calculation
Errors
Getting Help and Quitting
More Information
Summary
Exercises
2 WRITING BASIC FUNCTIONS
Constants, Functions, and Types
How We Talk About Functions
Anonymous Functions
Composing Functions
Variable Not in Scope Error
Summary
Exercises
3 TYPES AND ENTITIES
Basic Types
The Boolean Type
The Character Type
The String Type
Numeric Types
Function Types
Summary
Exercises
4 DESCRIBING MOTION
Position and Velocity on an Air Track
Types for Physical Quantities
Introducing Derivatives
Derivatives in Haskell
Modeling the Car’s Position and Velocity
Modeling Acceleration
Approximate Algorithms and Finite Precision
Summary
Exercises
5 WORKING WITH LISTS
List Basics
Selecting an Element from a List
Concatenating Lists
Arithmetic Sequences
List Types
Functions for Lists of Numbers
When Not to Use a List
Type Variables
Type Conversion
The Length of Lists
A String Is a List of Characters
List Comprehensions
Infinite Lists
List Constructors and Pattern Matching
Summary
Exercises
6 HIGHER-ORDER FUNCTIONS
How to Think About Functions with Parameters
Mapping a Function Over a List
Iteration and Recursion
Anonymous Higher-Order Functions
Operators as Higher-Order Functions
Combinators
Predicate-Based Higher-Order Functions
Numerical Integration
Introducing Integrators
Digital Integration
Implementing Antiderivatives
Summary
Exercises
7 GRAPHING FUNCTIONS
Using Library Modules
Standard Library Modules
Other Library Modules
Plotting
Function Only
Function and Module
Function, Module, and Plot Definition
Summary
Exercises
8 TYPE CLASSES
Type Classes and Numbers
Type Classes from the Prelude
The Eq Type Class
The Show Type Class
The Num Type Class
The Integral Type Class
The Ord Type Class
The Fractional Type Class
The Floating Type Class
Exponentiation and Type Classes
Sections
Example of Type Classes and Plotting
Summary
Exercises
9 TUPLES AND TYPE CONSTRUCTORS
Pairs
Currying a Function of Two Variables
Triples
Comparing Lists and Tuples
Maybe Types
Lists of Pairs
Tuples and List Comprehensions
Type Constructors and Kinds
Numerical Integration Redux
Summary
Exercises
10 DESCRIBING MOTION IN THREE DIMENSIONS
Three-Dimensional Vectors
Coordinate-Free Vectors
Geometric Definition of Vector Addition
Geometric Definition of Scaling a Vector
Geometric Definition of Vector Subtraction
Geometric Definition of Dot Product
Geometric Definition of Cross Product
Derivative of a Vector-Valued Function
Coordinate Systems
Vector Addition with Coordinate Components
Vector Scaling with Coordinate Components
Vector Subtraction with Coordinate Components
Dot Product with Coordinate Components
Cross Product with Coordinate Components
Derivative with Coordinate Components
Kinematics in 3D
Defining Position, Velocity, and Acceleration
Two Components of Acceleration
Projectile Motion
Making Your Own Data Type
Single Data Constructor
Multiple Data Constructors
Defining a New Data Type for 3D Vectors
Possible Implementations
Data Type Definition for Vec
Vec Functions
Summary
Exercises
11 CREATING GRAPHS
Title and Axis Labels
Other Labels
Plotting Data
Multiple Curves on One Set of Axes
Controlling the Plot Ranges
Making a Key
Summary
Exercises
12 CREATING STAND-ALONE PROGRAMS
Using GHC to Make a Stand-Alone Program
Hello, World!
A Program That Imports Modules
Using Cabal to Make a Stand-Alone Program
Using Stack to Make a Stand-Alone Program
Summary
Exercises
13 CREATING 2D AND 3D ANIMATIONS
2D Animation
Displaying a 2D Picture
Making a 2D Animation
Making a 2D Simulation
3D Animation
Displaying a 3D Picture
Making a 3D Animation
Making a 3D Simulation
Summary
Exercises
PART II EXPRESSING NEWTONIAN MECHANICS AND SOLVING PROBLEMS
14 NEWTON’S SECOND LAW AND DIFFERENTIAL EQUATIONS
Newton’s First Law
Newton’s Second Law in One Dimension
Second Law with Constant Forces
Second Law with Forces That Depend Only on Time
Air Resistance
Second Law with Forces That Depend Only on Velocity
Euler Method by Hand
Euler Method in Haskell
The State of a Physical System
Second Law with Forces That Depend on Time and Velocity
Method 1: Produce a List of States
Method 2: Produce a Velocity Function
Example: Pedaling and Coasting with Air Resistance
Euler Method by Hand
Method 1: Produce a List of States
Method 2: Produce a Velocity Function
Summary
Exercises
15 MECHANICS IN ONE DIMENSION
Introductory Code
Forces That Depend on Time, Position, and Velocity
A General Strategy for Solving Mechanics Problems
Solving with Euler’s Method
Producing a List of States
Position and Velocity Functions
A Damped Harmonic Oscillator
Euler Method by Hand
Method 1: Producing a List of States
Method 2: Producing Position and Velocity Functions
Euler-Cromer Method
Solving Differential Equations
Generalizing the State Space
Type Classes for State Spaces
One More Numerical Method
Comparison of Numerical Methods
Summary
Exercises
16 MECHANICS IN THREE DIMENSIONS
Introductory Code
Newton’s Second Law in Three Dimensions
The State of One Particle
Solving Newton’s Second Law
One-Body Forces
Earth Surface Gravity
Gravity Produced by the Sun
Air Resistance
Wind Force
Force from Uniform Electric and Magnetic Fields
State Update for One Particle
Preparing for Animation
Two Helpful Animation Functions
How the Functions Work
Summary
Exercises
17 SATELLITE, PROJECTILE, AND PROTON MOTION
Satellite Motion
State-Update Function
Initial State
Time-Scale Factor
Animation Rate
Display Function
Projectile Motion with Air Resistance
Calculating a Trajectory
Finding the Angle for Maximum Range
2D Animation
3D Animation
Proton in a Magnetic Field
Summary
Exercises
18 A VERY SHORT PRIMER ON RELATIVITY
A Little Theory
A Replacement for Newton’s Second Law
Response to a Constant Force
Proton in a Magnetic Field
Summary
Exercises
19 INTERACTING PARTICLES
Newton’s Third Law
Two-Body Forces
Universal Gravity
Constant Repulsive Force
Linear Spring
Central Force
Elastic Billiard Interaction
Internal and External Forces
The State of a Multi-Particle System
State Update for Multiple Particles
Implementing Newton’s Second Law
Numerical Methods for Multiple Particles
Composite Functions
Summary
Exercises
20 SPRINGS, BILLIARD BALLS, AND A GUITAR STRING
Introductory Code
Two Masses and Two Springs
Forces
Animation Functions
Stand-Alone Animation Program
Using Mechanical Energy as a Guide to Numerical Accuracy
A Collision
Data Representations
Spring Constant and Time Step
Momentum and Energy Conservation
Numerical Issues
Animated Results
Wave on a Guitar String
Forces
State-Update Function
Initial State
Stand-Alone Program
Asynchronous Animation
Summary
Exercises
PART III EXPRESSING ELECTROMAGNETIC THEORY AND SOLVING PROBLEMS
21 ELECTRICITY
Electric Charge
Coulomb’s Law
Two Charges Interacting
Looking at Extremes
Modeling the Situation in Haskell
Summary
Exercises
22 COORDINATE SYSTEMS AND FIELDS
Polar Coordinates
Cylindrical Coordinates
Spherical Coordinates
Introductory Code
A Type for Position
Defining the New Type
Making a Position
Using a Position
Displacement
The Scalar Field
The Vector Field
Functions for Visualizing Scalar Fields
3D Visualization
2D Visualization
Functions for Visualizing Vector Fields
3D Visualization
2D Visualization
Gradient Visualization
Summary
Exercises
23 CURVES, SURFACES, AND VOLUMES
Introductory Code
Curves
Parameterizing Curves
Examples of Curves
Surfaces
Parameterizing Surfaces
Examples of Surfaces
Orientation
Volumes
Summary
Exercises
24 ELECTRIC CHARGE
Charge Distributions
Introductory Code
A Type for Charge Distribution
Examples of Charge Distributions
Total Charge
Total Charge of a Line Charge
Total Charge of a Surface Charge
Total Charge of a Volume Charge
Calculating Total Charge in Haskell
Electric Dipole Moment
Summary
Exercises
25 ELECTRIC FIELD
What Is an Electric Field?
Introductory Code
Charge Creates an Electric Field
Electric Field Created by a Point Charge
Electric Field Created by Multiple Charges
Electric Field Created by a Line Charge
Electric Field Created by a Surface Charge
Electric Field Created by a Volume Charge
Scalar Integrals
Scalar Line Integral
Scalar Surface Integral
Scalar Volume Integral
Approximating Curves, Surfaces, and Volumes
Approximating a Curve
Approximating a Surface
Approximating a Volume
Summary
Exercises
26 ELECTRIC CURRENT
Current Distributions
Introductory Code
A Type for Current Distribution
Examples of Current Distributions
Conservation of Charge and Constraints on Steady Current Distributions
Magnetic Dipole Moment
Summary
Exercises
27 MAGNETIC FIELD
A Simple Magnetic Effect
Introductory Code
Current Creates Magnetic Field
Magnetic Field Created by a Line Current
Magnetic Field Created by a Surface Current
Magnetic Field Created by a Volume Current
Summary
Exercises
28 THE LORENTZ FORCE LAW
Introductory Code
Statics and Dynamics
State of One Particle and Fields
Lorentz Force Law
Do We Really Need an Electric Field?
State Update
Animating a Particle in Electric and Magnetic Fields
Uniform Fields
Classical Hydrogen
Summary
Exercises
29 THE MAXWELL EQUATIONS
Introductory Code
The Maxwell Equations
Relationships Between Electricity and Magnetism
Connection to Coulomb’s Law and Biot-Savart Law
State Update
Spatial Derivatives and the Curl
A Naive Method
The FDTD Method
The Yee Cell
A Type for State
FDTD and the Curl
State Update
Animation
Current Density
Grid Boundary
Display Function
Two Helping Functions
Main Program
Summary
Exercises
APPENDIX: INSTALLING HASKELL
Installing GHC
Installing a Text Editor
Installing Gnuplot
Installing Haskell Library Packages
Using Cabal
Using Stack
Installing Gloss
Installing Diagrams
Setting Up Your Coding Environment
What We Want in a Coding Environment
All Code in One Directory
One Way to Use Stack
Summary
BIBLIOGRAPHY
INDEX
Scott N. Walck has a PhD in Physics from Lehigh University and has been a professor of physics, including computational physics, to undergraduates for over 20 years at Lebanon Valley College. He has also written academic articles and given talks on the use of functional programming in teaching physics.
What makes us different?
• Instant Download
• Always Competitive Pricing
• 100% Privacy
• FREE Sample Available
• 24-7 LIVE Customer Support
Reviews
There are no reviews yet.