Source code for assimulo.examples.kinsol_with_jac

#!/usr/bin/env python 
# -*- coding: utf-8 -*-

# Copyright (C) 2010 Modelon AB
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import numpy as N
import pylab as P
import nose
from assimulo.solvers import KINSOL
from assimulo.problem import Algebraic_Problem

[docs]def run_example(with_plots=True): r""" Example to demonstrate the use of the Sundials solver Kinsol with a user provided Jacobian. on return: - :dfn:`alg_mod` problem instance - :dfn:`alg_solver` solver instance """ #Define the res def res(y): r1 = 2*y[0]+3*y[1]-6 r2 = 4*y[0]+9*y[1]-15 return N.array([r1,r2]) def jac(y): return N.array([[2.,3.],[4.,9.]]) #Define an Assimulo problem alg_mod = Algebraic_Problem(res, y0=[0,0], jac=jac, name='KINSOL example with Jac') #Define the KINSOL solver alg_solver = KINSOL(alg_mod) #Sets the parameters #Solve y = alg_solver.solve() #Basic test nose.tools.assert_almost_equal(y[0], 1.5, 5) nose.tools.assert_almost_equal(y[1], 1.0, 5) return alg_mod, alg_solver
if __name__=='__main__': mod, solv = run_example()