KerMor  0.9
Model order reduction for nonlinear dynamical systems and nonlinear approximation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CoreFun2D.m
Go to the documentation of this file.
1 namespace models{
2 namespace pcdi{
3 
4 
5 /* (Autoinserted by mtoc++)
6  * This source code has been filtered by the mtoc++ executable,
7  * which generates code that can be processed by the doxygen documentation tool.
8  *
9  * On the other hand, it can neither be interpreted by MATLAB, nor can it be compiled with a C++ compiler.
10  * Except for the comments, the function bodies of your M-file functions are untouched.
11  * Consequently, the FILTER_SOURCE_FILES doxygen switch (default in our Doxyfile.template) will produce
12  * attached source files that are highly readable by humans.
13  *
14  * Additionally, links in the doxygen generated documentation to the source code of functions and class members refer to
15  * the correct locations in the source code browser.
16  * However, the line numbers most likely do not correspond to the line numbers in the original MATLAB source files.
17  */
18 
19 class CoreFun2D
20  :public models.pcdi.BaseCoreFun {
37  public:
38 
39 
40  CoreFun2D(dynsys) {
41  this = this@models.pcdi.BaseCoreFun(dynsys);
42  }
43 
44 
45  function copy = clone() {
46  copy = models.pcdi.CoreFun2D(this.System);
47 
48  /* Call superclass method */
49  copy = clone@models.pcdi.BaseCoreFun(this, copy);
50 
51  copy.nodes= this.nodes;
52  copy.hlp= this.hlp;
53  copy.idxmat= this.idxmat;
54  copy.Ji= this.Ji;
55  copy.Jj= this.Jj;
56  }
66  function newSysDimension() {
67  s = this.System;
68  n = prod(s.Dims);
69  this.nodes= n;
70  this.hlp.d1= s.Dims(1);
71  this.hlp.d2= s.Dims(2);
72 
73  this.idxmat= zeros(s.Dims(1),s.Dims(2));
74  this.idxmat(:) = 1:this.nodes;
75 
76  /* Can use the unscaled h and original Omega for computation of
77  * ranges & distances from middle */
78  this.hlp.hs= s.hs;
79  a = s.Omega;
80  this.hlp.xr= a(1,2)-a(1,1); /* xrange */
81 
82  this.hlp.yr= a(2,2)-a(2,1); /* yrange */
83 
84  this.hlp.xd= abs(((1:this.hlp.d1)-1)*this.System.h-.5*this.hlp.xr)^t; /* x distances from middle */
85 
86  this.hlp.yd= abs(((1:this.hlp.d2)-1)*this.System.h-.5*this.hlp.yr)^t; /* y distances from middle */
87 
88 
89  /* % 1=x_a, 2=y_a, 3=x_i, 4=y_i, 5=iap, 6=bar, 7=yb, 8=xb
90  * Add x_a dependencies
91  * rc(2)*xi.*ya - rc(5)*xa */
92  i = repmat(this.nodepos(1),1,3);
93  j = this.nodepos(1:3);
94  /* Add y_a dependencies
95  * rc(1)*yi.*xa - rc(6)*ya; */
96  i = [i repmat(this.nodepos(2),1,3)];
97  j = [j this.nodepos([1:2 4])];
98  /* Add x_i dependencies
99  * -rc(2)*xi.*ya - rc(9)*xi + rc(16) - rb/this.hlp.hs; */
100  i = [i repmat(this.nodepos(3),1,2)];
101  j = [j this.nodepos([2 3])];
102  /* Add y_i dependencies
103  * -rc(1)*yi.*xa - rc(10)*yi + rc(17); */
104  i = [i repmat(this.nodepos(4),1,2)];
105  j = [j this.nodepos([1 4])];
106  this.Ji= i;
107  this.Jj= j;
108  this.xDim= 4*n;
109  this.fDim= 4*n;
110  this.JSparsityPattern= sparse(i,j,ones(length(i),1),this.fDim,this.xDim);
111  }
118  function fx = evaluate(colvec<double> x,double t) {
119  if ~isempty(this.V)
120  x = this.V*x;
121  end
122 
123  /* Allocate result vector */
124  fx = zeros(size(x));
125 
126  m = this.nodes;
127  mu = this.mu;
128 
129  /* Compute activation fun values (it's set up in scaled times!) */
130  ud = this.activationFun(t,mu);
131  rc = this.System.ReacCoeff;
132 
133  /* Extract single functions */
134  xa = x(1:m);
135  xan = xa.^mu(4);
136  ya = x(m+1:2*m);
137  xi = x(2*m+1:3*m);
138  yi = x(3*m+1:4*m);
139 
140  rb = zeros(m,1);
141 
142  /* % Top & Bottom
143  * bottom */
144  pos = this.hlp.xd <= this.hlp.xr*mu(1)/2;
145  idx = this.idxmat(pos,1);
146  rb(idx) = (xi(idx)*mu(2)*ud);
147  /* top */
148  pos = this.hlp.xd <= this.hlp.xr*mu(1)/2;
149  idx = this.idxmat(pos,end);
150  rb(idx) = rb(idx) + (xi(idx)*mu(2)*ud);
151 
152  /* % Left & Right
153  * right */
154  pos = this.hlp.yd <= this.hlp.yr*mu(1)/2;
155  idx = this.idxmat(end,pos);
156  rb(idx) = rb(idx) + (xi(idx)*mu(2)*ud);
157  /* left */
158  pos = this.hlp.yd <= this.hlp.yr*mu(1)/2;
159  idx = this.idxmat(1,pos);
160  rb(idx) = rb(idx) + (xi(idx)*mu(2)*ud);
161 
162  /* Indices:
163  * km3 = 14, km8 = 15, km12 = 19 */
164 
165  /* x_a */
166  fx(1:m) = rc(2)*xi.*ya - rc(5)*xa + rb/this.hlp.hs;
167  /* y_a */
168  fx(m+1:2*m) = rc(1)*yi.*xan - rc(6)*ya;
169  /* x_i */
170  fx(2*m+1:3*m) = -rc(2)*xi.*ya - rc(9)*xi + rc(16) - rb/this.hlp.hs;
171  /* y_i */
172  fx(3*m+1:end) = -rc(1)*yi.*xan - rc(10)*yi + rc(17);
173 
174  /* If this has been projected, project back to reduced space */
175  if ~isempty(this.W)
176  fx = this.W^t*fx;
177  end
178  }
189  function fx = evaluateMulti(colvec<double> x,unused1,colvec<double> mu) {
190  fx = zeros(size(x));
191 
192  m = this.nodes;
193 
194  /* Compute activation fun values (it's set up in scaled times!) */
195  ud = this.activationFun(t, mu);
196  rc = this.System.ReacCoeff;
197 
198  /* Extract single functions */
199  xa = x(1:m,:);
200  xan = bsxfun(@power,xa,mu(4,:));
201  ya = x(m+1:2*m,:);
202  xi = x(2*m+1:3*m,:);
203  yi = x(3*m+1:end,:);
204 
205  /* Compile boundary conditions */
206  nd = size(x,2);
207  rb = zeros(m,nd);
208 
209  /* % Top & Bottom */
210  xd = repmat(this.hlp.xd,1,nd); /* y distances
211  * bottom */
212 
213  pos = bsxfun(@lt,xd,this.hlp.xr*mu(1,:)/2);
214  idx = this.idxmat(:,1);
215  rb(idx,:) = pos .* (bsxfun(@times,xi(idx,:),mu(2,:).*ud));
216  /* top */
217  pos = bsxfun(@lt,xd,this.hlp.xr*mu(1,:)/2);
218  idx = this.idxmat(:,end);
219  rb(idx,:) = rb(idx,:) + pos .* (bsxfun(@times,xi(idx,:),mu(2,:).*ud));
220 
221  /* % Left & Right */
222  yd = repmat(this.hlp.yd,1,nd);
223  /* right */
224  pos = bsxfun(@lt,yd,this.hlp.yr*mu(1,:)/2);
225  idx = this.idxmat(end,:);
226  rb(idx,:) = rb(idx,:) + pos .* (bsxfun(@times,xi(idx,:),mu(2,:).*ud));
227  /* left */
228  pos = bsxfun(@lt,yd,this.hlp.yr*mu(1,:)/2);
229  idx = this.idxmat(1,:);
230  rb(idx,:) = rb(idx,:) + pos .* (bsxfun(@times,xi(idx,:),mu(2,:).*ud));
231 
232  /* Ca-8 */
233  fx(1:m,:) = rc(2)*xi.*ya - xa*rc(5) + rb/this.hlp.hs;
234  /* Ca-3 */
235  fx(m+1:2*m,:) = rc(1)*yi.*xan - ya*rc(6);
236  /* Pro-Ca-8 */
237  fx(2*m+1:3*m,:) = -rc(2)*xi.*ya - rc(9)*xi + rc(16) - rb/this.hlp.hs;
238  /* Pro-Ca-3 */
239  fx(3*m+1:end,:) = -rc(1)*yi.*xan - rc(10)*yi + rc(17);
240  }
252  function J = getStateJacobian(colvec<double> x,double t) {
253 
254  /* If this has been projected, restore full size and compute values. */
255  if ~isempty(this.V)
256  x = this.V*x;
257  end
258 
259  n = this.nodes;
260  mu = this.mu;
261  rc = this.System.ReacCoeff;
262 
263  /* Boundary stuff */
264  bottom = this.idxmat(this.hlp.xd <= this.hlp.xr*mu(1)/2,1);
265  top = this.idxmat(this.hlp.xd <= this.hlp.xr*mu(1)/2,end);
266  right = this.idxmat(end,this.hlp.yd <= this.hlp.yr*mu(1)/2);
267  left = this.idxmat(1,this.hlp.yd <= this.hlp.yr*mu(1)/2);
268  rbxi = zeros(n,1);
269  u = this.activationFun(t,mu);
270  rbxi(bottom) = mu(2)*u;
271  rbxi(top) = mu(2)*u;
272  rbxi(right) = mu(2)*u;
273  rbxi(left) = mu(2)*u;
274  rbxi = rbxi/this.hlp.hs;
275 
276  /* yb, xb values not needed in jacobian! */
277  posi = reshape(1:4*n" ,[],4) ";
278  o = ones(n,1);
279  xa = x(posi(1,:)); ya = x(posi(2,:));
280  xi = x(posi(3,:)); yi = x(posi(4,:));
281 
282  /* % 1=x_a, 2=y_a, 3=x_i, 4=y_i, 5=iap, 6=bar, 7=yb, 8=xb
283  * dxa = rc(2)*xi.*ya - rc(5)*xa */
284  s = [-o*rc(5); ... /* dx_a/x_a */
285 
286  rc(2)*xi;... /* dxa/ya */
287 
288  rc(2)*ya + rbxi]; /* dxa/xi
289  * dya = rc(1)*yi.*xan - rc(6)*ya; */
290 
291  nyixan_1 = mu(4)*rc(1)*yi.*xa.^(mu(4)-1);
292  k1xan = rc(1)*xa.^mu(4);
293  s = [s; nyixan_1; ... /* dya/xa */
294 
295  -o*rc(6);... /* dy_a/y_a */
296 
297  k1xan]; /* dy_a/y_i
298  * dxi = -rc(2)*xi.*ya - rc(9)*xi + rc(16) - rb/this.hlp.hs; */
299 
300  s = [s; -rc(2)*xi;... /* dxi/ya */
301 
302  -rc(2)*xa-rc(9)-rbxi]; /* dxi/xi
303  * dyi = -rc(1)*yi.*xan - rc(10)*yi + rc(17); */
304 
305  s = [s; -nyixan_1; ... /* dyi/xa */
306 
307  -k1xan-o*rc(10)]; /* dyi/yi */
308 
309 
310  n = this.fDim;
311  if ~isempty(this.V)
312  n = size(this.V,1);
313  end
314  m = this.xDim;
315  if ~isempty(this.W)
316  n = size(this.W,1);
317  end
318  J = sparse(this.Ji,this.Jj,s,n,m);
319  }
320 
321 
322  protected:
323 
324  function fxj = evaluateComponents(pts,ends,unused1,unused2,X,double t) {
325  fxj = this.evaluateComponentsMulti(pts, ends, [], [], X, t, this.mu);
326  }
327 
328 
329  function fxj = evaluateComponentsMulti(rowvec<integer> pts,rowvec<integer> ends,unused1,unused2,matrix<double> X,double t,matrix<double> mu) {
330  m = this.nodes;
331  nd = size(X,2);
332  fxj = zeros(length(pts),nd);
333  rc = this.System.ReacCoeff;
334  if nd > 1
335  bottom = bsxfun(@lt,this.hlp.xd,this.hlp.xr*mu(1,:)/2);
336  top = bsxfun(@lt,this.hlp.xd,this.hlp.xr*mu(1,:)/2);
337  right = bsxfun(@lt,this.hlp.yd,this.hlp.yr*mu(1,:)/2);
338  left = bsxfun(@lt,this.hlp.yd,this.hlp.yr*mu(1,:)/2);
339  else
340  bottom = this.hlp.xd <= this.hlp.xr*mu(1,:)/2;
341  top = this.hlp.xd <= this.hlp.xr*mu(1,:)/2;
342  right = this.hlp.yd <= this.hlp.yr*mu(1,:)/2;
343  left = this.hlp.yd <= this.hlp.yr*mu(1,:)/2;
344  end
345  /* Get matrix indices */
346  J2 = mod(pts,m);
347  J2(J2==0) = m;
348 
349  /* [row2, col2] = ind2sub([this.hlp.d1 this.hlp.d2],J2);
350  * ind2sub direct replacement! */
351  row = rem(J2-1, this.hlp.d1)+1;
352  col = (J2-row)/this.hlp.d1+1;
353  u = this.activationFun(t, mu);
354  for idx=1:length(pts)
355  j = pts(idx);
356  if idx == 1
357  st = 0;
358  else
359  st = ends(idx-1);
360  end
361  /* Select the elements of x that are effectively used in f */
362  xidx = (st+1):ends(idx);
363  x = X(xidx,:);
364 
365  /* X_a */
366  if j <= m
367  /* 1=x_a, 2=y_a, 3=x_i {, y_i}
368  * k2*xi.*ya - k5*xa + rb; */
369  fj = rc(2)*x(3,:).*x(2,:) - rc(5)*x(1,:);
370 
371  /* Boundary conditions
372  * Bottom */
373  if col(idx) == 1
374  fj = fj + bottom(row(idx),:) .* (x(3,:).*mu(2,:).*u/this.hlp.hs);
375  end
376  /* Top */
377  if col(idx) == this.hlp.d2
378  fj = fj + top(row(idx),:) .* (x(3,:).*mu(2,:).*u/this.hlp.hs);
379  end
380  /* Right */
381  if row(idx) == this.hlp.d1
382  fj = fj + right(col(idx),:) .* (x(3,:).*mu(2,:).*u/this.hlp.hs);
383  end
384  /* Left */
385  if row(idx) == 1
386  fj = fj + left(col(idx),:) .* (x(3,:).*mu(2,:).*u/this.hlp.hs);
387  end
388 
389  /* Y_a */
390  elseif m < j && j <= 2*m
391  /* 1=x_a, 2=y_a {, x_i}, 3=y_i
392  * k1*yi.*xa^mu4 - k6*ya; */
393  fj = rc(1)*x(3,:).*x(1,:).^mu(4,:) - rc(6)*x(2,:);
394 
395  /* X_i */
396  elseif 2*m < j && j <= 3*m
397  /* {x_a,} 1=y_a, 2=x_i {, y_i}
398  * -k2*xi.*ya - k9*xi + k7 - rb; */
399  fj = -rc(2)*x(2,:).*x(1,:) - rc(9)*x(2,:) + rc(16);
400 
401  /* Boundary conditions
402  * Bottom */
403  if col(idx) == 1
404  fj = fj - bottom(row(idx),:) .* (x(2,:).*mu(2,:).*u/this.hlp.hs);
405  end
406  /* Top */
407  if col(idx) == this.hlp.d2
408  fj = fj - top(row(idx),:) .* (x(2,:).*mu(2,:).*u/this.hlp.hs);
409  end
410  /* Right */
411  if row(idx) == this.hlp.d1
412  fj = fj - right(col(idx),:) .* (x(2,:).*mu(2,:).*u/this.hlp.hs);
413  end
414  /* Left */
415  if row(idx) == 1
416  fj = fj - left(col(idx),:) .* (x(2,:).*mu(2,:).*u/this.hlp.hs);
417  end
418 
419  /* Y_i */
420  else
421  /* 1=x_a, {y_a, x_i}, 2=y_i
422  * -k1*yi.*xa^mu4 - k1*yi + k8; */
423  fj = -rc(1)*x(2,:).*x(1,:).^mu(4,:) - rc(10)*x(2,:) + rc(17);
424  end
425  fxj(idx,:) = fj;
426  end
427  }
451  error(" Activation fun not yet implemented correctly ");
452  m = this.nodes;
453  rc = this.System.ReacCoeff;
454  nd = size(X,2);
455 
456  /* % Boundary stuff
457  * Get matrix indices of points */
458  pts2 = mod(pts,m);
459  pts2(pts2==0) = m;
460  row = rem(pts2-1, this.hlp.d1)+1;
461  col = (pts2-row)/this.hlp.d1+1;
462  if nd > 1
463  bottom = bsxfun(@lt,this.hlp.xd,this.hlp.xr*mu(1)/2);
464  top = bsxfun(@lt,this.hlp.xd,this.hlp.xr*mu(1)/2);
465  right = bsxfun(@lt,this.hlp.yd,this.hlp.yr*mu(1)/2);
466  left = bsxfun(@lt,this.hlp.yd,this.hlp.yr*mu(1)/2);
467  else
468  bottom = this.hlp.xd <= this.hlp.xr*mu(1)/2;
469  top = this.hlp.xd <= this.hlp.xr*mu(1)/2;
470  right = this.hlp.yd <= this.hlp.yr*mu(1)/2;
471  left = this.hlp.yd <= this.hlp.yr*mu(1)/2;
472  end
473 
474  /* % Derivative info per point */
475  der = false(size(X,1),1);
476  der(deriv) = true;
477 
478  /* % Main loop */
479  dfx = zeros(size(deriv,1),nd);
480  curpos = 1;
481  for idx=1:length(pts)
482  i = pts(idx);
483  if idx == 1
484  st = 0;
485  else
486  st = ends(idx-1);
487  end
488  /* Select the elements of x that are effectively used in f */
489  elem = (st+1):ends(idx);
490  x = X(elem,:);
491  d = der(elem);
492 
493  /* X_a */
494  if i <= m
495  /* 1=x_a, 2=y_a, 3=x_i {, y_i} */
496  if d(1) /* dx_a/x_a = -mu3 */
497 
498  dfx(curpos,:) = -rc(5);
499  curpos = curpos + 1;
500  end
501  if d(2) /* dx_a/y_a = mu1*x_i */
502 
503  dfx(curpos,:) = rc(2)*x(3,:);
504  curpos = curpos + 1;
505  end
506  if d(3) /* dx_a/x_i = mu1*y_a + rb' */
507 
508  dfx(curpos,:) = rc(2)*x(2,:);
509  if col(idx) == 1 /* Bottom */
510 
511  dfx(curpos,:) = dfx(curpos,:) + bottom(row(idx),:) .* mu(2,:)/this.hlp.hs;
512  end
513  if col(idx) == this.hlp.d2 /* Top */
514 
515  dfx(curpos,:) = dfx(curpos,:) + top(row(idx),:) .* mu(2,:)/this.hlp.hs;
516  end
517  if row(idx) == this.hlp.d1 /* Right */
518 
519  dfx(curpos,:) = dfx(curpos,:) + right(col(idx),:) .* mu(2,:)/this.hlp.hs;
520  end
521  if row(idx) == 1 /* Left */
522 
523  dfx(curpos,:) = dfx(curpos,:) + left(col(idx),:) .* mu(2,:)/this.hlp.hs;
524  end
525  curpos = curpos + 1;
526  end
527 
528  /* Y_a */
529  elseif m < i && i <= 2*m
530  /* 1=x_a, 2=y_a {, x_i}, 3=y_i */
531  if d(1) /* dy_a/x_a = n*mu2*y_i*x_a^(n-1) */
532 
533  dfx(curpos,:) = mu(4,:)*rc(1)*x(3,:).*x(1,:).^(mu(4,:)-1);
534  curpos = curpos + 1;
535  end
536  if d(2) /* dy_a/y_a = -mu4 */
537 
538  dfx(curpos,:) = -rc(6);
539  curpos = curpos + 1;
540  end
541  if d(3) /* dx_a/x_a = -mu3 */
542 
543  dfx(curpos,:) = rc(1)*x(1,:).^mu(4,:);
544  curpos = curpos + 1;
545  end
546 
547  /* X_i */
548  elseif 2*m < i && i <= 3*m
549  /* {x_a,} 1=y_a, 2=x_i {, y_i} */
550  if d(1) /* dx_i/y_a = -mu1*x_i */
551 
552  dfx(curpos,:) = -rc(2)*x(2,:);
553  curpos = curpos + 1;
554  end
555  if d(2) /* dx_i/x_i = -mu1*y_a -mu5 -rbxi */
556 
557  dfx(curpos,:) = -rc(2)*x(1,:)-rc(9);
558  /* Boundary conditions */
559  if col(idx) == 1 /* Bottom */
560 
561  dfx(curpos,:) = dfx(curpos,:) - bottom(row(idx),:) .* mu(2,:)/this.hlp.hs;
562  end
563  if col(idx) == this.hlp.d2 /* Top */
564 
565  dfx(curpos,:) = dfx(curpos,:) - top(row(idx),:) .* mu(2,:)/this.hlp.hs;
566  end
567  if row(idx) == this.hlp.d1 /* Right */
568 
569  dfx(curpos,:) = dfx(curpos,:) - right(col(idx),:) .* mu(2,:)/this.hlp.hs;
570  end
571  if row(idx) == 1 /* Left */
572 
573  dfx(curpos,:) = dfx(curpos,:) - left(col(idx),:) .* mu(2,:)/this.hlp.hs;
574  end
575  curpos = curpos + 1;
576  end
577 
578  /* Y_i */
579  else
580  /* 1=x_a, {y_a, x_i}, 2=y_i */
581  if d(1) /* dy_i/x_a = -n*mu2*y_i*x_a^(n-1) */
582 
583  dfx(curpos,:) = -mu(4,:)*rc(1)*x(2,:).*x(1,:).^(mu(4,:)-1);
584  curpos = curpos + 1;
585  end
586  if d(2) /* dy_i/y_i = -mu2 * x_a^n-mu6 */
587 
588  dfx(curpos,:) = -rc(1)*x(1,:).^mu(4,:) - rc(10);
589  curpos = curpos + 1;
590  end
591  end
592  end
593  }
617 };
618 }
619 }
620 
621 
622 
integer fDim
The current output dimension of the function.
Definition: ACoreFun.m:171
function idx = nodepos(nr)
Definition: BaseCoreFun.m:212
reshape
hanges the dimensions of the handle object array to the specified dimensions. See the MATLAB reshape ...
function fxj = evaluateComponentsMulti(rowvec< integer > pts,rowvec< integer > ends, unused1, unused2,matrix< double > X,double t,matrix< double > mu)
The vector embedding results from the fixed ordering of the full 4*m-vector into the components x_a...
Definition: CoreFun2D.m:329
integer xDim
The current state space dimension of the function's argument .
Definition: ACoreFun.m:151
models.BaseFirstOrderSystem System
The system associated with the current ACoreFun.
Definition: ACoreFun.m:193
function f = activationFun(double t,colvec< double > mu)
Definition: BaseCoreFun.m:221
V
The matrix of the biorthogonal pair .
Definition: AProjectable.m:61
function fx = evaluateMulti(colvec< double > x, unused1,colvec< double > mu)
Allocate result vector.
Definition: CoreFun2D.m:189
colvec< double > mu
The current model parameter mu for evaluations. Will not be persisted as only valid for runtime durin...
Definition: ACoreFun.m:208
#define X(i, j)
function J = getStateJacobian(colvec< double > x,double t)
Definition: CoreFun2D.m:252
function dfx = evaluateComponentPartialDerivatives(rowvec< integer > pts,rowvec< integer > ends, unused1,rowvec< integer > deriv, unused2,colvec< double > X, unused3,colvec< double > mu, unused4)
See dscomponents.ACompEvalCoreFun for more details.
Definition: CoreFun2D.m:450
sparse< logical > JSparsityPattern
Sparsity pattern for the jacobian matrix.
Definition: ACoreFun.m:127
function copy = clone()
System already copied in constructor (see below)
Definition: CoreFun2D.m:45
function fx = evaluate(colvec< double > x,double t)
If this has been projected, restore full size and compute values.
Definition: CoreFun2D.m:118
The core nonlinear function of the PCD model.
Definition: CoreFun2D.m:19
function newSysDimension()
Create diffusion matrix.
Definition: CoreFun2D.m:66
W
The matrix of the biorthogonal pair .
Definition: AProjectable.m:72
function fxj = evaluateComponents(pts, ends, unused1, unused2, X,double t)
Definition: CoreFun2D.m:324