Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 172
Kernel: Python 3 (Anaconda)
import pylab from cmath import * def euler_method(f, a, b, ya, h, acterr, y): wx.clear() wy.clear() n = int((b - a) / h) t = a w = ya if acterr: print("\nActual Error:") print("|y0 - w0| =", abs(y(a) - w)) ax.append(t) ay.append(y(t).real) wx.append(t) wy.append(w) else: print("Approximation:") print("h =", h) print("n =", n) print("w0 =", w) wx.append(t) wy.append(w) for i in range(n): w += h * f(t, w) t += h if acterr: print("|y%i - w%i| =" % (int(i+1),int(i+1)) , abs(y(t) - w)) ax.append(t) ay.append(y(t).real) wx.append(t) wy.append(w) else: print("w%i =" % int(i+1), w) wx.append(t) wy.append(w) if __name__ == '__main__': def f(t, w): return 4/(2-t) def y(t): return 4*(-log(t-2)+1j*pi+log(2)) wx = [] wy = [] ax = [] ay = [] euler_method(f, 0, 0.95, 0, 0.095, False, '') euler_method(f, 0, 0.95, 0, 0.095, True, y) pylab.plot(wx,wy, label='numerical') pylab.plot(ax,ay,'r-', label='exact') pylab.xlabel('t') pylab.ylabel('v') pylab.legend() pylab.show()
Approximation: h = 0.095 n = 10 w0 = 0 w1 = 0.19 w2 = 0.3894750656167979 w3 = 0.5994198169980134 w4 = 0.820994161021337 w5 = 1.055562062255905 w6 = 1.3047423901247575 w7 = 1.5704766558590233 w8 = 1.8551208506155776 w9 = 2.1615724635188034 w10 = 2.493450192776445 Actual Error: |y0 - w0| = 0.0 |y1 - w1| = 0.004660687925123808 |y2 - w2| = 0.009806275512045715 |y3 - w3| = 0.015516582770155107 |y4 - w4| = 0.021889964241272986 |y5 - w5| = 0.029049019746376636 |y6 - w6| = 0.03714855502775971 |y7 - w7| = 0.04638689897190651 |y8 - w8| = 0.0570223531564209 |y9 - w9| = 0.06939771069616585 |y10 - w10| = 0.08397787278560687
Image in a Jupyter notebook