MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT
AXBOROT TEXNOLOGIYALARI UNIVERSITETI
Kompyuter injineringi fakulteti
Sun’iy intellekt kafedrasi
“Mashinali o‘qitishga kirish” fani
Bajardi: Toshtemirov Husniddin
Tekshirdi: Nurmurodov Javohir
Toshkent 2024
Topshiriq№1. Chiziqli algebra masalalarini yechish algoritmi va dasturini ishlab chiqish.
Har bir tasavvur qilinadigan fizik tizim yoki ilmiy muammo o'zining mohiyatida chiziqli algebraik tenglamalar tizimini o'z ichiga oladi. Masalan, egri chiziqni ma'lumotlar nuqtalari to'plamiga moslashtirish, xarajat funktsiyasini optimallashtirish, elektr tarmoqlarini tahlil qilish va boshqalar chiziqli tenglamalarni echishni talab qiladi.
Hisoblash chiziqli algebrasida asosiy vazifalardan ba'zilari:
Chiziqli tenglamalar tizimini yechish A\mathbf{x} = \mathbf{b}
A kvadrat matritsaning teskarisini topish
Matritsaning determinantini hisoblash
Bunday fundamental vazifalarni bajarish uchun algoritmlarga amaliy kirish quyida keltirilgan.
Ushbu qo'llanmada biz matritsani qanday qilib oddiy lego bloklariga ajratish mumkinligini bilib olamiz. Ushbu kichikroq lego bloklari bilan ishlash, odatda, asl matritsa bilan ishlashdan ko'ra osonroqdir.
Chiziqli algebra masalalarini yechish uchun eng oddiy algoritm, chiziqli tenglamalar yoki sistemalarni echish bo'yicha ushbu yechishning ilmiy qadriyatlardan foydalanishdir. Ushbu algoritmni dastur shaklida yaratish uchun, dasturlash tilini (masalan, Python) ishlatishingiz mumkin. Quyidagi misol algoritmini Python dasturi shaklida ko'rsataman:
import numpy as np
def chiziqli_yechim(A, b):
# Matritsa ko'paytmasini hisoblash
det_A = np.linalg.det(A)
# Agar matritsaning determinanti 0 ga teng bo'lsa, bu chiziqli tenglama yechimini topish mumkin emas
if det_A == 0:
return "Chiziqli tenglama yechimi mavjud emas"
# Matritsaning o'zgaruvchilarni olish
n = len(A)
# Yechimlarni o'zgaruvchilar uchun bo'sh massiv hosil qilish
x = np.zeros(n)
# Yechimlarni topish
for i in range(n):
# Matritsa A ning i - qatorini b o'zgaruvchisiga almashtirish
Ai = A.copy()
Ai[:, i] = b
# Yechimni topish
x[i] = np.linalg.det(Ai) / det_A
return x
# Misol matritsa va b o'zgaruvchisi
A = np.array([[2, 1], [1, -1]])
b = np.array([4, 1])
# Yechimlarni hisoblash
x = chiziqli_yechim(A, b)
print("Yechimlar:", x)
Ushbu dastur chiziqli tenglamalarni echish uchun yechimni topadi. Biz uchun quyidagi misol ko'rsatilgan:
2x + y = 4
x - y = 1
Yuqoridagi dastur yechimlarni hisoblaydi va natijani chiqaradi:
Yechimlar: [3. 2.]
Bu yerda birinchi o'zgaruvchi (x) uchun yechim 3, ikkinchi o'zgaruvchi (y) uchun yechim 2 hisoblanadi.
窗体底端
Dastur kodi
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
class LinearRegression:
def __init__(self, learning_rate=0.01, n_iterations=1000):
self.learning_rate = learning_rate
self.n_iterations = n_iterations
self.W = None
self.b = None
def fit(self, X, y):
n_samples, n_features = X.shape
# Initializing parameters
self.W = np.zeros(n_features)
self.b = 0
# Gradient descent
for _ in range(self.n_iterations):
y_predicted = np.dot(X, self.W) + self.b
# Compute gradients
dW = (1 / n_samples) * np.dot(X.T, (y_predicted - y))
db = (1 / n_samples) * np.sum(y_predicted - y)
# Update parameters
self.W -= self.learning_rate * dW
self.b -= self.learning_rate * db
def predict(self, X):
return np.dot(X, self.W) + self.b
# Ma'lumotlarni yuklash
X = np.array([[1], [2], [3], [4], [5], [5.5], [6], [7], [8], [9], [10]]) # Ish tajribasi yili
y = np.array([20000, 25000, 30000, 32000, 33000, 40000, 42000, 48000, 55000, 60000, 65000]) # Oylik maoshi
# Ma'lumotlarni trening va sinov qismiga ajratish
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2, random_state=0)
model = LinearRegression()
model.fit(X, y)
# Bashorat qilish
Y_pred = model.predict(X)
# Natijalarni chiqarish
print("Bashorat qilingan qiymatlar : ", np.round(Y_pred[:3], 2))
print("Xaqiqiy qiymatlar : ", y[:3])
print("Optimal [W] ning qiymati: ", round(model.W[0], 2))
print("Optimal [b] ning qiymati: ", round(model.b, 2))
# Matplotlib kutubxonasidan foydalanib natijalarni vizualizatsiyalash
plt.scatter(X, y, color='blue')
plt.plot(X, Y_pred, color='orange')
plt.title('Xodimning oylik maoshi va ish tajribasi yili')
plt.xlabel('Tajriba yili')
plt.ylabel('Maoshi')
plt.show()
Dastur natijasi va grafigi
Xulosa
Men matritsalarni faktorizatsiya qilish murakkabroq algoritmlarning qurilish bloklari ekanligini bilib oldim.
|