X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=blobdiff_plain;f=run-tests.m;h=2ad4c2462b06f1203134c5576aaecde217db9f98;hp=aa285c32e38fb3f70747a75402e57ef6a8515ed2;hb=99b641383e285ba62808678be74077485a61e024;hpb=13bba59d9d3cc9a508deef1e0f6176cfab73fbcd diff --git a/run-tests.m b/run-tests.m index aa285c3..2ad4c24 100755 --- a/run-tests.m +++ b/run-tests.m @@ -43,11 +43,11 @@ unit_test_equals("2 is even", ... true, ... even(2)); -expected_A = [1, 0, 0, 0, 0; ... - 16, -32, 16, 0, 0; ... - 0, 16, -32, 16, 0; ... - 0, 0, 16, -32, 16; ... - 0, 0, 0, 0, 1]; +expected_A = [-1, 0, 0, 0, 0; ... + -16, 32, -16, 0, 0; ... + 0, -16, 32, -16, 0; ... + 0, 0, -16, 32, -16; ... + 0, 0, 0, 0, -1]; unit_test_equals("Homework #1 problem #1 Poisson matrix is correct", ... true, ... expected_A == poisson_matrix(4, 0, 1)); @@ -72,3 +72,46 @@ expected_fp = [1.0729, 1.0821]; unit_test_equals("Homework #3 problem #3i fixed point is correct", ... expected_fp, ... fixed_point_method(my_g, tol, u0)); + + +f = @(x) x^6 - x - 1; +f_prime = @(x) 6*x^5 - 1; +tol = 1/1000000; +x0 = 2; +expected_root = 1.1347; +unit_test_equals("Newton's method agrees with Haskell", ... + expected_root, ... + newtons_method(f, f_prime, tol, x0)); + + + +f1 = @(u) u(1)^2 + u(1)*u(2)^3 - 9; +f2 = @(u) 3*u(1)^2*u(2) - u(2)^3 - 4; +f = @(u) [f1(u); f2(u)]; +## The partials for the Jacobian. +f1x = @(u) 2*u(1) + u(2)^3; +f1y = @(u) 3*u(1)*u(2)^2; +f2x = @(u) 6*u(1)*u(2); +f2y = @(u) 3*u(1)^2 - 3*u(2)^2; +## f_prime == Jacobian. +f_prime = @(u) [ f1x(u), f1y(u); f2x(u), f2y(u) ]; +tol = 1 / 10^12; +u0 = [1.2; 2.5]; +expected_root = [1.33635; 1.75424]; +[actual_root, iterations] = newtons_method(f, f_prime, tol, u0); +unit_test_equals("Homework #3 problem #4 root is correct", ... + expected_root, ... + actual_root); + + + +f = @(x,y) y; +x0 = 0; +y0 = 1; +h = 1; +actual_y = forward_euler1(x0, y0, f, h); +expected_y = 2; + +unit_test_equals("Forward Euler works for one step", ... + expected_y, ... + actual_y);