Commit 14a62e57 authored by Sander Mathijs van Veen's avatar Sander Mathijs van Veen

Solved merge conflicts.

parents c1a1a0c1 60348742
......@@ -2,3 +2,4 @@ test
main
*.sgv
*.png
*.data
CFLAGS=-Wall -Wextra -pedantic -std=c99 -D_GNU_SOURCE -g -O0
CFLAGS=-Wall -Wextra -pedantic -std=c99 -D_GNU_SOURCE -g -ggdb -O0
LDFLAGS=-lm
PROGS=test main
......
./main 0
cat report/osc_euler | ./plot.py report/osc_euler.pdf
cat report/osc_rk2 | ./plot.py report/osc_rk2.pdf
cat report/osc_rk4 | ./plot.py report/osc_rk4.pdf
#rm report/osc_euler report/osc_rk2 report/osc_rk4
cat osc_euler.data | ./plot.py report/osc_euler.pdf
cat osc_rk2.data | ./plot.py report/osc_rk2.pdf
cat osc_rk4.data | ./plot.py report/osc_rk4.pdf
rm *.data
......@@ -35,6 +35,7 @@ int main(int argc, char **argv) {
case 0:
y0[0] = 10.0;
y0[1] = 20.0;
<<<<<<< HEAD
logger_open("report/osc_euler");
puts("Integrating Euler method...");
INTEGRATE(Euler, .0, 100.0, COMPARE_DT, 2, osc);
......@@ -44,6 +45,17 @@ int main(int argc, char **argv) {
INTEGRATE(RungeKutta2, .0, 100.0, COMPARE_DT, 2, osc);
logger_close();
logger_open("report/osc_rk4");
=======
logfile = fopen("osc_euler.data", "w");
puts("Integrating Euler method...");
INTEGRATE(Euler, .0, 100.0, COMPARE_DT, 2, osc);
logger_close();
logfile = fopen("osc_rk2.data", "w");
puts("Integrating Runge-Kutta 2 method...");
INTEGRATE(RungeKutta2, .0, 100.0, COMPARE_DT, 2, osc);
logger_close();
logfile = fopen("osc_rk4.data", "w");
>>>>>>> 6034874266b42027b60f69f6ee27e8add52cd8be
puts("Integrating Runge-Kutta 4 method...");
INTEGRATE(RungeKutta4, .0, 100.0, COMPARE_DT, 2, osc);
break;
......
.PHONY: all clean
all:
clean:
rm -vf *.pyc q*.pdf
from pylab import array, eig, diagflat, dot, sqrt, randn, tile, \
plot, subplot, axis, figure, clf, savefig
# The used mu (mean vector) and cov (covariance matrix).
mu = array([[3],
[4],
[5],
[6]])
[4],
[5],
[6]])
cov = array(
[[ 3.01602775, 1.02746769, -3.60224613, -2.08792829],
......@@ -12,10 +13,14 @@ cov = array(
[-3.60224613, -3.98616664, 13.04508284, -1.59255406],
[-2.08792829, 0.48723704, -1.59255406, 8.28742469]])
# Samples is the constant `N' which is the total amount of numbers to generate
# according to the normal distribution.
samples = 1000
vector_size = 4
def dataset():
# The covariance matrix is used to transform the generated dataset into a
# multivariant normal distribution dataset.
d, U = eig(cov)
L = diagflat(d)
A = dot(U, sqrt(L))
......@@ -23,11 +28,13 @@ def dataset():
return dot(A,X) + tile(mu, samples)
if __name__ == '__main__':
# Create a n*n grid of subplots and generate a new dataset.
figure(vector_size**2)
clf()
Y = dataset()
for i in range(vector_size):
for j in range(vector_size):
# Skip the diagonal subplots since those are irrelevant.
if i != j:
subplot(vector_size, vector_size, (i+1) + j*vector_size)
plot(Y[i], Y[j], 'x')
......
from q21_multivariate import dataset
from numpy import array, mean, tile, newaxis, dot
from pylab import eigvals, diagflat, axis, figure, clf, show, plot, subplot
from pylab import array, mean, tile, newaxis, dot, eigvals, \
axis, figure, clf, show, plot
def eigenvalues(n):
"""Return eigenvalues of unbiased estimators for the covariance matrix
Sigma (based on a pseudo-random generated dataset)."""
Y = array([mean(dataset(), 1) for i in range(n)]).T
# Sigma = 1 / (n - 1) * Sum for i=1 to n: (x_i - x_mean) T(x_i - x_mean),
# where T(x) is the transpose of `x'. Mu = x_mean and
# Yzm = Sum for i=1 to n: x_i - x_mean.
mu = mean(Y, 1)
Yzm = Y - tile(mu[:,newaxis], n)
S = dot(Yzm, Yzm.T) / (n - 1)
......@@ -11,14 +18,17 @@ def eigenvalues(n):
figure(1)
clf()
samples = range(2, 10000, 500)
max_range = 10000
samples = range(2, max_range, 500)
data = [[] for i in range(4)]
for n in samples:
e = eigenvalues(n)
for i in range(4):
data[i].append(e[i])
for i in range(4):
#subplot(2, 2, i+1)
plot(samples, data[i], 'x')
axis([0, 10000, 0., 0.025])
axis([0, max_range, 0., 0.025])
show()
from numpy import loadtxt
from pylab import figure, plot, subplot, show, axis, clf
from pylab import loadtxt, figure, plot, subplot, axis, clf, savefig
def cnvt(s):
try:
return {'Iris-setosa': 0.0, 'Iris-versicolor': 1.0, \
'Iris-virginica': 2.0}[s]
except KeyError:
ireturn -1.0
# The last column of the data sets is a label, which is used to distinguish the
# three groups of data in the data sets. This label should be translated to a
# floating point, or a conversion error will occur (since ``dtype=float'').
cnvt_dict = {'Iris-setosa': 0.0, 'Iris-versicolor': 1.0, 'Iris-virginica': 2.0}
data = loadtxt('iris.data', delimiter=',', dtype=float, \
converters={4: lambda s: not s in cnvt_dict and -1.0 or cnvt_dict[s]})
data = loadtxt('iris.data', delimiter=',', dtype=float, converters={4: cnvt})
# Transform the data set into plottable graph data
graph_data = [[[] for i in range(3)] for j in range(16)]
colors = ['r', 'g', 'b']
figure(16)
clf()
for i in range(4):
for j in range(4):
if i != j:
for d in data:
graph_data[i + j*4][int(d[4])].append((d[i], d[j]));
# Different colors for different data types (map these colors to cnvt_dict).
colors = ['r', 'g', 'b']
figure(16)
clf()
for i in range(4):
for j in range(4):
if i != j:
subplot(4, 4, (i+1) + j*4)
axis('equal')
# Plot the three data sets.
for c in range(3):
tmp = zip(*graph_data[i + j*4][c])
plot(tmp[0], tmp[1], 'x' + colors[c])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment