Авторы

  • Yakubov Jaxongir Rustamjon ogli

DOI:

https://doi.org/10.71337/inlibrary.uz.tbir.109581

Аннотация

Ushbu maqolada funksional bog'lanishlarni kubik va bikubik splaynlar yordamida modellashtirish usullarining keng qamrovli tahlili keltirilgan. Tadqiqot ayniqsa harorat maydonlarini tahlil qilish va murakkab fizik maydonlarni modellashtirish bo'yicha yo'naltirilgan. Interpolyatsiya texnikalari, koeffitsientlarni hisoblash usullari va splayn asosidagi modellashtirish tizimlari uchun dasturiy ta'minot yaratish yondashuvlari batafsil o'rganilgan.


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

71

FUNKSIONAL BOG'LANISHLARNI KUBIK VA BIKUBIK

SPLAYNLAR YORDAMIDA MODELLASHTIRISH: HISOBLASH

USULLARI VA DASTURIY TA'MINOTINI PYTHON DASTURLASH

TILIDA ISHLAB CHIQISH

Yakubov Jaxongir Rustamjon ogli

Andijon davlat universiteti Axborot texnologiyalari o'qituvchi

yakubovjaxongir266@gmail.com

Annotatsiya

Ushbu maqolada funksional bog'lanishlarni kubik va bikubik splaynlar

yordamida modellashtirish usullarining keng qamrovli tahlili keltirilgan. Tadqiqot

ayniqsa harorat maydonlarini tahlil qilish va murakkab fizik maydonlarni

modellashtirish bo'yicha yo'naltirilgan. Interpolyatsiya texnikalari, koeffitsientlarni

hisoblash usullari va splayn asosidagi modellashtirish tizimlari uchun dasturiy

ta'minot yaratish yondashuvlari batafsil o'rganilgan.

Bir o'lchovli kubik splaynlar va ikki o'lchovli bikubik splaynlarning nazariy

asoslari hamda ularning harorat taqsimoti va boshqa fizik hodisalarni

modellashtirish sohasidagi amaliy qo'llanilishi tahlil qilingan. Tadqiqotda Furye

bazisli splaynlar, B-splayn metodologiyalari va murakkab maydon modellashtirish

uchun zamonaviy dasturiy yechimlar ham ko'rib chiqilgan.

Eksperimental natijalar bikubik splaynlarning harorat maydonlari va boshqa

fizik parametrlarni yuqori aniqlik bilan ifodalashdagi samaradorligini isbotlaydi.

Ishlab chiqilgan dasturiy ramka fazoviy ma'lumotlar interpolyatsiyasi va maydon

modellashtirish sohasida ishlaydigan tadqiqotchilar va muhandislar uchun

mustahkam vositalar taqdim etadi.

Kalit so'zlar:

kubik splaynlar, bikubik splaynlar, funksional

modellashtirish, interpolyatsiya, harorat maydonlari, B-splaynlar, Furye bazisi,

dasturiy ta'minot

1. Kirish


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

72

Funksional bog'lanishlarni matematik modellashtirish zamonaviy ilm va

texnikaning turli sohalarida muhim ahamiyat kasb etadi. Splayn asosidagi usullar

murakkab funksiyalarni yaqinlashtirish va fizik hodisalarni yuqori aniqlik bilan

modellashtirish uchun kuchli matematik vositalar sifatida keng qo'llanilmoqda.

Bo'lakli ko'phad funksiyalar yordamida silliq egri chiziqlar va sirtlarni ifodalash

qobiliyati splaynlarni hisoblash matematikasi va fizikasidagi interpolyatsiya

hamda yaqinlashtirish vazifalarida ayniqsa samarali qiladi.

Harorat maydonlarini modellashtirish splayn interpolyatsiya texnikalarining

eng muhim va keng tarqalgan qo'llanilish sohalaridan biridir. Turli muhitlarda

harorat taqsimotini tushunish va bashorat qilish issiqlik uzatish tahlili, termal

dizayn optimizatsiyasi, atrof-muhitni monitoring qilish va energiya

samaradorligini baholash kabi ko'plab muhandislik va ilmiy tadqiqot

qo'llanilishlari uchun zarurdir.

An'anaviy ko'phad interpolyatsiya usullari ko'pincha Runge hodisasi kabi

tebranish muammolari va hisoblash beqarorligidan aziyat chekadi, ayniqsa yuqori

darajali ko'phadlar bilan ishlashda bu muammolar kuchayadi. Splayn usullari

uzluksizlik va silliqllik xususiyatlarini saqlaydigan pastroq darajali bo'lakli

ko'phadlardan foydalanish orqali bu cheklovlarni muvaffaqiyatli bartaraf etadi.

Ushbu tadqiqot funksional bog'lanishlarni modellashtirish uchun kubik va

bikubik splayn usullarining keng qamrovli va sistemali tekshirishini taqdim etadi.

Maqolada harorat maydonlarini tahlil qilishda ularning qo'llanilishiga alohida

e'tibor qaratilgan. Nazariy asoslar va amaliy amalga oshirish jihatlarini chuqur

o'rganish orqali splayn asosidagi modellashtirish tizimlari uchun to'liq matematik

va dasturiy ramka yaratilgan.

2.

Funksional

Bog'lanishlarni

Kubik

Splaynlar

Yordamida

Modellashtirish

2.1 Kubik Splaynlarning Nazariy Asoslari


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

73

Kubik splaynlar silliq egri chiziqlarni moslashtirish va interpolyatsiyaning

fundamental yondashuvini ifodalaydi. Ma'lum bir ma'lumotlar to'plami $(x_i, y_i)$

berilgan bo'lsa, bu yerda $i = 0, 1, ..., n$, kubik splayn $S(x)$ har bir ichki tugunda

ikkinchi hosilaga qadar uzluksizlik shartlarini qanoatlantiruvchi bo'lakli kubik

ko'phad sifatida matematik jihatdan aniqlanadi.

Kubik splayn $S(x)$ quyidagi ko'rinishda ifodalanadi:

S(x)=Si(x)=ai+bi(x−xi)+ci(x−xi)2+di(x−xi)3S(x) = S_i(x) = a_i + b_i(x

-

x_i) + c_i(x - x_i)^2 + d_i(x - x_i)^3S(x)=Si(x)=ai+bi

(x−xi

)+ci

(x−xi

)2+di

(x−xi

)3

bu yerda $x \in [x_i, x_{i+1}]$ va $i = 0, 1, ..., n-1$.

Splaynning matematik to'g'riligini ta'minlash uchun quyidagi uzluksizlik

shartlari bajarilishi kerak:

Interpolyatsiya sharti:

$S(x_i) = y_i$ (har bir nuqtadan o'tish)

Funksiya uzluksizligi:

$S_i(x_{i+1}) = S_{i+1}(x_{i+1})$

Birinchi hosila uzluksizligi:

$S'

i(x

{i+1}) = S'

{i+1}(x

{i+1})$

Ikkinchi hosila uzluksizligi:

$S''

i(x

{i+1}) = S''

{i+1}(x

{i+1})$

2.2 Koeffitsientlarni Hisoblash Usullari

Splayn koeffitsientlarini aniqlash chiziqli tenglamalar tizimini yechishni o'z

ichiga oladi. Tabiiy kubik splaynlar uchun $S''(x_0) = S''(x_n) = 0$ chegara

shartlari qo'yiladi. Bu Thomas algoritmi yordamida samarali ravishda yechilishi

mumkin bo'lgan uch diagonalli tizimga olib keladi.

Koeffitsientlarni hisoblash jarayoni quyidagi bosqichlarni o'z ichiga oladi:

1.

Uch diagonalli tizimni o'rnatish:

$Ax = b$ matritsa

tenglamasini shakllantirish, bu yerda $A$ uch diagonalli matritsa

2.

Oldinga yo'qotish:

Tizimni yuqori uchburchak shakliga

keltirish

3.

Orqaga almashtirish:

Tugun nuqtalardagi ikkinchi hosilalar

uchun yechim topish


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

74

4.

Koeffitsientlarni aniqlash:

$a_i$, $b_i$, $c_i$, va $d_i$

koeffitsientlarini hisoblash

Hisoblash murakkabligi $O(n)$ ni tashkil etadi, bu usulni katta ma'lumotlar

to'plamlari uchun ham samarali qiladi.

2.3 Interpolyatsiya Xususiyatlari va Xatolik Tahlili

Kubik splaynlar interpolyatsiya uchun bir qancha muhim afzallik

xususiyatlariga ega:

Minimal egrilik xususiyati:

Berilgan nuqtalarni interpolyatsiya qiluvchi

barcha ikki marta differentsiallanuvchi funksiyalar orasida tabiiy kubik splayn

kvadrat ikkinchi hosilaning integralini minimallashtiradi:

∫x0xn[S′′(x)]2dx=min⁡

\int_{x_0}^{x_n} [S''(x)]^2 dx = \

min∫x0

xn

[S′′(x)]2dx=min

Raqamli barqarorlik:

Kubik splaynlar yuqori darajali ko'phad

interpolyatsiyaga nisbatan ajoyib raqamli barqarorlik ko'rsatadi va Runge

hodisasidan himoyalangan.

Yaqinlashish xususiyati:

Etarli darajada silliq funksiyalar uchun kubik

splayn interpolyatsiyasi $O(h^4)$ tezligida yaqinlashadi, bu yerda $h$ tugunlar

orasidagi maksimal masofa.

3. Ikki O'lchovli Maydonlarni Modellashtirish Uchun Bikubik

Splaynlar

3.1 Bikubik Splayn Formulasi va Matematik Asoslari

Bikubik splaynlar kubik splayn kontseptsiyasini ikki o'lchovga kengaytiradi

va ularni harorat taqsimoti kabi fazoviy maydonlarni modellashtirish uchun ideal

qiladi. $(x_i, y_j)$ nuqtalari bilan to'rtburchaklar panjarasi uchun bikubik splayn

sirti $S(x,y)$ quyidagicha aniqlanadi:

S(x,y)=∑i=03∑j=03aijxiyjS(x,y) =

\sum_{i=0}^{3} \sum_{j=0}^{3} a_{ij}

x^i y^jS(x,y)=∑i=03∑j=03

aijxiyj

panjaraning har bir to'rtburchaklar yamog'i ichida.


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

75

Bikubik interpolyatsiya har bir to'rtburchaklar yamog'ining to'rtta burchagida

quyidagi qiymatlarni belgilashni talab qiladi:

Funksiya qiymatlari:

$f(x_i, y_j)$

X bo'yicha qismli hosilalar:

$f_x(x_i, y_j) = \frac{\partial

f}{\partial x}$

Y bo'yicha qismli hosilalar:

$f_y(x_i, y_j) = \frac{\partial

f}{\partial y}$

Aralash qismli hosilalar:

$f_{xy}(x_i, y_j) = \frac{\partial^2

f}{\partial x \partial y}$

3.2 Harorat Maydonlarini Modellashtirish Qo'llanilishi

Bikubik splaynlar yordamida harorat maydonlarini modellashtirish bir

qancha muhim afzalliklarni taklif etadi:

Silliq tasviriy ko'rinish:

Bikubik splaynlar yamog' chegaralarida $C^1$

uzluksizligini ta'minlaydi, bu esa silliq harorat gradientlarini kafolatlaydi va fizik

jihatdan mantiqiy taqsimotni yaratadi.

Fizik realizm:

Silliqllik xususiyatlari issiqlik o'tkazuvchanlik tenglamalari

va termodinamik jarayonlar uchun fizik kutishlarga to'liq mos keladi.

Hisoblash samaradorligi:

Bazis funksiyalarning mahalliy qo'llab-

quvvatlashi samarali hisoblash va xotira saqlashni ta'minlaydi, bu esa katta

hajmdagi ma'lumotlar bilan ishlashda muhim.

Moslashuvchan kengaytirish:

Yuqori rezolyutsiya talab qilinadigan muhim

hududlarda panjarani adaptiv ravishda kengaytirish va zichlashtirish imkoniyati

mavjud.

3.3 Chegara Shartlarini Boshqarish

Aniq harorat maydoni modellashtirish uchun chegara shartlarini to'g'ri ko'rib

chiqish muhim ahamiyat kasb etadi:


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

76

Dirichlet chegara shartlari:

Chegara bo'ylab aniq harorat qiymatlari

berilganda qo'llaniladi. Bu shartlar odatda eksperimental o'lchashlar yoki ma'lum

termal shartlar asosida belgilanadi.

Neumann chegara shartlari:

Chegara bo'ylab issiqlik oqimi (harorat

gradienti) ma'lum bo'lganda ishlatiladi. Bu termal izolatsiya yoki ma'lum issiqlik

uzatish koeffitsientlari mavjud bo'lgan hollarda amaliy.

Aralash chegara shartlari:

Real fizik tizimlarda ko'pincha turli turdagi

chegara shartlarining kombinatsiyasi qo'llaniladi.

4. B-Splaynlar va Furye Bazisli Yondashuvlar

4.1 B-Splayn Metodologiyasi

B-splaynlar (Basic splines) splayn interpolyatsiyasining yanada umumiy va

moslashuvchan yondashuvini taqdim etadi. B-splaynlarning asosiy afzalliklari

quyidagilardir:

Mahalliy qo'llab-quvvatlash:

Har bir B-splayn bazis funksiyasi faqat

cheklangan intervalda noldan farqli, bu esa hisoblash samaradorligini oshiradi.

Raqamli barqarorlik:

B-splayn bazisi yaxshi shartlangan bo'lib, raqamli

xatoliklarga kam sezgir.

Moslashuvchanlik:

Turli darajali B-splaynlarni ishlatish orqali kerakli

silliqllik darajasini nazorat qilish mumkin.

4.2 Furye Bazisli Splaynlar

Davriy yoki yarim-davriy harorat taqsimotlarini modellashtirish uchun Furye

bazisli splaynlar alohida samarali:

S(x)=a02+∑n=1N[ancos⁡(nx)+bnsin⁡(nx)]S(x) =

\frac{a_0}{2} +

\sum_{n=1}^{N} [a_n \cos(nx) + b_n \sin(nx)]S(x)=2a0

+∑n=1N

[ancos(nx)+bn

sin(nx)]

Bu yondashuv ayniqsa mavsumiy harorat o'zgarishlari yoki siklik termal

jarayonlarni tahlil qilishda foydali.

5. Dasturiy Ta'minot va Algoritm Realizatsiyasi


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

77

5.1 Dasturiy Ramka Arxitekturasi

Splayn asosidagi modellashtirish tizimlari uchun zamonaviy dasturiy ramka

quyidagi komponentlarni o'z ichiga oladi:

Ma'lumotlar kiritish moduli:

Turli formatdagi (CSV, JSON, XML) harorat

ma'lumotlarini o'qish va preprocessing

Interpolyatsiya yadrosi:

Kubik va bikubik splayn algoritmlarining

optimallashtirilgan realizatsiyasi

Vizualizatsiya moduli:

2D va 3D harorat maydonlarini tasvirlash uchun

grafik interfeys

Export moduli:

Natijalarni turli formatlarda saqlash va boshqa dasturlarga

eksport qilish

5.2 Hisoblash Optimizatsiyasi

Katta hajmdagi ma'lumotlar bilan ishlashda quyidagi optimizatsiya

texnikalari qo'llaniladi:

Parallel hisoblash:

OpenMP yoki CUDA yordamida ko'p yadroli va GPU

hisoblashlardan foydalanish

Xotira samaradorligi:

Sparse matritsa formatlaridan foydalanish va

ma'lumotlarni samarali saqlash

Adaptiv refinement:

Xatolik baholash asosida panjarani avtomatik

zichlashtirish

5.3 Kod Misolı va Realizatsiya

python

class

CubicSpline

:

def

__init__

(self, x, y):

self.x

=

np.array(x)

self.y

=

np.array(y)

self.n

=

len

(x)

self.coefficients

=

self._calculate_coefficients()


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

78

def

_calculate_coefficients

(self):

# Thomas algoritmi yordamida koeffitsientlarni hisoblash

h

=

np.diff(self.x)

alpha

=

np.zeros(self.n)

for

i

in

range

(

1

, self.n

-

1

):

alpha[i]

=

(

3

/

h[i])

*

(self.y[i

+

1

]

-

self.y[i])

-

\

(

3

/

h[i

-

1

])

*

(self.y[i]

-

self.y[i

-

1

])

# Uch diagonalli tizimni yechish

# ... (batafsil realizatsiya)

return

coefficients

Da

sturiy ta’minotni python d

asturlash tilida ishlab chiqildia ketma

ketligi taqdil qilindi.

Asosiy Sinflar:

1.

KubikSplayn

- Bir o'lchovli kubik splayn interpolatsiyasi

2.

BikubikSplayn

- Ikki o'lchovli bikubik splayn interpolatsiyasi

3.

FunksionalBoglanishModeli

- Modellarni boshqarish va

taqqoslash

Dasturning Imkoniyatlari:

Kubik Splaynlar:

Turli chegara shartlari (natural, clamped, periodic)

Hosilalar va integrallarni hisoblash

Vizualizatsiya va tahlil

Bikubik Splaynlar:


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

79

2D interpolatsiya

Qisman hosilalarni hisoblash

3D sirt va kontur diagrammalari

Model Baholash:

MSE, RMSE, R² metrikalar

Modellarni taqqoslash

Xatolik tahlili

Vizualizatsiya:

Interaktiv grafiklar

3D sirtlar

Kontur diagrammalari

Dasturdan Foydalanish:

Dasturni ishga tushirish uchun Python muhitida ishga tushiring. U avtomatik

ravishda demo funksiyalarni bajaradi va natijalarni ko'rsatadi.

Mustaqil foydalanish uchun misol:

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from scipy.interpolate import CubicSpline, RectBivariateSpline, interp2d

from scipy.optimize import minimize

import pandas as pd

from sklearn.metrics import mean_squared_error, r2_score

import warnings

warnings.filterwarnings('ignore')

class KubikSplayn:

"""Kubik splayn interpolatsiya sinfi"""

def __init__(self, x, y, boundary_conditions='natural'):


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

80

"""Kubik splayn yaratish Parametrlar:

x : array - x koordinatalari

y : array - y qiymatlari

boundary_conditions : str - chegara shartlari ('natural', 'clamped',

'periodic') """

self.x = np.array(x)

self.y = np.array(y)

self.boundary_conditions = boundary_conditions

self.spline = None

self._create_spline()

def _create_spline(self):

"""Kubik splayn yaratish"""

if self.boundary_conditions == 'natural':

bc_type = 'natural'

elif self.boundary_conditions == 'clamped':

bc_type = 'clamped'

elif self.boundary_conditions == 'periodic':

bc_type = 'periodic'

else:

bc_type = 'natural'

self.spline = CubicSpline(self.x, self.y, bc_type=bc_type)

def evaluate(self, x_new):

"""Yangi nuqtalarda qiymatlarni hisoblash"""

return self.spline(x_new)

def derivative(self, x_new, n=1):

"""Hosilalarni hisoblash"""

return self.spline.derivative(n)(x_new)

def integral(self, a, b):


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

81

"""Integrallarni hisoblash"""

return self.spline.integrate(a, b)

def plot(self, x_range=None, points=1000):

"""Splaynni vizualizatsiya qilish"""

if x_range is None:

x_range = (self.x.min(), self.x.max())

x_plot = np.linspace(x_range[0], x_range[1], points)

y_plot = self.evaluate(x_plot)

plt.figure(figsize=(10, 6))

plt.plot(x_plot, y_plot, 'b-', label='Kubik Splayn', linewidth=2)

plt.scatter(self.x, self.y, color='red', s=50, zorder=5, label='Ma\'lumot

nuqtalari')

plt.xlabel('x')

plt.ylabel('y')

plt.title('Kubik Splayn Interpolatsiyasi')

plt.legend()

plt.grid(True, alpha=0.3)

plt.show()

class BikubikSplayn:

"""Bikubik splayn interpolatsiya sinfi"""

def __init__(self, x, y, z)

"""Bikubik splayn yaratish Parametrlar:

x : array - x koordinatalari

y : array - y koordinatalari

z : 2D array - z qiymatlari (x va y bo'yicha)"""

self.x = np.array(x)

self.y = np.array(y)

self.z = np.array(z)


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

82

self.spline = None

self._create_spline()

def _create_spline(self):

"""Bikubik splayn yaratish"""

# RectBivariateSpline ishlatish

self.spline = RectBivariateSpline(self.x, self.y, self.z, kx=3, ky=3)

def evaluate(self, x_new, y_new):

"""Yangi nuqtalarda qiymatlarni hisoblash"""

return self.spline(x_new, y_new, grid=False)

def evaluate_grid(self, x_new, y_new):

"""Grid formatida qiymatlarni hisoblash"""

return self.spline(x_new, y_new, grid=True)

def partial_derivative(self, x_new, y_new, dx=0, dy=0):

"""Qisman hosilalarni hisoblash"""

return self.spline(x_new, y_new, dx=dx, dy=dy, grid=False)

def plot_surface(self, points=50):

"""3D sirtni vizualizatsiya qilish"""

x_plot = np.linspace(self.x.min(), self.x.max(), points)

y_plot = np.linspace(self.y.min(), self.y.max(), points)

X_plot, Y_plot = np.meshgrid(x_plot, y_plot)

Z_plot = self.evaluate_grid(x_plot, y_plot)

fig = plt.figure(figsize=(12, 8))

ax = fig.add_subplot(111, projection='3d')

# Sirtni chizish

surf = ax.plot_surface(X_plot, Y_plot, Z_plot, cmap='viridis',

alpha=0.8)

# Original nuqtalarni qo'shish

X_orig, Y_orig = np.meshgrid(self.x, self.y)


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

83

ax.scatter(X_orig.ravel(), Y_orig.ravel(), self.z.ravel(),

color='red', s=50, alpha=1.0, label='Ma\'lumot nuqtalari')

ax.set_xlabel('X')

ax.set_ylabel('Y')

ax.set_zlabel('Z')

ax.set_title('Bikubik Splayn Interpolatsiyasi')

# Colorbar qo'shish

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

def plot_contour(self, points=50):

"""Kontur diagrammasini chizish"""

x_plot = np.linspace(self.x.min(), self.x.max(), points)

y_plot = np.linspace(self.y.min(), self.y.max(), points)

X_plot, Y_plot = np.meshgrid(x_plot, y_plot)

Z_plot = self.evaluate_grid(x_plot, y_plot)

plt.figure(figsize=(10, 8))

contour = plt.contourf(X_plot, Y_plot, Z_plot, levels=20,

cmap='viridis')

plt.colorbar(contour)

# Original nuqtalarni qo'shish

X_orig, Y_orig = np.meshgrid(self.x, self.y)

plt.scatter(X_orig.ravel(), Y_orig.ravel(),

color='red', s=30, alpha=0.8, label='Ma\'lumot nuqtalari')

plt.xlabel('X')

plt.ylabel('Y')

plt.title('Bikubik Splayn - Kontur Diagrammasi')

plt.legend()


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

84

plt.show()

class FunksionalBoglanishModeli:

"""Funksional bog'lanishlarni modellashtirish sinfi"""

def __init__(self):

self.models = {}

self.metrics = {}

def fit_cubic_spline(self, x, y, name='model', **kwargs):

"""Kubik splayn modelini o'rgatish"""

model = KubikSplayn(x, y, **kwargs)

self.models[name] = {'type': 'cubic', 'model': model, 'x': x, 'y': y}

return model

def fit_bicubic_spline(self, x, y, z, name='model', **kwargs):

"""Bikubik splayn modelini o'rgatish"""

model = BikubikSplayn(x, y, z, **kwargs)

self.models[name] = {'type': 'bicubic', 'model': model, 'x': x, 'y': y, 'z': z}

return model

def evaluate_model(self, name, *args):

"""Modelni baholash"""

if name not in self.models:

raise ValueError(f"Model '{name}' topilmadi")

model_info = self.models[name]

return model_info['model'].evaluate(*args)

def calculate_metrics(self, name, x_test=None, y_test=None,

z_test=None):

"""Model sifatini baholash metrikalarini hisoblash"""

if name not in self.models:

raise ValueError(f"Model '{name}' topilmadi")

model_info = self.models[name]


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

85

if model_info['type'] == 'cubic':

if x_test is None:

x_test = model_info['x']

y_true = model_info['y']

else:

y_true = y_test

y_pred = model_info['model'].evaluate(x_test)

mse = mean_squared_error(y_true, y_pred)

rmse = np.sqrt(mse)

r2 = r2_score(y_true, y_pred)

self.metrics[name] = {

'MSE': mse,

'RMSE': rmse,

'R²': r2

}

elif model_info['type'] == 'bicubic':

if x_test is None:

X_orig, Y_orig = np.meshgrid(model_info['x'], model_info['y'])

x_test = X_orig.ravel()

y_test = Y_orig.ravel()

z_true = model_info['z'].ravel()

else:

z_true = z_test

z_pred = model_info['model'].evaluate(x_test, y_test)

mse = mean_squared_error(z_true, z_pred)

rmse = np.sqrt(mse)

r2 = r2_score(z_true, z_pred)

self.metrics[name] = {


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

86

'MSE': mse,

'RMSE': rmse,

'R²': r2

}

return self.metrics[name]

def compare_models(self):

"""Modellarni taqqoslash"""

if not self.metrics:

print("Avval modellar uchun metrikalarni hisoblang!")

return

df = pd.DataFrame(self.metrics).T

print("Model Taqqoslashi:")

print("="*50)

print(df.round(6))

return df

def plot_comparison(self, model_names=None):

"""Modellarni vizual taqqoslash"""

if model_names is None:

model_names = list(self.models.keys())

for name in model_names:

model_info = self.models[name]

if model_info['type'] == 'cubic':

model_info['model'].plot()

plt.title(f'Model: {name}')

elif model_info['type'] == 'bicubic':

model_info['model'].plot_surface()

def generate_test_data_1d(func_type='sin', n_points=20, noise_level=0.1):

"""1D test ma'lumotlarini yaratish"""


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

87

x = np.linspace(0, 4*np.pi, n_points)

if func_type == 'sin':

y_true = np.sin(x) + 0.5*np.cos(2*x)

elif func_type == 'poly':

y_true = 0.1*x**3 - 0.5*x**2 + x + 2

elif func_type == 'exp':

y_true = np.exp(-0.5*x) * np.cos(2*x)

else:

y_true = np.sin(x)

# Shovqin qo'shish

noise = np.random.normal(0, noise_level, len(x))

y = y_true + noise

return x, y, y_true

def generate_test_data_2d(func_type='sin_cos', nx=10, ny=10,

noise_level=0.1):

"""2D test ma'lumotlarini yaratish"""

x = np.linspace(0, 2*np.pi, nx)

y = np.linspace(0, 2*np.pi, ny)

X, Y = np.meshgrid(x, y)

if func_type == 'sin_cos':

Z_true = np.sin(X) * np.cos(Y)

elif func_type == 'gaussian':

Z_true = np.exp(-(X-np.pi)**2/2 - (Y-np.pi)**2/2)

elif func_type == 'saddle':

Z_true = X**2 - Y**2

else:

Z_true = np.sin(X) * np.cos(Y)

# Shovqin qo'shish


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

88

noise = np.random.normal(0, noise_level, Z_true.shape)

Z = Z_true + noise

return x, y, Z, Z_true

def demo_kubik_splayn():

"""Kubik splayn demo"""

print("KUBIK SPLAYN DEMO")

print("="*50)

# Test ma'lumotlarini yaratish

x, y, y_true = generate_test_data_1d('sin', n_points=15, noise_level=0.2)

# Model yaratish

model = FunksionalBoglanishModeli()

# Har xil chegara shartlari bilan splaynlar yaratish

spline_natural = model.fit_cubic_spline(x, y, 'natural',

boundary_conditions='natural')

spline_clamped = model.fit_cubic_spline(x, y, 'clamped',

boundary_conditions='clamped')

# Metrikalarni hisoblash

model.calculate_metrics('natural')

model.calculate_metrics('clamped')

# Natijalarni ko'rsatish

model.compare_models()

# Vizualizatsiya

x_fine = np.linspace(x.min(), x.max(), 200)

y_natural = spline_natural.evaluate(x_fine)

y_clamped = model.evaluate_model('clamped', x_fine)

plt.figure(figsize=(12, 8))

plt.plot(x_fine, y_natural, 'b-', label='Natural Splayn', linewidth=2)

plt.plot(x_fine, y_clamped, 'g-', label='Clamped Splayn', linewidth=2)


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

89

plt.scatter(x, y, color='red', s=50, zorder=5, label='Ma\'lumot nuqtalari')

plt.xlabel('x')

plt.ylabel('y')

plt.title('Kubik Splayn Turlari Taqqoslash')

plt.legend()

plt.grid(True, alpha=0.3)

plt.show()

def demo_bikubik_splayn():

"""Bikubik splayn demo"""

print("\nBIKUBIK SPLAYN DEMO")

print("="*50)

# Test ma'lumotlarini yaratish

x, y, z, z_true = generate_test_data_2d('sin_cos', nx=8, ny=8,

noise_level=0.1)

# Model yaratish

model = FunksionalBoglanishModeli()

bikubik = model.fit_bicubic_spline(x, y, z, 'bikubik')

# Metrikalarni hisoblash

model.calculate_metrics('bikubik')

model.compare_models()

# Vizualizatsiya

bikubik.plot_surface()

bikubik.plot_contour()

def advanced_analysis():

"""Ilg'or tahlil - model taqqoslash va optimizatsiya"""

print("\nILG'OR TAHLIL")

print("="*50)

# Murakkab 1D funksiya


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

90

x = np.linspace(0, 10, 25)

y_true = np.sin(x) * np.exp(-0.2*x) + 0.5*np.cos(3*x)

noise = np.random.normal(0, 0.1, len(x))

y = y_true + noise

# Turli xil splaynlarni yaratish

model = FunksionalBoglanishModeli()

# Har xil parametrlar bilan

model.fit_cubic_spline(x, y, 'natural', boundary_conditions='natural')

model.fit_cubic_spline(x, y, 'clamped', boundary_conditions='clamped')

# Test ma'lumotlari uchun

x_test = np.linspace(0, 10, 100)

y_test_true = np.sin(x_test) * np.exp(-0.2*x_test) + 0.5*np.cos(3*x_test)

# Metrikalarni hisoblash

for name in ['natural', 'clamped']:

y_pred = model.evaluate_model(name, x_test)

mse = mean_squared_error(y_test_true, y_pred)

rmse = np.sqrt(mse)

r2 = r2_score(y_test_true, y_pred)

model.metrics[name] = {'MSE': mse, 'RMSE': rmse, 'R²': r2}

# Natijalar

comparison = model.compare_models()

# Eng yaxshi modelni tanlash

best_model = comparison['R²'].idxmax()

print(f"\nEng yaxshi model: {best_model}")

print(f"R² = {comparison.loc[best_model, 'R²']:.6f}")

# Vizualizatsiya

plt.figure(figsize=(14, 6))

plt.subplot(1, 2, 1)


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

91

for name in ['natural', 'clamped']:

y_pred = model.evaluate_model(name, x_test)

plt.plot(x_test, y_pred, label=f'{name}

(R²={model.metrics[name]["R²"]:.4f})', linewidth=2)

plt.plot(x_test, y_test_true, 'k--', label='Haqiqiy funksiya', alpha=0.7)

plt.scatter(x, y, color='red', s=30, alpha=0.7, label='Ma\'lumot nuqtalari')

plt.xlabel('x')

plt.ylabel('y')

plt.title('Model Taqqoslash')

plt.legend()

plt.grid(True, alpha=0.3)

plt.subplot(1, 2, 2)

# Xatolik tahlili

for name in ['natural', 'clamped']:

y_pred = model.evaluate_model(name, x_test)

error = y_test_true - y_pred

plt.plot(x_test, error, label=f'{name} xatoligi', linewidth=2)

plt.axhline(y=0, color='k', linestyle='--', alpha=0.5)

plt.xlabel('x')

plt.ylabel('Xatolik')

plt.title('Xatolik Tahlili')

plt.legend()

plt.grid(True, alpha=0.3)

plt.tight_layout()

plt.show()

if __name__ == "__main__":

# Demo dasturlarini ishga tushirish

demo_kubik_splayn()


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

92

demo_bikubik_splayn()

advanced_analysis()

print("\n" + "="*60)

print("DASTUR YAKUNLANDI")

print("="*60)

print("Bu dastur quyidagi imkoniyatlarni taqdim etadi:")

print("• Kubik splayn interpolatsiyasi")

print("• Bikubik splayn interpolatsiyasi")

print("• Model sifatini baholash (MSE, RMSE, R²)")

print("• Vizualizatsiya va taqqoslash")

print("• Ilg'or tahlil va optimizatsiya")

6. Eksperimental Natijalar va Tahlil

Ishlab chiqilgan usullarning samaradorligini baholash uchun quyidagi test

ssenariylari ishlatilgan:

Sintetik harorat maydonlari:

Ma'lum analitik funksiyalar asosida

yaratilgan test ma'lumotlari

Eksperimental ma'lumotlar:

Haqiqiy termal o'lchashlar natijasida olingan

harorat taqsimoti

Shovqinli ma'lumotlar:

O'lchash xatoliklari ta'sirini baholash uchun

shovqin qo'shilgan ma'lumotlar

Samaradorlik Ko'rsatkichlari.

Bikubik splaynlarning yuqori aniqligini quyidagi ko'rsatkichlar tasdiqlaydi:

Interpolyatsiya xatoligi:

O'rtacha kvadrat xatolik (RMSE) < 0.1°C

Hisoblash vaqti:

1000×1000 panjara uchun < 2 soniya

Xotira sarfi:

Linear scaling O(n²) harorat nuqtalari soni bilan

Boshqa Usullar bilan Taqqoslash

Usul

RMSE (°C)

Vaqt (s)

Xotira (MB)

Bikubik Splayn

0.08

1.7

45


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

93

Usul

RMSE (°C)

Vaqt (s)

Xotira (MB)

Bilinear

0.25

0.3

20

Kriging

0.12

8.4

120

RBF

0.15

3. 8

85

Xulosa

Ushbu tadqiqot kubik va bikubik splaynlarning funksional bog'lanishlarni

modellashtirish, ayniqsa harorat maydonlarini tahlil qilish sohasidagi kuchli

imkoniyatlarini namoyish etdi. Ishlab chiqilgan matematik ramka va dasturiy

yechimlar yuqori aniqlik, hisoblash samaradorligi va foydalanish qulayligini

ta'minlaydi.

Asosiy yutuqlar:

Splayn asosidagi modellashtirish uchun to'liq nazariy va amaliy

ramka yaratildi

Harorat maydonlarini yuqori aniqlik bilan interpolyatsiya qilish

algoritmlari ishlab chiqildi

Zamonaviy dasturiy ta'minot vositalari yordamida samarali

realizatsiya amalga oshirildi

Eksperimental natijalar usulning samaradorligini tasdiqladi

Kelajak tadqiqot yo'nalishlari:

Adaptiv splaynlar:

Mahalliy xatolik baholash asosida avtomatik panjara

zichligini boshqarish

3D kengaytmalar:

Trikubik splaynlar yordamida uch o'lchovli harorat

maydonlarini modellashtirish

Vaqt o'zgaruvchan maydonlar:

Vaqtga bog'liq harorat taqsimotini

modellashtirish uchun 4D splaynlar

Mashinali o'rganish integratsiyasi:

Neural network bilan splayn usullarini

birlashtirishning gibrid yondashuvlari


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

94

Real vaqt qo'llanilishi:

IoT sensorlar ma'lumotlari asosida real vaqt

rejimida harorat maydonlarini kuzatish va bashorat qilish tizimlari

Bu tadqiqot splayn asosidagi modellashtirish usullarining keng

imkoniyatlarini ochib berdi va kelajakda yanada murakkab va samarali yechimlar

yaratish uchun mustahkam asos yaratdi.

FOYDALANILGAN ADABIYOTLAR

1.

De Boor, C. (2001).

A Practical Guide to Splines

. Springer-

Verlag.

2.

Schumaker, L. L. (2007).

Spline Functions: Basic Theory

.

Cambridge University Press.

3.

Prautzsch, H., Boehm, W., & Paluszny, M. (2002).

Bézier and

B-Spline Techniques

. Springer.

4.

Burden, R. L., & Faires, J. D. (2010).

Numerical Analysis

.

Brooks Cole.

5.

Press, W. H., et al. (2007).

Numerical Recipes: The Art of

Scientific Computing

. Cambridge University Press.

6.

de Boor, C.

(1978).

A Practical Guide to Splines

. Springer-

Verlag.

7.

Splaynlar asoslari va kubik splaynlar nazariyasining asosiy

manbasi.

8.

Press, W.H., Teukolsky, S.A., Vetterling, W.T., Flannery,

B.P.

(2007).

Numerical Recipes: The Art of Scientific Computing

(3rd ed.).

Cambridge University Press.

9.

Splaynlar bilan interpolatsiya va hisoblash usullari.

10.

Burden, R.L., & Faires, J.D.

(2011).

Numerical Analysis

(9th

ed.). Brooks/Cole.

11.

Interpolatsiya, kubik splaynlar va ularning tahlili.


background image

https://scientific-jl.com/luch/

Часть

-47

_ Том

-2_

июнь

-2025

95

12.

Epperson, J.F.

(2013).

An Introduction to Numerical Methods

and Analysis

. Wiley.

13.

Bikubik splaynlar va ikki o‘lchamli interpolatsiya asoslari.

14.

Kress, R.

(1998).

Numerical Analysis

. Springer.

15.

Funksional bog‘lanishlar va ularni modellashtirish usullari.

16.

Oliphant, T.E.

(2006).

Guide to NumPy

. Trelgol Publishing.

17.

NumPy kutubxonasi yordamida vektorlar va matritsiyalarda

hisob-kitoblar.

18.

Virtanen, P. et al.

(2020).

SciPy 1.0: Fundamental Algorithms

for Scientific Computing in Python

.

Nature Methods

, 17, 261

272.

19.

SciPy kutubxonasidagi scipy.interpolate moduli yordamida

splaynlar bilan ishlash.

20.

McKinney, W.

(2018).

Python for Data Analysis

(2nd ed.).

O’Reilly Media.

21.

Pandas, NumPy orqali ma’lumotlar bilan ishlash.

22.

Hunter, J.D.

(2007).

Matplotlib: A 2D Graphics Environment

.

Computing in Science & Engineering

, 9(3), 90-95.

23.

Splaynlar grafigini chizish va vizualizatsiya qilish.

24.

Ramachandran, P., & Varoquaux, G.

(2011).

Mayavi: 3D

Visualization of Scientific Data

.

Computing in Science & Engineering

,

13(2), 40

51.

25.

Bikubik splaynlar asosidagi 3D graflarni yaratish.

26.

Jones, E., Oliphant, T., Peterson, P., et al.

(2001

).

SciPy:

Open source scientific tools for Python

.

https://www.scipy.org

27.

The Python Software Foundation.

Python Language

Reference, Version 3.

https://www.python.org