O‘ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA
KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
ALGORITMLARNI LOYIHALASH FANIDAN
Laboratoriya ishi-1
Bajardi:Samandar Toshmaxamatov
Guruh:022-20
Tekshirdi: Mamadaliyev X.A.
Toshkent 2023
Bu hisoblash uchun, avvalo funksiyani yaxshiroq yoritish uchun biror usulni ishlataylik.
Biz funksiyani quyidagi ko'rinishda yoritishni xohlaymiz:
f(x) = ln(x^2 + 1) * (x^2 + 3x + 1)^(1/3)
Integralni hisoblash uchun Simpson formulasi va Monte-Karlo usulidan foydalanasiz:
1. Simpson formulasi:
Simpson formulasi uchun odatda n tomonli bo'lmagan funksiya
uchun oddiy ochiq
ko'rsatkichlarni yoritadigan n+1 ta nuqtalarni ishlatish keng qo'llanadi.
Bu formulaga ko'ra, integralning qiymati S integralni quyidagi formula
orqali
hisoblanadi:
S = (b-a)/6 * (f(a) + 4*f((a+b)/2) + f(b))
Bu formulaga ko'ra, biz integralni Q = S(N) + R
kabi atamalarga ajratamiz, bulardan
S(N) - n ta to'g'ri to'g'ri zona yotiq selecti bo'lgan integralni topishga
yordam beradi, va
R - qolgan joyning selekti bo'lgan va integralni qisqartiruvchi muammoga aylandiradi.
N. Simpson integrallarining to'liq hisoblarni topishda ishlatiladi.
2. Monte-Karlo usuli:
Monte-Karlo usuli n ta sodir nuqtaga to'g'ri to'g'ri zona yotiq selecti to'g'risidagi
cheklovni hisoblashga asoslangan formula bo'ladi. Uni integralni hisoblashda
ishlatish
uchun teng saylarda n ta tasodifiy nuqta tayyorlaymiz va formula yordamida
integralni
yaxlitlaymiz. Bu formulaga ko'ra:
∫(a,b)f(x)dx = (b-a) * 1/n * Σᵢf(xi)
Bu yerda, xi - i chi hodisa boyicha tasodifiy nurta a va b oralig'ida yaratiladi.
Demak, funksiya quyidagi ko'rinishda yoziladi:
double f(double x)
{
return log(x * x + 1) * pow(x * x + 3 * x + 1, 1/3.0);
}
double Simpson(double a, double b, int N)
{
double h = (b - a) / N;
double sum = 0;
for (int i = 0; i <= N; i++)
{
double x = a + i * h;
if (i == 0 || i == N)
{
sum += f(x);
}
else if (i % 2 == 1)
{
sum += 4 * f(x);
}
else
{
sum += 2 * f(x);
}
}
return sum * h / 3.0;
}
double MonteCarlo(double a,
double b, int M)
{
double sum = 0;
srand(time(NULL));