package symjava.math; import java.util.ArrayList; import java.util.List; import symjava.matrix.ExprVector; import symjava.symbolic.Expr; import symjava.symbolic.TypeInfo; import symjava.symbolic.arity.NaryOp; import symjava.symbolic.utils.Utils; /** * Divergence Operator * */ public class Div extends NaryOp { protected Expr expr; public Div(ExprVector vec) { super(null); if(vec instanceof Grad) { Grad g = (Grad)vec; if(g.isAbstract()) { this.args = g.getData(); this.label = "div(" +g+ ")"; this.sortKey = this.label; return; } } List freeVars = Utils.extractSymbols(vec.getData()); create(vec, freeVars.toArray(new Expr[0])); } public Div(ExprVector vec, Expr... freeVars) { super(null); create(vec, freeVars); } private Div create(ExprVector vec, Expr... freeVars) { if(vec.dim() != freeVars.length) { throw new RuntimeException("vec.dim() != freeVars.length"); } this.args = vec.getData(); List list = new ArrayList(); for(int i=0; i