def plot_solution(series_type, N, func): print "series_type ", series_type, " N ", N, " func ", func psi = series(series_type, N) print psi u, c = least_squares(func, psi, Omega, False) u = sym.lambdify([x], u) U = [u(xi) for xi in X] pylab.plot(X, U)
import sys, os sys.path.insert(0, os.path.join(os.pardir, 'src-approx')) from approx1D import least_squares, comparison_plot import matplotlib.pyplot as plt import sympy as sym from math import factorial import numpy as np x = sym.Symbol('x') f = sym.exp(-x) Omega = [0, 8] for N in 2,4,6: psi = [x**i for i in range(N+1)] u, c = least_squares(f,psi,Omega) print N, u plt.figure() comparison_plot(f, u, Omega, filename='tmp_exp_%d' % N, plot_title='N=%d' % N)
[x**i for i in range(0, N + 1)] ] # V_2 symbolic = False for V, psi in enumerate(psi_bases): for domain_no in range(1, 3): for k in range(2, 6): if symbolic: Omega = [0, k*sym.pi] if domain_no == 1 else \ [-k*sym.pi/2, k*sym.pi/2] else: # cannot use sym.pi with numerical sympy computing Omega = [0, k*pi] if domain_no == 1 else \ [-k*pi/2, k*pi/2] u, c = least_squares(f, psi, Omega, symbolic=symbolic) comparison_plot(f, u, Omega, ymin=-2, ymax=2, filename='tmp_N%d_V%dOmega%dk%d' % (N, V, k, domain_no), plot_title='sin(x) on [0,%d*pi/2] by %s' % (k, ','.join([str(p) for p in psi]))) # Need to kill the plot to proceed! for ext in 'png', 'pdf': cmd = 'doconce combine_images -2 ' + \ ' '.join(['tmp_N%d_V%dOmega%dk%d.' % (N, V, k, domain_no) + ext
psi_bases = [[x**i for i in range(1, N+1, 2)], # V_1 [x**i for i in range(0, N+1)]] # V_2 symbolic = False for V, psi in enumerate(psi_bases): for domain_no in range(1, 3): for k in range(2, 6): if symbolic: Omega = [0, k*sym.pi] if domain_no == 1 else \ [-k*sym.pi/2, k*sym.pi/2] else: # cannot use sym.pi with numerical sympy computing Omega = [0, k*pi] if domain_no == 1 else \ [-k*pi/2, k*pi/2] u, c = least_squares(f, psi, Omega, symbolic=symbolic) comparison_plot( f, u, Omega, ymin=-2, ymax=2, filename='tmp_N%d_V%dOmega%dk%d' % (N, V, k, domain_no), plot_title='sin(x) on [0,%d*pi/2] by %s' % (k, ','.join([str(p) for p in psi]))) # Need to kill the plot to proceed! for ext in 'png', 'pdf': cmd = 'doconce combine_images -2 ' + \ ' '.join(['tmp_N%d_V%dOmega%dk%d.' % (N, V, k, domain_no) + ext for k in range(2, 6)]) + \ ' sin_powers_N%d_V%d_Omega%d.' % (N, V, domain_no) + ext