Sunteți pe pagina 1din 3

#2a)

def DifFinCent2(X, Y):


n = len(X)
d2Y = [0]*(n-2)
for i in range(1, n-1):
d2Y[i-1] = (Y[i+1] - 2*Y[i] + Y[i-1]) / ((X[i+1] - X[i]) * (X[i] -
X[i-1]))
return d2Y

#b)

import numpy as np
import matplotlib.pyplot as plt

# Definirea functiei f(x)


def f(x):
return x ** 3 - 7 * x ** 2 + 2 * x + 4

# Definirea intervalului si a numarului de puncte


a = -3
b = 7
n = 100

# Calcularea discretizarii intervalului


X = np.linspace(a, b, n)

# Calcularea valorilor functiei f(x) pe discretizarea intervalului


Y = f(X)

# Calcularea valorilor derivatei de ordinul 2 a functiei f(x) pe


discretizarea intervalului
d2Y = DifFinCent2(X, Y)

# Construirea graficului functiei f(x) si a derivatei de ordinul 2 a


functiei f(x)
plt.plot(X, Y, label='f(x)')
plt.plot(X[1:-1], d2Y, label='f\'\'(x)')
plt.legend()
plt.title('Graficul functiei f(x) si a derivatei de ordinul 2')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

#c)
import numpy as np

def d2f(x):
return 6*x - 14
x = np.linspace(-3, 7, 100)
y_exact = d2f(x)
y_aprox = DifFinCent2(x, f(x))
error = np.abs(y_exact - y_aprox)
import matplotlib.pyplot as plt

plt.plot(x, error)
plt.title("Eroarea derivării numerice de ordinul 2")
plt.xlabel("x")
plt.ylabel("Eroare")
plt.show()
#3
import numpy as np
import matplotlib.pyplot as plt

# Definirea functiei
def f(x):
return np.sin(x)

# Definirea intervalului si numarul de puncte


a = 0
b = np.pi
n = 100

# Construirea discretizarii
X = np.linspace(a, b, n)
Y = f(X)

# Calculul derivatelor exacte


dY_exact = np.cos(X)
d2Y_exact = -np.sin(X)

# Calculul derivatelor numerice


dY_numerical = np.gradient(Y, X)
d2Y_numerical = np.gradient(dY_numerical, X)

# Construirea graficului pentru derivata de ordinul 1


plt.figure()
plt.plot(X, dY_exact, label='Derivata exacta')
plt.plot(X, dY_numerical, label='Derivata numerica')
plt.legend()
plt.title('Derivata de ordinul 1')

# Construirea graficului pentru derivata de ordinul 2


plt.figure()
plt.plot(X, d2Y_exact, label='Derivata exacta')
plt.plot(X, d2Y_numerical, label='Derivata numerica')
plt.legend()
plt.title('Derivata de ordinul 2')

# Calculul si construirea graficului pentru eroare


error = abs(d2Y_exact - d2Y_numerical)
plt.figure()
plt.plot(X, error)
plt.title('Eroarea')

#4.
def Integrare(f, a, b, m, metoda):
h = (b - a) / m # calculul pasului de discretizare
suma = 0 # variabila in care se va calcula suma
x = a # initializare variabila pentru punctele de discretizare

if metoda == 'dreptunghi':
for i in range(m):
suma += f(x + h / 2)
x += h
suma *= h

elif metoda == 'trapez':


suma = (f(a) + f(b)) / 2
for i in range(1, m):
suma += f(a + i * h)
suma *= h

elif metoda == 'Simpson':


suma = f(a) + f(b)
for i in range(1, m):
if i % 2 == 0:
suma += 2 * f(a + i * h)
else:
suma += 4 * f(a + i * h)
suma *= h / 3

else:
print("Metoda specificata nu este valida.")

return suma

#Această funcție primește o funcție f, limitele de integrare a și b,


numărul de subintervale m și metoda de integrare specificată prin
argumentul metoda. Funcția utilizează o instrucțiune if pentru a selecta
metoda specificată și calculează valoarea aproximativă a integralei
folosind formula corespunzătoare. Rezultatul este returnat.

S-ar putea să vă placă și