# python 3.x – I have written this code of a Finite Element Method for solving a Boundary value problem. But when I run this code it does not give me any output

Here is the code for the Boundary value problem and when I write this code in Matlab with the Matlab syntax it gives me a graph. But when I run this python code it does not gives me any result. Can anyone figure out that what is wrong with this code or what I am missing here.

import numpy as np
import matplotlib.pyplot as plt

def BVP2():
a=0        # interval [a,b]
b=1
n=10
h=(b-a)/n

nNode = n+1  # number of nodes
nElem = n     # number of elements

x = np.zeros((nNode,1), dtype=int)

# DOmain discretization
for i in range(1, nNode):
x = a + (i-1)*h
print(x)

# Construction of finite elements

for i in range(1, nElem):
elem[i,:]=  [i,i+1]
A = np.zeros((nNode,nNode))
B = np.zeros((nNode,nNode))
F = np.zeros((nNode,1))
u = np.zeros((nNode,1))

for i in range(1, nElem):
node1 = elem(i,1)
node2 = elem(i,2)
Ae  = StiffMatrix1(x,h,node1,node2)
Be  = StiffMatrix2(x,h,node1,node2)
A[node1:node2,node1:node2] = A[node1:node2,node1:node2] + Ae
B[node1:node2,node1:node2] = B[node1:node2,node1:node2] + Be
F[node1:node2] = F[node1:node2] + Fe

# Implementation of BC's
Ared  = A[2:nNode-1,2:nNode-1]
Bred  = B[2:nNode-1,2:nNode-1]
Fred = F[2:nNode-1]
ured = u[2:nNode-1]
ured = [Ared + Bred]/Fred
u = np.block([[0],[ured], [0]])

# Exact Solution
uex = np.zeros((nNode,1))

for i in range(1, nNode):
uex = -(1/6)*x(i)**3 + (1/6)*x(i)

fig, ax = plt.subplots()
ax.plot(x, u)
plt.show()

def StiffMatrix1(x,h,node1,node2):
x1 = x(node1)
x2 = x(node2)
A11 = (1/h)
A12 = (-1/h)
A21 = (-1/h)
A22 = (1/h)
Ae = np.block([[np.c_[A11, A12]], [np.c_[A21, A22]]])
return Ae

def StiffMatrix2(x,h,node1,node2):

x1 = x(node1)
x2 = x(node2)

B11 = 0 #h/3
B12 = 0 #h/6
B21 = 0 #h/6
B22 = 0 #h/3

Be = np.block([[np.c_[B11, B12]], [np.c_[B21, B22]]])

return Be

x1 = x(node1)
x2 = x(node2)

Fe1 = h/6*(x2+2*x1)
Fe2 = h/6*(2*x2+x1)

Fe = np.block([[Fe1],[Fe2]])
return Fe


Your suggestions would be highly appreciated.