Fundamentals of Numerical Computation
These are core functions for the text Fundamentals of Numerical Computation by T. A. Driscoll and R. J. Braun (preview site). They are a companion to the Julia (2nd) edition, to be published in 2022.
For Julia versions of the functions accompanying the MATLAB (first) edition, go to https://github.com/fncbook/fnc instead.
Installation

Install Julia. Any of the available methods for the latest stable version 1.x should be fine. The Julia Pro version comes with an integrated editor and many preinstalled packages, and it might be the best choice for those not comfortable with their command line shell.

Start Julia on your machine. Look for the
julia>
prompt. 
At the prompt type the
]
character. This will turn the prompt a different color and saypkg>
, indicating that you can give commands to the package manager. 
At the
pkg
prompt, typeadd FundamentalsNumericalComputation
The process will take a while. In order to flatten the learning curve, this package loads many other standard numerical and plotting packages and makes them available, so there is a lot of code to install and compile.

Hit the backspace (delete on Mac) key to go back to the main Julia prompt. Steps 35 should only need to be done once per Julia installation.
Usage
In order to use the functions, in each new Julia session you must enter
using FundamentalsNumericalComputation
None of the functions are exported, so they must all be prefixed with the package name. However, the constant FNC
is set as an alias to the package name to make typing more reasonable, e.g., FNC.lufact
, FNC.rk23
, etc.
There is a barebones documentation site, but it only gives summaries of the documentation strings that are found in the text. The textbook is meant to be the real guide.
Startup speed
After installation, importing the package with a using
statement should only take 510 seconds in Julia 1.6 or later. The first plot created in a Julia session may take 2060 seconds to appear. This is a wellknown irritant in the Julia ecosystem, and progress is steadily being made toward reducing the lag. In the meantime, there are a few options available for power users.
PackageCompiler
The PackageCompiler
package allows you to compile a new version of the Julia binary to get better startup performance. It's not too hard to use, but it helps if you are comfortable with command line/terminal interfaces.
Minimal package version
You can speed up loading time by installing a special branch of this package. At the prompt, type the ]
character to enter package mode. If you already installed the default version, enter
rm FundamentalsNumericalComputation
Then enter
add https://github.com/fncbook/FundamentalsNumericalComputation.jl#fastload
Now, each import of this package should take ten seconds or less. However, you will need to manually install and then load packages in order to run the demos and solve many of the exercises in the book. (This is how Julia is normally used in practice.) In particular, only LinearAlgebra
, Polynomials
, SparseArrays
, and a few packages for loading files and displaying output are provided. Other packages used in the text, and their key dependents, are given in the following table.
Package name  Key dependent functions 

Arpack 
eigs 
Dierckx 
Splline1D 
DifferentialEquations 
solve 
FFTW 
fft 
GraphRecipes 
graphplot 
Images 
image loading and display, Gray 
IncompleteLU 
iLU 
IterativeSolvers 
gmres , minres , cg 
LinearMaps 
LinearMap 
MatrixDepot 
matrixdepot 
NLsolve 
nlsolve 
Plots 
plot , scatter , contour 
Preconditioners 
DiagonalPreconditioner 
QuadGK 
quadgk 
SpecialFunctions 
besselj , gamma 
TestImages 
testimage 
Alternative numerical packages
These codes are for instructional purposes. They are not recommended for applications. Compared to superior alternatives, they lack generality, efficiency, and robustness to syntax and more subtle mistakes. My personal recommendations for preferable alternatives are as follows. Most of them are demonstrated in the textbook.
Problem type  Associated Julia packages 

Linear system / least squares  LinearAlgebra (standard library) 
Sparse matrix  SparseArrays, IterativeSolvers, Arpack, Preconditioners 
Polynomial interpolation/approximation  Polynomials, ApproxFun 
Polynomial roots  Polynomials 
Rootfinding  NLsolve 
Finite differences  FiniteDifferences, FiniteDiff 
Integration  QuadGK 
Spline  Dierckx 
Initialvalue problem  DifferentialEquations 
Boundaryvalue problem  DifferentialEquations 
Method of lines  MethodOfLines (still under development) 
License
This code stored on this site is under an MIT license. Please see the LICENSE file for details.