Mercurial > hg > jslab
annotate examples/maths/QuadraticForm.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | 5df24c91468d |
children |
rev | line source |
---|---|
samer@1 | 1 package eg.maths; |
samer@1 | 2 import samer.core.*; |
samer@1 | 3 import samer.maths.*; |
samer@1 | 4 import samer.maths.ops.*; |
samer@1 | 5 |
samer@1 | 6 public class QuadraticForm extends FunctionOfVector |
samer@1 | 7 { |
samer@1 | 8 VVector x, yy; |
samer@1 | 9 Matrix A; |
samer@1 | 10 MatrixTimesVector Ax; |
samer@1 | 11 double [] y; |
samer@1 | 12 |
samer@1 | 13 public QuadraticForm() { this(Shell.getInt("dimensions",2)); } |
samer@1 | 14 public QuadraticForm(int n) |
samer@1 | 15 { |
samer@1 | 16 x = new VVector("x",n); |
samer@1 | 17 yy = new VVector("y",n); |
samer@1 | 18 A = new Matrix("A",n,n); |
samer@1 | 19 Ax = new MatrixTimesVector(yy.array(),A); |
samer@1 | 20 y = yy.array(); |
samer@1 | 21 |
samer@1 | 22 Shell.put("functionOfVector",this); |
samer@1 | 23 Shell.put("vector",x); |
samer@1 | 24 } |
samer@1 | 25 |
samer@1 | 26 public double apply(double [] x) |
samer@1 | 27 { |
samer@1 | 28 Ax.run(x); |
samer@1 | 29 return -0.5*Mathx.dot(x,y); |
samer@1 | 30 } |
samer@1 | 31 |
samer@1 | 32 public VectorFunctionOfVector derivative() |
samer@1 | 33 { |
samer@1 | 34 return new VectorFunctionOfVector() { |
samer@1 | 35 |
samer@1 | 36 public void apply(double [] x) { |
samer@1 | 37 Ax.run(x); |
samer@1 | 38 Mathx.copy(y,x); |
samer@1 | 39 } |
samer@1 | 40 |
samer@1 | 41 public void apply(double [] x, double [] v) { |
samer@1 | 42 Ax.run(x); |
samer@1 | 43 Mathx.copy(y,v); |
samer@1 | 44 } |
samer@1 | 45 }; |
samer@1 | 46 } |
samer@1 | 47 } |