# Write two functions in Julia!¶

We will write two functions in Julia to demonstrate how they work.

The first function is sumdiff, which will sum up of differences between two vectors

In [9]:
# this bit is all a comment / string.
"""
sumdiff
=========
computes the sum of differences between two vectors
without creating a third vector in the middle.

Functions
---------
- sumdiff(x,y) Computes the sum of x-y where x and y are vectors

Example
-------
~~~~
x = [1 2 3]
y = [3 2 1]
@show sumdiff(x,y)
~~~~
"""
function sumdiff(x,y)
n = length(x)
@assert length(y) == n
d = 0.
for i=1:n
d += x[i] - y[i]
end
return d
end

Out[9]:
sumdiff (generic function with 1 method)
In [2]:
?sumdiff

search: sumdiff


Out[2]:

# sumdiff¶

computes the sum of differences between two vectors without creating a third vector in the middle.

## Functions¶

• sumdiff(x,y) Computes the sum of x-y where x and y are vectors

## Example¶

x = [1 2 3]
y = [3 2 1]
@show sumdiff(x,y)
In [3]:
x = [1 2 3]
y = [3 2 1]
@show sumdiff(x,y)

sumdiff(x,y) = 0.0

Out[3]:
0.0
In [4]:
sum(x-y)

Out[4]:
0
In [10]:
sumdiff([1,2,3,4,5,7,8,9],[1 2 3 4 5])

LoadError: AssertionError: length(y) == n
while loading In[10], in expression starting on line 1

in sumdiff at In[9]:22
In [18]:
"""
diagsolve
===========

This function will pretend an input matrix is diagonal and solve the linear system
Ax = b

Function
--------
* diagsolve(A,b) takes an input matrix A and a vector b and only uses the diagonal elements of b

Examples
--------
~~~~
A = diagm(randn(5))
b = ones(5)
@show x = diagsolve(A,b)
@show y = A\b  # this should be the same thing
~~~~
"""
function diagsolve(A,b)
x = zeros(length(b))
for i=1:length(b)
x[i] = b[i] / A[i,i]
end
return x
end
A = diagm([2,3,4.])
b = [1. 1. 1.]
diagsolve(A,b)

Out[18]:
3-element Array{Float64,1}:
0.5
0.333333
0.25