Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a579b68

Browse filesBrowse files
committed
add images
1 parent 930c3ae commit a579b68
Copy full SHA for a579b68

File tree

Expand file treeCollapse file tree

5 files changed

+65
-58
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

5 files changed

+65
-58
lines changed
Open diff view settings
Collapse file

‎README.md‎

Copy file name to clipboardExpand all lines: README.md
+62-47Lines changed: 62 additions & 47 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ package symjava.examples;
186186
import Jama.Matrix;
187187
import symjava.matrix.*;
188188
import symjava.relational.Eq;
189+
import symjava.symbolic.Expr;
189190

190191
/**
191192
* A general Gauss Newton solver using SymJava for simbolic computations
@@ -200,17 +201,20 @@ public class GaussNewton {
200201
SymVector res = new SymVector(n);
201202
SymMatrix J = new SymMatrix(n, eq.getParams().length);
202203

204+
Expr[] params = eq.getParams();
203205
for(int i=0; i<n; i++) {
204206
Eq subEq = eq.subsUnknowns(data[i]);
205207
res[i] = subEq.lhs - subEq.rhs; //res[i] =y[i] - a*x[i]/(b + x[i]);
206-
for(int j=0; j<eq.getParams().length; j++)
207-
J[i][j] = res[i].diff(eq.getParams()[j]);
208+
for(int j=0; j<eq.getParams().length; j++) {
209+
Expr df = res[i].diff(params[j]);
210+
J[i][j] = df;
211+
}
208212
}
209213

210214
System.out.println("Jacobian Matrix = ");
211-
J.print();
215+
System.out.println(J);
212216
System.out.println("Residuals = ");
213-
res.print();
217+
System.out.println(res);
214218

215219
//Convert symbolic staff to Bytecode staff to speedup evaluation
216220
NumVector Nres = new NumVector(res, eq.getParams());
@@ -233,7 +237,6 @@ public class GaussNewton {
233237
}
234238
}
235239
}
236-
237240
```
238241

239242
```Java
@@ -308,46 +311,58 @@ x=35.60000
308311
x=26.39551
309312
x=24.79064
310313
x=24.73869
311-
L(y_0,y_1,y_2,y_3,y_4,y_5,y_6,\lambda_0,\lambda_1,\lambda_2,\lambda_3,\lambda_4,\lambda_5,\lambda_6,a,b)=
312-
(0.05 - y_0)^2 + (0.094 - y_2)^2 + (0.127 - y_1)^2 + (0.2122 - y_3)^2 + (0.2665 - y_5)^2 + (0.2729 - y_4)^2 + (0.3317 - y_6)^2 + \lambda_0*y_0 + \lambda_1*y_1 + \lambda_2*y_2 + \lambda_3*y_3 + \lambda_4*y_4 + \lambda_5*y_5 - 3.74*\lambda_6*a/(b + 3.74) + 0.038*\lambda_0*a/(b + 0.038) + 0.194*\lambda_1*a/(b + 0.194) + 0.425*\lambda_2*a/(b + 0.425) + 0.626*\lambda_3*a/(b + 0.626) + 1.253*\lambda_4*a/(b + 1.253) + 2.5*\lambda_5*a/(b + 2.5) + \lambda_6*y_6
313-
Hessian Matrix =
314-
2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
315-
0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0
316-
0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0
317-
0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0
318-
0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0
319-
0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0
320-
0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0
321-
1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.038/(b + 0.038) 0.038*a*(b + 0.038)^-2
322-
0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0.194/(b + 0.194) 0.194*a*(b + 0.194)^-2
323-
0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0.425/(b + 0.425) 0.425*a*(b + 0.425)^-2
324-
0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0.626/(b + 0.626) 0.626*a*(b + 0.626)^-2
325-
0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1.253/(b + 1.253) 1.253*a*(b + 1.253)^-2
326-
0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2.5/(b + 2.5) 2.5*a*(b + 2.5)^-2
327-
0 0 0 0 0 0 1 0 0 0 0 0 0 0 -3.74/(b + 3.74) 3.74*a*(b + 3.74)^-2
328-
0 0 0 0 0 0 0 -0.038/(b + 0.038) -0.194/(b + 0.194) -0.425/(b + 0.425) -0.626/(b + 0.626) -1.253/(b + 1.253) -2.5/(b + 2.5) -3.74/(b + 3.74) 0 3.74*\lambda_6*(b + 3.74)^-2 + 0.038*\lambda_0*(b + 0.038)^-2 + 0.194*\lambda_1*(b + 0.194)^-2 + 0.425*\lambda_2*(b + 0.425)^-2 + 0.626*\lambda_3*(b + 0.626)^-2 + 1.253*\lambda_4*(b + 1.253)^-2 + 2.5*\lambda_5*(b + 2.5)^-2
329-
0 0 0 0 0 0 0 0.038*a*(b + 0.038)^-2 0.194*a*(b + 0.194)^-2 0.425*a*(b + 0.425)^-2 0.626*a*(b + 0.626)^-2 1.253*a*(b + 1.253)^-2 2.5*a*(b + 2.5)^-2 3.74*a*(b + 3.74)^-2 0.038*\lambda_0*(b + 0.038)^-2 + 0.194*\lambda_1*(b + 0.194)^-2 + 0.425*\lambda_2*(b + 0.425)^-2 + 0.626*\lambda_3*(b + 0.626)^-2 + 1.253*\lambda_4*(b + 1.253)^-2 + 2.5*\lambda_5*(b + 2.5)^-2 + 3.74*\lambda_6*(b + 3.74)^-2 -0.076*\lambda_0*a*(b + 0.038)^-3 + -0.388*\lambda_1*a*(b + 0.194)^-3 + -0.85*\lambda_2*a*(b + 0.425)^-3 + -1.252*\lambda_3*a*(b + 0.626)^-3 + -2.506*\lambda_4*a*(b + 1.253)^-3 + -5.0*\lambda_5*a*(b + 2.5)^-3 + -7.48*\lambda_6*a*(b + 3.74)^-3
330-
Grident =
331-
-0.1 + \lambda_0 + 2*y_0
332-
-0.254 + \lambda_1 + 2*y_1
333-
-0.188 + \lambda_2 + 2*y_2
334-
-0.4244 + \lambda_3 + 2*y_3
335-
-0.5458 + \lambda_4 + 2*y_4
336-
-0.533 + \lambda_5 + 2*y_5
337-
-0.6634 + \lambda_6 + 2*y_6
338-
-0.038*a/(b + 0.038) + y_0
339-
-0.194*a/(b + 0.194) + y_1
340-
-0.425*a/(b + 0.425) + y_2
341-
-0.626*a/(b + 0.626) + y_3
342-
-1.253*a/(b + 1.253) + y_4
343-
-2.5*a/(b + 2.5) + y_5
344-
-3.74*a/(b + 3.74) + y_6
345-
-(3.74*\lambda_6/(b + 3.74) + 0.038*\lambda_0/(b + 0.038) + 0.194*\lambda_1/(b + 0.194) + 0.425*\lambda_2/(b + 0.425) + 0.626*\lambda_3/(b + 0.626) + 1.253*\lambda_4/(b + 1.253) + 2.5*\lambda_5/(b + 2.5))
346-
0.038*\lambda_0*a*(b + 0.038)^-2 + 0.194*\lambda_1*a*(b + 0.194)^-2 + 0.425*\lambda_2*a*(b + 0.425)^-2 + 0.626*\lambda_3*a*(b + 0.626)^-2 + 1.253*\lambda_4*a*(b + 1.253)^-2 + 2.5*\lambda_5*a*(b + 2.5)^-2 + 3.74*\lambda_6*a*(b + 3.74)^-2
347-
Iterativly sovle ...
348-
y_0=0.00000 y_1=0.00000 y_2=0.00000 y_3=0.00000 y_4=0.00000 y_5=0.00000 y_6=0.00000 \lambda_0=0.00000 \lambda_1=0.00000 \lambda_2=0.00000 \lambda_3=0.00000 \lambda_4=0.00000 \lambda_5=0.00000 \lambda_6=0.00000 a=0.90000 b=0.20000
349-
y_0=0.01678 y_1=0.09612 y_2=0.16729 y_3=0.20243 y_4=0.25473 y_5=0.28945 y_6=0.30273 \lambda_0=0.06643 \lambda_1=0.06176 \lambda_2=-0.14658 \lambda_3=0.01955 \lambda_4=0.03634 \lambda_5=-0.04590 \lambda_6=0.05794 a=0.33266 b=0.26017
350-
y_0=0.01624 y_1=0.08735 y_2=0.15765 y_3=0.19518 y_4=0.25469 y_5=0.29667 y_6=0.31327 \lambda_0=0.06752 \lambda_1=0.07930 \lambda_2=-0.12729 \lambda_3=0.03404 \lambda_4=0.03642 \lambda_5=-0.06034 \lambda_6=0.03687 a=0.35178 b=0.46125
351-
y_0=0.02256 y_1=0.09240 y_2=0.15593 y_3=0.19116 y_4=0.25076 y_5=0.29644 y_6=0.31550 \lambda_0=0.05487 \lambda_1=0.06919 \lambda_2=-0.12387 \lambda_3=0.04207 \lambda_4=0.04428 \lambda_5=-0.05989 \lambda_6=0.03240 a=0.36223 b=0.55462
352-
y_0=0.02314 y_1=0.09356 y_2=0.15671 y_3=0.19159 y_4=0.25059 y_5=0.29598 y_6=0.31499 \lambda_0=0.05373 \lambda_1=0.06689 \lambda_2=-0.12542 \lambda_3=0.04123 \lambda_4=0.04463 \lambda_5=-0.05896 \lambda_6=0.03342 a=0.36185 b=0.55631
353314
```
315+
![](https://github.com/yuemingl/SymJava/blob/master/images/ex3_L.png)
316+
![](https://github.com/yuemingl/SymJava/blob/master/images/ex3_hessian.png)
317+
![](https://github.com/yuemingl/SymJava/blob/master/images/ex3_grad.png)
318+
319+
```Java
320+
package symjava.examples;
321+
322+
import static symjava.symbolic.Symbol.*;
323+
import symjava.matrix.*;
324+
import symjava.symbolic.*;
325+
326+
/**
327+
* Example for PDE Constrained Parameters Optimization
328+
*
329+
*/
330+
public class Example4 {
331+
public static void main(String[] args) {
332+
Func u = new Func("u", x,y,z);
333+
Func u0 = new Func("u0", x,y,z);
334+
Func q = new Func("q", x,y,z);
335+
Func q0 = new Func("q0", x,y,z);
336+
Func f = new Func("f", x,y,z);
337+
Func lamd = new Func("\\lambda ", x,y,z);
338+
339+
Expr reg_term = (q-q0)*(q-q0)*0.5*0.1;
340+
341+
Func L = new Func("L",(u-u0)*(u-u0)/2 + reg_term + q*Dot.apply(Grad.apply(u), Grad.apply(lamd)) - f*lamd);
342+
System.out.println("Lagrange L(u, \\lambda, q) = \n"+L);
343+
344+
Func phi = new Func("\\phi ", x,y,z);
345+
Func psi = new Func("\\psi ", x,y,z);
346+
Func chi = new Func("\\chi ", x,y,z);
347+
Expr[] xs = new Expr[]{u, lamd, q };
348+
Expr[] dxs = new Expr[]{phi, psi, chi };
349+
SymVector Lx = Grad.apply(L, xs, dxs);
350+
System.out.println("\nGradient Lx = (Lu, Llamd, Lq) =");
351+
System.out.println(Lx);
352+
353+
Func du = new Func("\\delta{u}", x,y,z);
354+
Func dl = new Func("\\delta{\\lambda}", x,y,z);
355+
Func dq = new Func("\\delta{q}", x,y,z);
356+
Expr[] dxs2 = new Expr[] { du, dl, dq };
357+
SymMatrix Lxx = new SymMatrix();
358+
for(Expr Lxi : Lx) {
359+
Lxx.add(Grad.apply(Lxi, xs, dxs2));
360+
}
361+
System.out.println("\nHessian Matrix =");
362+
System.out.println(Lxx);
363+
}
364+
}
365+
```
366+
![](https://github.com/yuemingl/SymJava/blob/master/images/ex4_L.png)
367+
![](https://github.com/yuemingl/SymJava/blob/master/images/ex4_hessian.png)
368+
![](https://github.com/yuemingl/SymJava/blob/master/images/ex4_grad.png)
Collapse file

‎images/ex3_L.png‎

Copy file name to clipboard
11 KB
  • Display the source diff
  • Display the rich diff
Loading
Collapse file

‎images/ex3_grad.png‎

Copy file name to clipboard
27.2 KB
  • Display the source diff
  • Display the rich diff
Loading
Collapse file

‎images/ex3_hessian.png‎

Copy file name to clipboard
47.1 KB
  • Display the source diff
  • Display the rich diff
Loading
Collapse file

‎src/symjava/examples/Example4.java‎

Copy file name to clipboardExpand all lines: src/symjava/examples/Example4.java
+3-11Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
package symjava.examples;
22

3-
import static symjava.symbolic.Symbol.x;
4-
import static symjava.symbolic.Symbol.y;
5-
import static symjava.symbolic.Symbol.z;
6-
import symjava.matrix.SymMatrix;
7-
import symjava.matrix.SymVector;
8-
import symjava.symbolic.Dot;
9-
import symjava.symbolic.Expr;
10-
import symjava.symbolic.Func;
11-
import symjava.symbolic.Grad;
3+
import static symjava.symbolic.Symbol.*;
4+
import symjava.matrix.*;
5+
import symjava.symbolic.*;
126

137
/**
148
* Example for PDE Constrained Parameters Optimization
@@ -26,8 +20,6 @@ public static void main(String[] args) {
2620
Expr reg_term = (q-q0)*(q-q0)*0.5*0.1;
2721

2822
Func L = new Func("L",(u-u0)*(u-u0)/2 + reg_term + q*Dot.apply(Grad.apply(u), Grad.apply(lamd)) - f*lamd);
29-
//Func L = new Func("L",Dot.apply(Grad.apply(u), Grad.apply(lamd)));
30-
3123
System.out.println("Lagrange L(u, \\lambda, q) = \n"+L);
3224

3325
Func phi = new Func("\\phi ", x,y,z);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.