Untitled

 avatar
unknown
plain_text
5 months ago
1.2 kB
2
Indexable
import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('HW2_ellipse.csv', delimiter=',')

x = np.array([row[0] for row in data])
y = np.array([row[1] for row in data])

A = []
for i in range(len(x)):
    A.append([x[i]**2, y[i]**2])
A = np.array(A)

b = np.array([[1] for i in range(len(x))])

a = np.array([[1.0],[1.0]])
iters = 1000

mu = 1 / (np.linalg.norm(np.matmul(A.T, A), 2))

for i in range(iters):
    grad = np.matmul(A.T,(np.matmul(A,a)-b))
    a_new = a - mu * grad
    a = a_new
    if (np.linalg.norm(grad)<10**(-3)):
        print("t:",i)
        break

print("a_new:", a)
f_a = np.sum((np.matmul(A,a) - b)**2)
print("f(a):", f_a)
print("f(x)/len(A):", f_a/len(A))

theta = np.linspace(0, 2 * np.pi, 300)

ellipse_x = np.sqrt(1 / a[0, 0]) * np.cos(theta) 
ellipse_y = np.sqrt(1 / a[1, 0]) * np.sin(theta) 

plt.plot(ellipse_x, ellipse_y, color='blue')

plt.scatter(x, y, color='red', s=0.5) 
plt.xlabel('x')
plt.ylabel('y')
plt.title('HW2_ellipse.csv')
plt.axhline(0, color='black', linewidth = 0.3 ) 
plt.axvline(0, color='black', linewidth = 0.3 )
plt.grid(color = 'gray', linestyle = '--', linewidth = 0.2) 

plt.show()
Editor is loading...
Leave a Comment