使用BBsolve时,可以使用printres参数来打印结果。例如,对于以下的非线性方程组:
from numpy import *
from enthought.traits.api import *
from enthought.traits.ui.api import *
from enthought.tvtk.pyface.ui.api import Scene
from bbdemos import BjerkDemo
from bbdemos import double_pendulum
class DoublePendulum(BjerkDemo):
theta1, theta2 = double_pendulum.init()
L1=1.0
L2=2.0
m1 = 1.0
m2 = 2.0
g = 9.81
def __init__(self,show_gui=True,dt=0.001):
BjerkDemo.__init__(self,show_gui=show_gui,dt=dt)
def f1(self,u,t):
return array([
u[2],
u[3],
(-self.m1*self.L1*sin(u[0])*u[2]**2 +
(self.m1 + self.m2)*self.g*sin(u[0]) -
self.m2*self.L2*sin(u[0]-u[1])*u[3]**2)/
(self.m1 + self.m2*self.sin(u[0]-u[1])**2),
( (self.m1 + self.m2)*self.L1*sin(u[0])*u[2]**2 +
self.m2*self.L2*sin(u[0]-u[1])*u[3]**2 +
(self.m1+self.m2)*self.g*sin(u[0]+u[1]))/
(self.m1 + self.m2*self.sin(u[0]-u[1])**2)
])
def dfdu(self,u,t):
alpha = self.m2*self.L1*self.L2*cos(u[0]-u[1])
beta = self.m2*self.sin(u[0]-u[1])
gamma = self.m1*self.L1 + self.m2*self.L2
delta = self.m2*self.g*cos(u[1])
df1du1 = array([0, 0, 1, 0])
df1du2 = array([0, 0, 0, 1])
df1du3 = array([
-delta*(2*alpha*beta*gamma + (2*alpha*beta)**2)/((gamma**2)*(beta**2) + alpha**2)**2,
0,
-gamma*(delta*beta**2 + alpha*gamma*self.g)/(gamma**2*beta**2 + alpha**2),
delta*beta