def c1_test(self, plot=True): """ Plot the reconstructed Neumann data, as approximated by a Chebyshev expansion. If the Chebyshev expansion shows "spikes" near the interfaces of the segments, something is probably wrong. """ sample = self.get_boundary_sample() do_exact = hasattr(self.problem, 'eval_d_u_outwards') s_data = np.zeros(len(sample)) expansion_data = np.zeros(len(sample)) if do_exact: exact_data = np.zeros(len(sample)) for l in range(len(sample)): p = sample[l] s_data[l] = p['s'] if do_exact: exact_data[l] = self.problem.eval_d_u_outwards(p['arg'], p['sid']).real r, th = domain_util.cart_to_polar(p['x'], p['y']) sid = domain_util.get_sid(self.a, th) if sid == 0: arg = th else: arg = r for JJ in range(len(self.B_desc)): expansion_data[l] +=\ (self.c1[JJ] * self.eval_dn_B_arg(0, JJ, arg, sid)).real import matplotlib.pyplot as plt if do_exact: error = np.max(np.abs(exact_data - expansion_data)) print('c1 error: {}'.format(error)) plt.plot(s_data, exact_data, linewidth=5, color='#BBBBBB', label='Exact') if not plot: return plt.plot(s_data, expansion_data, label='Expansion') plt.legend(loc=2) #plt.ylim(-1.5, 1.5) plt.title('c1') plt.xlabel('Arclength s') plt.ylabel('Reconstructed Neumann data') plt.show()
def c0_test(self, plot=True): """ Plot the Dirichlet data along with its Chebyshev expansion. If there is more than a minor difference between the two, something is wrong. """ k = self.k a = self.a nu = self.nu sample = self.get_boundary_sample() s_data = np.zeros(len(sample)) exact_data = np.zeros(len(sample)) expansion_data = np.zeros(len(sample)) exact_data_outer = [] expansion_data_outer = [] for l in range(len(sample)): p = sample[l] s_data[l] = p['s'] r, th = domain_util.cart_to_polar(p['x'], p['y']) sid = domain_util.get_sid(self.a, th) exact_data[l] = self.problem.eval_bc(p['arg'], sid).real if sid == 0: arg = th else: arg = r for JJ in range(len(self.B_desc)): expansion_data[l] +=\ (self.c0[JJ] * self.eval_dn_B_arg(0, JJ, arg, sid)).real if sid == 0: exact_data_outer.append(exact_data[l]) expansion_data_outer.append(expansion_data[l]) exact_data_outer = np.array(exact_data_outer) expansion_data_outer = np.array(expansion_data_outer) print('c0 error outer:', np.max(np.abs(exact_data_outer - expansion_data_outer))) print('c0 error:', np.max(np.abs(exact_data - expansion_data))) #for l in range(len(exact_data)): # diff = abs(exact_data[l] - expansion_data[l]) # if diff > .06: # print(sample[l], 'diff:', diff) if not plot: return import matplotlib.pyplot as plt plt.plot(s_data, exact_data, linewidth=5, color='#BBBBBB', label='Exact') plt.plot(s_data, expansion_data, label='Expansion') plt.legend(loc=0) plt.title('c0') plt.xlabel('Arclength s') plt.ylabel('Dirichlet data') plt.show()