diff options
Diffstat (limited to 'notes/solve_for.txt')
| -rw-r--r-- | notes/solve_for.txt | 58 | 
1 files changed, 58 insertions, 0 deletions
diff --git a/notes/solve_for.txt b/notes/solve_for.txt new file mode 100644 index 0000000..b1cf81d --- /dev/null +++ b/notes/solve_for.txt @@ -0,0 +1,58 @@ + +    x = a*y + c +    y = 4 * c + +    solve for [c] in terms of [a, x] +        first solve for other unknowns: [y] + +    x = a*(4*c) + c + +    x = c * (1 + 4*a) +    c = (1 + 4*a) / x + +N equations in M unknowns, P constants + +    0 = x + y +    0 = y*2 + 1 - x + +----------------------------------- + +solve_for(self, P: Vec<String>, M: Vec<String>, Q: HashMap<String, Expr>) + + +returns a ModelicaModel with fixed components; equations are LHS identifier, in +    correct order, no extends, no connections, name suffixed " (rewritten)", +    components as Parameter (w/ val), Input, or Output +     + +V variables +Q constants (become kwargs) +P bound vars (independent, inputs/passed, become like constants) +M unknowns (dependent, outputs) +N' total equations +N equations with unknowns + +  V = Q + P + M +  check: each Q is Integer or Float     UnderSpecifiedConstant +  filter N' to get N    OverConstrained if extra equations +  check: N >= M         UnderConstrained + +while len(eqns) > 0: +  1. find first eqn with single unknown, and pop it +  2. rebalance to get unknown on LHS +  3. remove unknown from unknown list + +return: sort equations to match order + +solve_for(var) impl for SimpleEquation => Result<SimpleEquation, String> +    check: var only on one side     VariableNotFound or NaiveImplementation +    put var on LHS +    recursively apply rules to symmetrically unwrap LHS onto RHS +    if try to unwrap Abs:           NaiveImplementation + +----------------------------------- +systems of differential equations: +  will be N equations of N variables, in terms of implied time + +should be no unknowns; odex thing is just varying initial equations +have JS boxes to show ranges of initial conditions  | 
