Buckets:
| def tilde_w(c, k, dx, dt): | |
| C = dt*c/dx | |
| return 2/dt*asin(C*sin(k*dx/2)) | |
| def tilde_c(c, k, dx, dt): | |
| return tilde_w(c, k, dx, dt)/k | |
| def r(C, p): | |
| return 1/(C*p)*asin(C*sin(p)) # important with 1, not 1. for sympy | |
| def makeplot(): | |
| n = 16 | |
| p = linspace(0.001, pi/2, n) | |
| legends = [] | |
| for C in 1.0, 0.95, 0.8, 0.3: | |
| plot(p, r(C, p)) | |
| hold('on') | |
| legends.append('C=%g' % C) | |
| title('Numerical divided by exact wave velocity') | |
| legend(legends, fancybox=True, loc='lower left') | |
| axis([p[0], p[-1], 0.6, 1.1]) | |
| xlabel('p') | |
| ylabel('velocity ratio') | |
| savefig('tmp.pdf') | |
| savefig('tmp.eps') | |
| savefig('tmp.png') | |
| show() | |
| def sympy_analysis(): | |
| C, p = symbols('C p') | |
| # Turn series expansion into polynomial and Python function | |
| # representations | |
| rs = r(C, p).series(p, 0, 7).removeO() | |
| print 'series representation of r(C, p):', rs | |
| print 'factored series representation of r(C, p):', factor(rs) | |
| rs1 = factor((rs - 1).extract_leading_order(p)[0][0]) | |
| print 'leading order of the error:', rs1 | |
| rs_poly = poly(rs) | |
| print 'polynomial representation:', rs_poly | |
| rs_pyfunc = lambdify([C, p], rs) # can be used for plotting | |
| # Know that rs_pyfunc is correct (=1) when C=1, check that | |
| print rs_pyfunc(1, 0.1), rs_pyfunc(1, 0.76) | |
| # Alternative method for extracting terms in a series expansion: | |
| import itertools | |
| rs = [t for t in itertools.islice(r(C, p).lseries(p), 4)] | |
| print rs | |
| rs = [factor(t) for t in rs] | |
| print rs | |
| rs = sum(rs) | |
| print rs | |
| # true error | |
| x, t, k, w, c, dx, dt = symbols('x t k w c dx dt') | |
| u_n = cos(k*x - tilde_w(c, k, dx, dt)*t) | |
| u_e = cos(k*x - w*t) | |
| e = u_e-u_n | |
| # sympy cannot do this series expansion | |
| #print e.series(dx, 0, 4) | |
| if __name__ == '__main__': | |
| #from scitools.std import * | |
| #makeplot() | |
| from sympy import * # erases sin and other math functions from numpy | |
| sympy_analysis() | |
Xet Storage Details
- Size:
- 1.98 kB
- Xet hash:
- 0c99427ff964a48eeff0538a8419348053fc50b7a5c521c9625a0fd007468ab7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.