Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Python MAC-4

Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

MAC -- 4 (LNB)

( Numerical Analysis
using PYTHON )

Department -- PHYSICS
Sem. -- II
Reg. No. -- A01-1152 -111- 002 -
2023
Admit Roll. -- 2024121009

1
INDEX
Page
Contents No.

Collatz Conjecture 3

ⅆ𝒚
Solving ODE : + 𝟐𝒚 − (ⅇ−𝒙 ) = 𝟎 7
ⅆ𝒙

ⅆ𝒚
Solving ODE :- + 𝒚𝟐 = 𝟏 9
ⅆ𝒙

Radioactive Disintegration 11

Euler Method 13

Gravitational Problem 16

Bisection Method (Root Finding) 20

Transient Phenomena of RC Circuit 22

-: Determine Area of common Section


24
enclosed by Sin(x) & Cos(x)

Newton Raphson Method 25

2
-: Collatz Conjecture :-
import matplotlib.pyplot as plt
import numpy as np
plt.style.use("classic")

xf=100000
xx2,yy2=[],[]
for j in range(5,xf+1):
xx2.append(j)
m=j
n=0
while(m!=1):
n+=1
if m%2==0:
m=m/2
else:
m=3*m+1
yy2.append(n)
point=np.argmax(yy2)-1

y=point
xx1,yy1=[],[]
i=0
while(y!=1):
i+=1
if y%2==0:
y=y/2
yy1.append(y)
else:
y=3*y+1

3
yy1.append(y)
xx1.append(i)
yy4=[np.log(x) for x in yy1]

xx3,yy3=[],[]
for k in range(max(yy2)):
s=yy2.count(k)
yy3.append(s)
xx3.append(k)

fig,ax=plt.subplots(2,2,figsize=(10,10),constrained_layout=True)
ax[0,0].plot(xx1,yy1,"Black")
ax[0,0].set_title(f"Collatz Sequence of {point}")
ax[0,0].text(point,max(yy1),f"{max(yy1)}")
ax[0,0].grid(True)
ax[0,0].axvline(x=0,alpha=0.5)
ax[0,0].axhline(y=0,alpha=0.5)
ax[0,0].set_xlabel("steps no. $\\rightarrow$" )
ax[0,0].set_ylabel("step value $\\rightarrow$")

ax[0,1].plot(xx2,yy2,'--',color="red")
ax[1,0].plot(xx3,yy3,'--',color="blue")

slope,intercept=np.polyfit(xx1,yy4,1)
xx_fit=np.linspace(min(xx1),max(xx1),100)
yy_fit=slope*xx_fit+intercept

ax[1,1].plot(xx1,yy4,"black")
ax[1,1].plot(xx_fit,yy_fit)
ax[1,1].set_title(f"log distribution curve of {point}")

4
ax[1,1].axvline(x=0,alpha=0.5)
ax[1,1].axhline(y=0,alpha=0.5)
ax[1,1].set_xlabel("steps no. $\\rightarrow$" )
ax[1,1].set_ylabel("ln(step value) $\\rightarrow$")

ax[0,1].hist(xx2,weights=yy2,bins=range(2,xf+2),color="red")
ax[0,1].text(point+5,max(yy2)-15,f"maximum steps= {max(yy2)} at {point} ")
ax[0,1].set_title("Collatz_length of series of numbers")
ax[0,1].set_xlabel("seed no. $\\rightarrow$" )
ax[0,1].set_ylabel("Collatz Length $\\rightarrow$")

maxf=max(yy3)
most_step=np.argmax(yy3)

ax[1,0].hist(xx3,weights=yy3,bins=range(1,max(xx3)+1),color="blue")
ax[1,0].set_title(f"Frequency distribution upto {xf}")
ax[1,0].text(most_step+10,maxf-80,f"most probable steps= {most_step} of frequency=
{maxf}")
ax[1,0].set_xlabel("no. of steps $\\rightarrow$" )
ax[1,0].set_ylabel("Frequency $\\rightarrow$")
plt.show()

5
-: Output :-

6
ⅆ𝒚
-: Solving ODE :- + 𝟐𝒚 − (ⅇ−𝒙 ) = 𝟎
ⅆ𝒙
import matplotlib.pyplot as plt
import numpy as np
def f(x,y): #define the ODE
y1=np.exp(-x)-2*y
y2=np.exp(-x)-np.exp(-2*x)
return y1,y2

xi=0
xf=5
y=0
n=500
h=(xf-xi)/(n-1)
xx,yy1,yy2=[],[],[]
for i in range (n):
y1,y2=f(xi,y)
y=y+h*y1
yy1.append(y)
yy2.append(y2)
xx.append(xi)
xi=xi+h

plt.plot(xx,yy1,'-.',label='Plot of ODE',color="red")
plt.plot(xx,yy2,'--',label="real sol.",color="green")
plt.axvline(x=0,color='Black')
plt.axhline(y=0,color='Black')
plt.grid(True)
plt.title(" Solving ODE: $ \\frac{dy}{dx} + 2y-e^{{-x}} = 0 $")
plt.ylabel("y(x)$\\rightarrow$")

7
plt.xlabel("x$\\rightarrow$")
plt.legend(loc='best',fontsize=10)
plt.show()

-: Output :-

8
ⅆ𝒚
-: Solving ODE :- + 𝒚𝟐 = 𝟏
ⅆ𝒙
import matplotlib.pyplot as plt
import numpy as np
def f(x,y):
e=np.exp
y1=1-y**2 # given ODE
y2=(e(2*x)-1)/(e(2*x)+1) # known solution of ODE
return y1,y2

xi=0
xf=3
y=0
n=10000
h=(xf-xi)/(n-1)
xx,yy1,yy2=[],[],[]
for i in range (n):
x=xi+i*h
y1,y2=f(x,y)
y=y+h*y1
yy1.append(y)
yy2.append(y2)
xx.append(x)

plt.plot(xx,yy1,'-.',label='Plot of ODE',color="red")
plt.plot(xx,yy2,'--',label="real sol.",color="green")
plt.axvline(x=0,color='Black')
plt.axhline(y=0,color='Black')
plt.grid(True)
plt.title("solve ODE")

9
plt.ylabel("y(x)$\\rightarrow$")
plt.xlabel("x$\\rightarrow$")
plt.legend(loc='best',fontsize=10)
plt.show()

-: Output :-

10
-: Radioactive Disintegration :-
import matplotlib.pyplot as plt
import numpy as np

def f(t,k1,k2,x1,x2,x3): # define the Radioactive Disintegration


e=np.exp
y1=(-k1*x1)
y2=(-k2*x2)+(k1*x1)
y3=(k2*x2)
return y1,y2,y3
k1=1
k2=3
ti=0
tf=6
x1=1
x2=0
x3=0
s=x1+x2+x3
n=10000
h=(tf-ti)/(n-1)
tt,yy1,yy2,yy3,ss=[],[],[],[],[]
for i in range (n):
t=ti+i*h
y1,y2,y3=f(t,k1,k2,x1,x2,x3)
x1=x1+h*y1
x2=x2+h*y2
x3=x3+h*y3
s=x1+x2+x3
yy1.append(x1)
yy2.append(x2)

11
yy3.append(x3)
tt.append(t)
ss.append(s)
plt.plot(tt,yy1,'-.',label="$N_A(t)$",color="red")
plt.plot(tt,yy2,'--',label="$N_B(t)$",color="green")
plt.plot(tt,yy3,':',label="$N_C(t)$",color="blue")
plt.plot(tt,ss,'-',label="N",color="brown")
plt.axvline(x=0,color='Black')
plt.axhline(y=0,color='Black')
plt.grid(True)
plt.title("Radioactive Disintegration")
plt.ylabel("N(t) $\\rightarrow$")
plt.xlabel("Time(t) $\\rightarrow$")
plt.legend(loc='best',fontsize=15)
plt.show()

-: Output :-

12
-: Euler Method :-
import matplotlib.pyplot as plt
import numpy as np
def f(x,y):
pi=np.pi
x1=(-pi*y)
y1=(pi*x)
return x1,y1
ti=0
tf=4
x=1
y=0
n=10000
h=(tf-ti)/(n-1)
tt,xx,yy=[],[],[]
for i in range (n):
t=ti+i*h
x1,y1=f(x,y)
y=y+h*y1
x=x+h*x1
yy.append(y)
xx.append(x)
tt.append(t)

fig,ax=plt.subplots(2,1,figsize=(8,8),constrained_layout=True)
ax[0].plot(tt,xx,'-.',color="red")
ax[0].plot(tt,yy,'--',color="green")
ax[0].axvline(x=0,color='Black')
ax[0].axhline(y=0,color='Black')
ax[0].grid(True)

13
ax[0].set_ylabel("y(t) or x(t)$\\rightarrow$")
ax[0].set_xlabel("time$\\rightarrow$")
ax[0].set_title("Plot of y(t) vs time & x(t) vs time")

ax[1].plot(xx,yy,'--',color="green")
ax[1].axvline(x=0,color='Black')
ax[1].axhline(y=0,color='Black')
ax[1].grid(True)
ax[1].set_ylabel("y(t)$\\rightarrow$")
ax[1].set_xlabel("x(t)$\\rightarrow$")
ax[1].set_title("Plot of y(t) vs x(t)")
plt.show()

14
-: Output :-

15
-: Gravitational Problem :-
import matplotlib.pyplot as plt
import numpy as np
def f(x,v,t):
if x==1:
return (-g-r*v)
elif x==-1:
return (g-r*v)
elif x==2:
return (-g-r*v**2)
elif x==-2:
return (g-r*v**2)

g=9.8
r=5
u1=10
u2=0
h=10**(-4)
t=0
tt1,tt2,tt3,tt4,vv1,vv2,vv3,vv4=[],[],[],[],[],[],[],[]

x=1
while (u1>=0):
u1=u1+h*f(x,u1,t)
tt1.append(t)
t=t+h
vv1.append(u1)

t=0
x=-1

16
while (f(x,u2,t)>=g/1000):
u2=u2+h*f(x,u2,t)
tt2.append(t)
t=t+h
vv2.append(u2)

u1=10
u2=0
t=0
x=2
while (u1>=0):
u1=u1+h*f(x,u1,t)
tt3.append(t)
t=t+h
vv3.append(u1)

t=0
x=-2
while (f(x,u2,t)>=g/1000):
u2=u2+h*f(x,u2,t)
tt4.append(t)
t=t+h
vv4.append(u2)

fig,ax=plt.subplots(2,2,figsize=(4,4),constrained_layout=True)

ax[0][0].plot(tt1,vv1,"blue",label= f"time required {max(tt1)}")


ax[0,0].set_title("Throwing ball with $ R_m \\propto v$")
ax[0][0].legend()
ax[0][0].grid(True)

17
ax[0][0].axvline(x=0)
ax[0][0].axhline(y=0)
ax[0][0].set_xlabel("Time $\\rightarrow$" )
ax[0][0].set_ylabel("Velocity $\\rightarrow$")

ax[0][1].plot(tt2,vv2,"green",label=f"Required Time: {max(tt2)},velocity: {max(vv2)}")


ax[0,1].set_title("Releasing ball with $ R_m \\propto v$")
ax[0][1].legend()
ax[0][1].grid(True)
ax[0][1].axvline(x=0)
ax[0][1].axhline(y=0)
ax[0][1].set_xlabel("Time $\\rightarrow$" )
ax[0][1].set_ylabel("Velocity $\\rightarrow$")

ax[1][0].plot(tt3,vv3,"red",label= f"time required {max(tt3)}")


ax[1,0].set_title("Throwing ball with $ R_m \\propto v^2$")
ax[1][0].legend()
ax[1][0].grid(True)
ax[1][0].axvline(x=0)
ax[1][0].axhline(y=0)
ax[1][0].set_xlabel("Time $\\rightarrow$" )
ax[1][0].set_ylabel("Velocity $\\rightarrow$")

ax[1][1].plot(tt4,vv4,"black",label=f"Required Time: {max(tt4)},velocity: {max(vv4)}")


ax[1,1].set_title("Releasing ball with $ R_m \\propto v^2$")
ax[1][1].legend()
ax[1][1].grid(True)
ax[1][1].axvline(x=0)
ax[1][1].axhline(y=0)
ax[1][1].set_xlabel("Time $\\rightarrow$" )

18
ax[1][1].set_ylabel("Velocity $\\rightarrow$")
plt.show()

-: Output :-

19
-: Bisection Method (Root Finding) :-
import matplotlib.pyplot as plt
import numpy as np
def f(x):
return np.exp(-x)*(3.2*np.sin(x)-0.5*np.cos(x))
def fn(a,b,h,n):
xx,yy=[],[]
for i in range (n):
x=a+i*h
y=f(x)
xx.append(x)
yy.append(y)
return xx,yy
a=0
b=6
xi=3
xf=4
n=1000
h=(b-a)/(n-1)
xx,yy=fn(a,b,h,n)
d=10**(-5)
while abs(xf-xi)>=d:
if f(xi)*f(xf)<0:
c=(xf+xi)/2
if f(c)*f(xf)<0:
xi=c
elif f(c)*f(xf)>0:
xf=c
plt.scatter(c,f(c))
plt.text(c, f(c), f"{c:.3f},{f(c):.3f}")

20
plt.plot(xx,yy,color="red")
plt.axvline(x=0,color='Black')
plt.axhline(y=0,color='Black')
plt.grid(True)
plt.title("root of a function: $e^{-x} \\left( 3.2\\sin{(x)}-0.5\\cos{(x)} \\right) $")
plt.ylabel("y(x)$\\rightarrow$")
plt.xlabel("x$\\rightarrow$")
plt.show()

-: Output :-

21
-: Transient Phenomena of RC Circuit :-
import numpy as np
import matplotlib.pyplot as plt
def f(vc):
return (vi-vc)/(R*C)
vi=10
R= 1000
C= 100e-6
t=0
vc=0
tf=0.5
n=10000
h=(tf-t)/(n-1)
Vc,T=[],[]
while vc<=vi*0.999:
Vc.append(vc)
T.append(t)
t=t+h
vc=vc+f(vc)*h

plt.plot(T,Vc,label=f"time required= {t:.5f}")


plt.axvline(x=0,color='Black',alpha=0.5,)
plt.axhline(y=0,color='Black',alpha=0.5)
plt.grid(True)
plt.title("Transient Phenomena of RC Circuit")
plt.ylabel("Vc $\\rightarrow$")
plt.xlabel("Time $\\rightarrow$")
plt.legend(loc="best")
plt.show()

22
-: Output :-

23
-: Determine Area of common Section
enclosed by Sin(x) & Cos(x) :-
import numpy as np
def f(x):
y1=np.sin(x)
y2=np.cos(x)
if y1>=y2:
return y2
else:
return y1
yy=[]
xi=0
xf=np.pi/2
n=1000
s=0
h=(xf-xi)/(n-1)
for i in range(0,n):
x=xi+i*h
y=f(x)
yy.append(y)
for i in range(1,n-1):
s=s+2*yy[i]
s=s+yy[0]+yy[n-1]
m=s*h/2
m=round(m,5)
print(m)

Output:
My Codes/2nd sem/integration.py"
0.58579

24
-: Newton Raphson Method :-
import numpy as np
def f(x):
return (x**3-4)
def fn(x):
return (f(x+h)-f(x))/h
i=0
x=4
h=1e-8
while abs(f(x)>h):
x=x-f(x)/fn(x)
i+=1
print(i,x)

-: Output :-
My Codes/2nd sem/Newton Raphson.py"
6 1.5874010520322663

25

You might also like