diff +time/CdiffNonlin.m @ 1:5ae4f23d9130

Added CdiffNonlin timestepper. Probably fixed a bug with Cdiff. Added default arguments to Rk4SecondOrderNonlin.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 17 Sep 2015 19:19:58 +0200
parents 48b6fb693025
children 8e14b5a577a6
line wrap: on
line diff
--- a/+time/CdiffNonlin.m	Thu Sep 17 10:12:50 2015 +0200
+++ b/+time/CdiffNonlin.m	Thu Sep 17 19:19:58 2015 +0200
@@ -1,4 +1,4 @@
-classdef Cdiff < time.Timestepper
+classdef CdiffNonlin < time.Timestepper
     properties
         D
         E
@@ -12,23 +12,28 @@
 
 
     methods
-        function obj = Cdiff(D, E, S, k, t0, v, v_prev)
-            m = size(D,1);
-            default_arg('E',sparse(m,m));
-            default_arg('S',sparse(m,1));
+        function obj = CdiffNonlin(D, E, S, k, t0, v, v_prev)
+            default_arg('S',0);
+            default_arg('E',0);
+
+            if isnumeric(S) && S == 0
+                S = @(v)0;
+            end
 
-            if ~(issparse(D) && issparse(E) && issparse(S))
-                warning('One of the matrices D, E, S is not sparse!')
-                print_issparse(D)
-                print_issparse(E)
-                print_issparse(S)
+            if isnumeric(E) && E == 0
+                E = @(v)0;
             end
 
+
+            % m = size(D,1);
+            % default_arg('E',sparse(m,m));
+            % default_arg('S',sparse(m,1));
+
             obj.D = D;
             obj.E = E;
             obj.S = S;
             obj.k = k;
-            obj.t = t0+k;
+            obj.t = t0;
             obj.v = v;
             obj.v_prev = v_prev;
         end
@@ -44,7 +49,7 @@
         end
 
         function obj = step(obj)
-            [obj.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D, obj.E, obj.S);
+            [obj.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D(obj.v), obj.E(obj.v), obj.S(obj.v));
             obj.t = obj.t + obj.k;
             obj.n = obj.n + 1;
         end