↜ Back to index Introduction to Numerical Analysis 2
Solutions for Part b–Lecture 1
Exercise 2
implicit none
print *, maximum(1., 2.)
print *, maximum(1., 1.)
print *, maximum(1., -1.)
print *, positive_part(1.)
print *, positive_part(-2.)
contains
function maximum(x, y)
real x, y, maximum
if (x > y) then
maximum = x
else
maximum = y
end if
end
function positive_part(x)
real x, positive_part
positive_part = maximum(x, 0.)
end
endExercise 3
implicit none
real a(3), b(3)
a = [3.0, 2.5, 5.0]
b = [1.0, -3.0, 2.0]
print *, inner(a, b)
contains
function inner(x, y)
real x(:), y(:), inner
integer i
if (size(x) /= size(y)) then
stop 'arrays x and y must have the same size'
end if
inner = 0
do i = 1, size(x)
inner = inner + x(i) * y(i)
end do
end
endExercise 4
implicit none
real a(3,2), x(2)
a(1, :) = [1., -1.]
a(2, :) = [2., 3.]
a(3, :) = [6., 7.]
x = [3., -1.]
print *, mv_mul(a, x)
contains
function mv_mul(a, x)
real a(:,:), x(:), mv_mul(size(a, 1))
integer i, j
if (size(a, 2) /= size(x)) then
stop 'the number of colums of a and size x are different'
end if
do i = 1, size(a, 1)
mv_mul(i) = inner(a(i, :), x)
end do
end
function inner(x, y)
real x(:), y(:), inner
integer i
if (size(x) /= size(y)) then
stop 'arrays x and y must have the same size'
end if
inner = 0
do i = 1, size(x)
inner = inner + x(i) * y(i)
end do
end
endExercise 5
We reuse function inner from Exercise 4.
implicit none
real x(3)
x = [1., 2., -3.]
print *, norm(x)
contains
function norm(x)
real x(:), norm
norm = sqrt(inner(x, x))
end
function inner(x, y)
real x(:), y(:), inner
integer i
if (size(x) /= size(y)) then
stop 'arrays x and y must have the same size'
end if
inner = 0
do i = 1, size(x)
inner = inner + x(i) * y(i)
end do
end
end