MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI SAMARQAND FILIALI
“KOMPYUTER INJINIRINGI” FAKULTETI
”DASTURIY INJINIRINGI” YUNALISHI
ALGORITMLARNI LOYIHALSH FANIDA
DIO 22-03 guruh
AMALIY ISH
Tekshiridi: Bobonazarov Akmal
Bajardi: Ravshanov Kamoliddin
SAMARQAND – 2024
Tenglamani oraliqni teng ikkiga bo‘lish va iteratsiya usuli yordamida yechish
Berilgan tenglama: 2x3−2x2+3x+1=02x^3 - 2x^2 + 3x + 1 = 02x3−2x2+3x+1=0.
Bu tenglamani yechish uchun biz oraliqni teng ikkiga bo‘lish (Bisection Method) va iteratsiya (Iteration Method) usullaridan foydalanamiz.
1. Oraliqni teng ikkiga bo‘lish usuli (Bisection Method)
Bu usulda boshlang‘ich intervalni tanlaymiz va har bir qadamda intervalni ikki qismga bo‘lib, ildizning mavjudligini tekshiramiz. Bu jarayon ildizning aniqligi yetarli bo‘lguncha davom etadi.
2. Iteratsiya usuli (Iteration Method)
Iteratsiya usuli oddiy iteratsiya bilan ildizni aniqlashga asoslangan. Bu usulda biror boshlang‘ich qiymatdan boshlab, qadam-qadam yechimga yaqinlashamiz.
Oraliqni teng ikkiga bo‘lish usuli (Bisection Method)
Algoritm:
Boshlang‘ich interval [a,b][a, b][a,b] tanlanadi.
Funksiyaning qiymati f(a)f(a)f(a) va f(b)f(b)f(b) ning ishorasini tekshirib, ildiz mavjudligini aniqlaymiz.
Oraliqni yarmiga bo‘lamiz: c=a+b2c = \frac{a + b}{2}c=2a+b.
Funksiyaning yangi qiymati f(c)f(c)f(c) ni hisoblaymiz.
Agar f(c)=0f(c) = 0f(c)=0 yoki aniqlik yetarli bo‘lsa, ccc qiymatini ildiz sifatida qaytaramiz.
Aks holda, yangi intervalni [a,c][a, c][a,c] yoki [c,b][c, b][c,b] sifatida tanlaymiz va jarayonni takrorlaymiz.
Dastur kodi:
# -*- coding: utf-8 -*-
"""
Created on Fri May 31 18:42:25 2024
@author: kamoliddin
"""
def bisection_method(func, a, b, tol=1e-6, max_iter=1000):
if func(a) * func(b) >= 0:
raise ValueError("f(a) va f(b) ning ishoralari turlicha bo'lishi kerak")
c = a
for _ in range(max_iter):
c = (a + b) / 2
if func(c) == 0.0 or (b - a) / 2 < tol:
return c
elif func(c) * func(a) < 0:
b = c
else:
a = c
return c
# Tenglama funksiyasi
def equation(x):
return 2*x**3 - 2*x**2 + 3*x + 1
# Boshlang'ich interval
a = -2
b = 1
# Ildizni topish
root = bisection_method(equation, a, b)
print(f"Tenglama ildizi (Bisection Method): {root}")
natija:
Funksiyaning iteratsion ko‘rinishini aniqlang: xn+1=g(xn)x_{n+1} = g(x_n)xn+1=g(xn).
Boshlang‘ich qiymat x0x_0x0 ni tanlang.
Yangi qiymatni hisoblang: xn+1=g(xn)x_{n+1} = g(x_n)xn+1=g(xn).
Agar ∣xn+1−xn∣
Aks holda, jarayonni takrorlang.
Dastur kodi:
# -*- coding: utf-8 -*-
"""
Created on Fri May 31 18:46:49 2024
@author: kamoliddin
"""
def iteration_method(g, x0, tol=1e-6, max_iter=1000):
x_n = x0
for _ in range(max_iter):
x_n1 = g(x_n)
if abs(x_n1 - x_n) < tol:
return x_n1
x_n = x_n1
return x_n
# Iteratsion funksiya
def g(x):
# Bu yerda tenglamani yechish uchun mos iteratsion formulani tanlash kerak
return (2*x**2 - 3*x - 1) / 2
# Boshlang'ich qiymat
x0 = 0.5
# Ildizni topish
root_iter = iteration_method(g, x0)
print(f"Tenglama ildizi (Iteration Method): {root_iter}")
Natija:
Xulosa
Yuqoridagi dastur yordamida 2x3−2x2+3x+1=02x^3 - 2x^2 + 3x + 1 = 02x3−2x2+3x+1=0 tenglamasining ildizini topish mumkin. Dasturda ikkita usul qo'llanilgan: Oraliqni teng ikkiga bo‘lish va Iteratsiya usullari. Har ikki usul ham tenglama ildizini aniqlashda samarali hisoblanadi.
|