I'm looking to buy a house. Here in Seattle, you can buy a condo for about
$250,000, or you can splurge to get a house on a bit of land for
$350,000. Let's splurge...
price = $350,000 down payment = 20% * price => $70,000 finance amount = price - down payment => $280,000 interest rate = 3.7%/year term = 30year n = term * 12/year => 360 r = interest rate / (12/year) => 0.0031 monthly payment = r/(1 - (1 + r)^(-n)) * finance amount => $1,288.7924
Looks like if I don't mind dropping
$70,000, I can get a nice place for about
$1,300 a month.
Try editing the price and interest rate to see how much your dream home will cost.
Here is my budget, how is yours different? Just change any of the numbers to match your life.
expenses = rent + car + office + other rent = $750 + utils utils = $200 car = $400 office = $1,300 + parking parking = $120 other = $1200 expenses => $3,970 daily expenses = expenses/30day => $132.3333/day
Now let's look at my income. I have a job and do a little gambling on the side:
income = (job + gambling) * (100% - income tax rate) income tax rate = 33% job = $100,000/12 => $8,333.3333 gambling = -$100 daily income = income / 30day => $183.8778/day
Let's see how profitable each day has been:
daily profit = daily income - daily expenses => $51.5444/day
Wow, I'm making money every day. Great! I wonder how long until I'm a millionaire?
time til millionaire = $1,000,000/(daily profit * 365day/years) => 53.1527years
That's too long... What if I made more money?
time til millionaire(job = $8,000) => 62.1253years time til millionaire(job = $16,000) => 12.2986years time til millionaire(job = $32,000) => 4.7229years time til millionaire(job = $64,000) => 2.116years time til millionaire(job =$128,000) => 1.0057years
So, if I just make
$128,000 per month, I will be a millionaire in just over a year! Time to start looking!
The square of the hypotenuse of a triangle is equal to the sum of the squares of its legs.
a^2 + b^2 = c^2
Let's imagine that to get to work I have to drive
5miles north then
8miles east to get to work. How far is it as the crow flies?
c(a=5miles, b=8miles) => 9.434miles
Arithmetic using Logarithms
Back before Calca, scientists and engineers had to do math using long hand. This is easy enough, but gets quite tedious. Thankfully we have computers now.
These engineers and scientists used a mathematical identity to make their jobs easier.
log(x*y, b) => log(x, b) + log(y, b) log(x/y, b) => log(x, b) - log(y, b)
When they needed to multiply large complicated numbers, they were smart and kept those numbers in the logarithm form. Then they could simply add those numbers. The same trick worked for multiplication.
Let's look at an example. I want to find volume of the earth.
volume = 4/3*pi * r^3 => 4.1888r^3 r = 6,378,100
I need to multiple a lot of numbers,
r three times to find the volume. Instead we'll use logarithms and addition:
log c = log10(4/3*pi) => 0.6221 log r = log10(r) => 6.8047 log volume = log c + log r + log r + log r => 21.0362 10^log volume => 10.8683e20 volume => 10.8683e20
We were able to calculate
4/3*pi * r^3 using just three additions. Pretty impressive I think!
Solving linear equations using matrices
You can use matrices to solve a set of linear equations. Let's solve the following set of equations:
12x + 13y = 163 -2x + 100y = 688
We can solve for x and y by taking the constants on the left hand side and putting them in a matrix:
a = [12, 13; -2, 100]
and by putting the right hand side into a vector:
b = [163; 688]
Now we can convert our two equations into one and solve for x and y:
a * xy = b xy => [6; 7]
Great! We now know
x = 6 and
y = 7. We can even solve other linear equations:
xy(a=[1,2;3,4],b=[3;2]) => [-4; 3.5]
Imaginary numbers are written as numbers multiplied by the imaginary unit
They are defined by the property that their squares are negative.
i^2 => -1 (5i)^2 => -25 sqrt(-1) => i sqrt(-16) => 4i sqrt(i) => 0.7071i + 0.7071
A complex number is an imaginary number added to another number:
b*i + a => b*i + a 5i - 1 => 5i - 1 -8i + 100 => -8i + 100
The complex conjugate negates the imaginary part of a complex number:
conj(5i - 1) => -5i - 1 conj(-8i + 100) => 8i + 100
You can extract the real and imaginary parts of a complex number using these very clever functions:
im(z) = 1/2i*(z - conj(z)) re(z) = 1/2*(z + conj(z)) im(-8i + 100) => -8 re(-8i + 100) => 100
The normal distribution gives the probability of a value
x occurring based on an average of all possible values called the
mean and a standard deviation
stddev of those values around that mean.
f(x) = 1/(stddev*sqrt(2*pi)) * e^-((x-mean)^2/(2*stddev^2)) f(90, mean=100, stddev=10) => 0.0242 f(100, mean=100, stddev=10) => 0.0399 f(110, mean=100, stddev=10) => 0.0242
Let's look at some data to model. Here is my population in Seattle of people's ages (not really):
ages = [28, 45, 30, 40, 34, 30, 24] n = sum(1, ages) => 7 mean = reduce(x + y, ages)/n => 33 stddev = sqrt(sum((a - mean)^2, ages)/n) => 6.7401
This means that
68% (one standard deviation) of people in Seattle are
33 years old, plus or minus about
So what's the probability on an 18 year old living in Seattle?
population of seattle = 620,778 #googled population given age = f(age) * population of seattle population given age(18) => 3,088.0792 population given age(30) => 33,278.3747
Hmm, there are only
3,000 18 year olds in Seattle - given my completely made up statistics above.
Why not modify those stats to match your home town?
Entropy of a variable is a measure of the uncertainty of its value.
H(X) = -sum(p(x)*ln(p(x)), x=X)
This function takes a set of values or messages
X and produces the entropy of that set. To do this, it needs to know the probability of a message being in
X; this information is provided by the
p function must sum to
1 for all the possible messages.
data = [A, B, C] # Maximum entropy pmax(x) = 1/3 sum(pmax, data) => 1 # NOT a good value of p because it sums to 0.75 pbad(x) = 1/4 sum(pbad, data) => 0.75 # Here is a modeled p function pmodel(x) = if x == B then 0.6 else 0.2 sum(pmodel, data) => 1
We can now calculate the entropy of the data given the various probabilities of messages:
H(data, p = pmax) => 1.0986 H(data, p = pmodel) => 0.9657
When the messages are most uncertain - they each have the same probability - the entropy is maxed out at about
1.1. If we make the number
11 most probable -
60% likelihood - then the entropy is only
If we designate one of the messages as very likely to occur then the entropy should go down since there is very little uncertainty.
# Here is a modeled p function pcertain(x) = if x == B then 0.9999 else 0.00005 sum(pcertain, data) => 1 H(data, p = pcertain) => 0.00149
Yep! H is very small now because
9,999 out of
10,000 messages will be
B - the world is certain!
Target Heart Rate
The Karvonen Method is a way to calculate your target heart rate given the intensity of a work out. It depends upon your resting and maximum heart rates.
HR = ((Maximum HR - Resting HR) * Intensity) + Resting HR Resting HR = 60bpm Maximum HR = 200bpm HR(Intensity = 80%) => 172bpm
If we know our heart rate already, we can calculate the intensity of the workout:
Intensity(HR = 120bpm) => 0.4286
Here is a classic equation for the motion of an object that is influenced by a uniform acceleration a, an initial velocity v0 and an initial position x0.
x(t) = 1/2 * a * t^2 + v0*t + x0
We're going to define the parameters of this model using units. That way we can make sure we're calculating everything correctly.
a = -9.8m/s/s v0 = 100m/s x0 = 490m x => -4.9m*t^2/s^2 + 100m*t/s + 490m
Let's see what it looks like over a 30 second period:
x(1s) => 585.1m x(10s) => 1000m x(20s) => 530m x(30s) => -920m
We need to make sure to specify the time with the units
s, otherwise we'll get a bad result:
x(1) => -4.9m/s^2 + 100m/s + 490m
Units of Motion and Power
The velocity of an object is measured in meters
m per second
velocity units = m / s
Its acceleration is the change in velocity over time:
accel units = velocity units / s
Isaac Newton tells us that all objects have a constant velocity (
a = 0) unless acted upon by a force. This force is measured by multiplying the mass of the moving object (in kg) by the acceleration caused by the force. It's measured in, appropriately enough, Newtons:
N = kg * accel units => kg*m/s^2
If we apply a force over a distance (imagine pushing your car), then are said to have done work (so long as the object accelerates in the direction we're pushing!). Work is measured in Joules:
J = N*m => kg*m^2/s^2
There is another quantity called energy that is measured in Joules. Energy is the capacity for doing work. In every day speech, we use energy instead of work since work has a lot of real world connotations that are best left ignored.
The change in energy over time is called power and is measured in Watts.
W = J/s => kg*m^2/s^3
Voltage and Current:
V = J/C => kg*m^2/(s^2*C) A = C/s => C/s V*A => kg*m^2/s^3
Let's start with Newton's Law that force is proportional to acceleration:
force = mass * accel
When I'm standing on earth, it is constantly accelerating me so that I stay glued to the ground. That acceleration is called standard gravity.
g = 9.80665 m/s^2
Now some personal info:
weight = 165lbs kg per pound = 0.453592kg/lbs #googled weight in kg = weight * kg per pound => 74.84268kg
With that out of the way, we can measure the force that the earth exerts on me:
earth force = force(weight in kg, g) => 733.955968kg*m/s^2
That was fun! We now know that the earth exerts
734 N of force on me. All the time. But we love her anyway.
Change the values in blue above to find out how much she exerts on you!
Newton's Universal Gravitation
Previously, we used the fact that the earth constantly accelerates us at the rate
g to keep us on the ground.
g => 9.80665m/s^2
But where did this number come from? We can use Newton's Law of Universal Gravitation to calculate it. Here's that law:
force of gravity = G*(mass * other mass)/dist^2
It states that the force due to gravity is proportional to the masses of two objects and inversely proportional to the squared distance between them.
The constant of proportionality is
G - a very different number from the
g we knew before. It is:
G = 6.67384e-11 m^3/kg/s^2 #gravitational constant
Let's now use the law to calculate that value of
g = 9.8m/s^2 from above. We'll do it by using the mass of the earth and the ma
mass of earth = 5.972e24 kg #googled radius of earth = 6,378,100 m #googled earth gravity = force of gravity( other mass = mass of earth, dist = radius of earth) => 9.79745m*mass/s^2
And there it is! Well it's not quite
9.81m/s but that's just because our input numbers for earth's mass and radius weren't exactly what is used to calculate standard gravity, but it's darn close!
How close is it? Well let's give it our mass and see how close to
734 N it gets:
earth gravity(mass = weight in kg) => 733.267222m*kg/s^2
So close! It calculated
Why not try changing the numbers to see how much gravity would affect you if you lived on mars?
Ohm's law is fundamental to understanding electronics. It states that the current
i through a conductor is proportional to the voltage
v across it.
v = i * r i => v/r
We can use it directly to measure that voltage:
v(i = 2A, r = 100Ohm) => 200A*Ohm
Oops, it would be better if we told Calca about Amperes:
A = V/Ohm v(i = 2A, r = 100Ohm) => 200V
We can use Ohm's Law to solve for any of three variables using any of the other two:
v(i = 2A, r = 100Ohm) => 200V i(v = 200V, r = 100Ohm) => 2V/Ohm r(v = 200V, i = 2A) => 100Ohm
The current through a capacitor is proportional to the rate of change of the voltage across it:
ic(t) = C*der(v(t), t)
We can see the common property that the capacitor causes a 90 degree phase shift in current when its voltage is AC:
ic(t, v=sin(t)) => C*cos(t)
Now you can define logic functions, here is an implementation of exclusive or:
xor(a, b) = if a then !b else b xor(0, 0) => 0 xor(1, 0) => 1 xor(0, 1) => 1 xor(1, 1) => 0 half adder(a, b) = [xor(a,b), a && b] half adder(0, 0) => [0, 0] half adder(0, 1) => [1, 0] half adder(1, 0) => [1, 0] half adder(1, 1) => [0, 1]
Those are pretty cool, huh? We can use them to create a full adder.
adder(a, b, c) = let ab = half adder(a, b) in let abc = half adder(ab, c) in [abc, abc || ab] adder(0, 0, 0) => [0, 0] adder(0, 0, 1) => [1, 0] adder(0, 1, 0) => [1, 0] adder(0, 1, 1) => [0, 1] adder(1, 0, 0) => [1, 0] adder(1, 0, 1) => [0, 1] adder(1, 1, 0) => [0, 1] adder(1, 1, 1) => [1, 1]