コード例 #1
0
 def test_quasigraph(self, plot=False):
     sol = self.solver
     errz = []
     errl = []
     ks = np.arange(1, 5)
     for k in ks:
         self.scheme.h = pow(2, -k)
         sol.initialize(u0=self.u0,
                        time=1,
                        name='{0}_{1}'.format(type(self).__name__, k))
         sol.run()
         zexact = sol.system.exact(sol.final_time(), self.u0)[0]
         lexact = sol.system.exact(sol.final_time(), self.u0)[2]
         df = sol.final()[0] - zexact
         logerrz = np.log2(np.abs(df))
         logerrl = np.log2(np.abs(sol.final()[2] - lexact))
         errz.append(logerrz)
         errl.append(logerrl)
     pl.clf()
     pl.subplot(1, 2, 1)
     pl.title('z')
     regz = order.linear_regression(ks, errz, do_plot=True)
     pl.plot(ks, errz, 'o-')
     pl.legend()
     pl.subplot(1, 2, 2)
     pl.title(u'λ')
     regl = order.linear_regression(ks, errl, do_plot=True)
     pl.plot(ks, errl, 'o-')
     pl.legend()
     oz = -regz[0]
     ol = -regl[0]
     nt.assert_greater(ol, self.expected_orders[0] - self.tol)
     nt.assert_greater(oz, self.expected_orders[1] - self.tol)
     return sol
コード例 #2
0
ファイル: test_rkdae.py プロジェクト: LongyanU/odelab
	def test_quasigraph(self, plot=False):
		sol = self.solver
		errz = []
		errl = []
		ks = np.arange(1,5)
		for k in ks:
			self.scheme.h = pow(2,-k)
			sol.initialize(u0=self.u0,time=1, name='{0}_{1}'.format(type(self).__name__, k))
			sol.run()
			zexact = sol.system.exact(sol.final_time(),self.u0)[0]
			lexact = sol.system.exact(sol.final_time(),self.u0)[2]
			df = sol.final()[0] - zexact
			logerrz = np.log2(np.abs(df))
			logerrl = np.log2(np.abs(sol.final()[2] - lexact))
			errz.append(logerrz)
			errl.append(logerrl)
		plt.clf()
		plt.subplot(1,2,1)
		plt.title('z')
		regz = order.linear_regression(ks,errz,do_plot=True)
		plt.plot(ks,errz,'o-')
		plt.legend()
		plt.subplot(1,2,2)
		plt.title(u'λ')
		regl = order.linear_regression(ks,errl,do_plot=True)
		plt.plot(ks,errl,'o-')
		plt.legend()
		oz = -regz[0]
		ol = -regl[0]
		nt.assert_greater(ol, self.expected_orders[0] - self.tol)
		nt.assert_greater(oz, self.expected_orders[1] - self.tol)
		return sol
コード例 #3
0
def test_orders(expected_orders, scheme, plot=False, tol=.2):
	system = QuasiGraphSystem(fsin)
	#system = GraphSystem(fsin)
	u0 = np.array([0.,0.,1])
	solver = Solver(scheme, system)
	#compare_exact(sol, u0, 2)

	sol = solver
	errz = []
	errl = []
	ks = np.arange(1,5)
	for k in ks:
		scheme.h = pow(2,-k)
		sol.initialize(u0=u0)
		sol.run(1)
		zexact = sol.system.exact(sol.final_time(),u0)[0]
		lexact = sol.system.exact(sol.final_time(),u0)[2]
		df = sol.final()[0] - zexact
		logerrz = np.log2(np.abs(df))
		logerrl = np.log2(np.abs(sol.final()[2] - lexact))
		errz.append(logerrz)
		errl.append(logerrl)
	if plot:
		plt.clf()
		plt.subplot(1,2,1)
		plt.title('z')
		plt.plot(ks,errz,'o-')
		plt.legend()
		plt.subplot(1,2,2)
		plt.title(u'λ')
		plt.plot(ks,errl,'o-')
		plt.legend()
	regz = order.linear_regression(ks,errz,do_plot=False)
	regl = order.linear_regression(ks,errl,do_plot=False)
	oz = -regz[0]
	ol = -regl[0]
	assert ol > expected_orders[0] - tol
	assert oz > expected_orders[1] - tol
	return sol