Plots modules usage

To use numerical_function_spaces.orlicz_spaces.plots in a project:

Binder - link to interactive notebooks session.

import matplotlib.pyplot as plt
import numpy as np

import numerical_function_spaces.orlicz_spaces as osm
def Orlicz_function(u):
    return np.where(u <= 1, 0, u ** 3 - 1)
osm.plot_Phi(Orlicz_function, du=0.01, u_max=5)
_images/e3feff5d97990c912c39045fd28d2a5a9ecc3aa51796a901099e0e986f1c53e0.png
# constant function
len_t = 1
x_1 = np.zeros(shape=(2, len_t))
x_1[1, 0] = 1  # measure of supports
x_1[0, 0] = 1  # values
for i in range(0, len_t):
    plt.hlines(y=x_1[0, i], xmin=sum([j for j in x_1[1, 0:i]]), xmax=sum([j for j in x_1[1, 0:i + 1]]),
               label='$x_1(t)$' if i == 0 else None, )
plt.legend()
plt.show()
plt.close()
_images/f59e8b0eb73848100bc4baf965ad23ac399416a2096fcee460bc1719728c1cea.png
# nieskończony nośnik
len_t = 1  # ile zbiorów w dziedzinie - mogą być nieskończone -  to nie jest długość dziedziny
x_4 = np.zeros(shape=(2, len_t))
x_4[1, 0] = np.inf  # miara nośnika 
x_4[0, 0] = 1  # wartości
plt.plot([0, 5], [x_4[0, 0], x_4[0, 0]], label='$x_4(t)$')
plt.xticks(np.arange(0, 6, step=1), labels=[str(i) if i < 5 else r"$\infty$" for i in range(6)])

plt.legend()
plt.show()
plt.close()
_images/712a2322127c35517cca263f02a1a774ff38b67837a1546279a3e5309ee826cd.png
# funkcja z różnymi nośnikami
len_t = 5  # ile zbiorów w dziedzinie - mogą być nieskończone -  to nie jest długość dziedziny
x_2 = np.zeros(shape=(2, len_t))  # x będzie macierzą. w pierwszym wierszu wartości w drugim miara nośnika do wartości
for i in range(len_t):
    x_2[1, i] = i + 1  # najpierw podaj miary nośników
    x_2[0, i] = 1 / (i + 1)  # potem wartości 
for i in range(0, len(x_2[1, :])):
    plt.hlines(y=x_2[0, i], xmin=sum([j for j in x_2[1, 0:i]]), xmax=sum([j for j in x_2[1, 0:i + 1]]),
               label='$x_2(t)$' if i == 0 else None)
plt.legend()
plt.show()
plt.close()
_images/56255fd3fa5d705eb35aa5395e829389dbc23bb88c5ce4a19d24c00dae16dc58.png
# funkcja definiowana na przedziale - z równymi nośnikami
t_max = 2 * np.pi
len_t = 1000
x_3 = np.zeros(shape=(2, len_t))  # x będzie macierzą. w pierwszym wierszu wartości w drugim miara nośnika do wartości
x_3[1, :] = t_max / len_t  # miara nośnika
for i in range(len_t):
    arg = t_max / len_t * i
    if arg <= 3:
        x_3[0, i] = np.sin(arg)
plt.plot(np.linspace(0, t_max, len(x_3[1, :])), x_3[0], label='$x_3(t)$')
plt.legend()
plt.show()
plt.close()
_images/8fc7f58032c7e8a043e1530910abb0df4d49896185d47eca05c4821142810671.png
for i in range(0, len_t):
    plt.hlines(y=x_3[0, i], xmin=sum([j for j in x_3[1, 0:i]]), xmax=sum([j for j in x_3[1, 0:i + 1]]),
               label='$x_3(t)$' if i == 0 else None, )
plt.legend()
plt.show()
plt.close()
_images/f261b4a007a77304d8c24ecaf3d1caf978200505f726b1288faebd61a32dde02.png
# non-incerasing rearangement
# x_3_ri = np.sort(abs(x_3[0,:]))[::-1]
x_3_ri = x_3[::, x_3[0,].argsort()[::-1]]  # malejąco
# x_3_ri = x_3[::, x_3[0,].argsort()[::1]]  # rosnąco
plt.plot(np.linspace(0, t_max, len(x_3[1, :])), x_3[0, :], label='$x = \sin(t)\chi_{[0,3]}(t)$')
plt.plot(np.linspace(0, t_max, len(x_3[1, :])), x_3_ri[0, :], label='$x^*$')
# plt.plot(np.linspace(0, t_max, len(x_3[1, :])), np.cos(np.linspace(0, t_max, len(x_3[1, :]))/2), label='$\cos(\\frac{t}{2})$')
plt.legend()
plt.show()
plt.close()
_images/84635b526d78c0b461fa97e7f0dc0567a956850455bb17961de1c166d79ff589.png

\(\kappa\) (kappa) function

Let \(x\in L_{\Phi,p}.\) For any \(k \in (0,\infty) \) define function \(\kappa_{p,x}(k)\colon (0,\infty) \rightarrow (0,\infty]\) by formula

\[\begin{equation*} \kappa_{p,x}(k) = \frac{1}{k}s_p\left(I_{\Phi }(kx)\right). \end{equation*}\]

Then \(K_{p}(x)\) is equal to set of such \(k\) for which \(\kappa_{p,x}(k)\) has infimum.

osm.plot_kappa(Orlicz_function, x_1,
               k_min=0.01,
               k_max=2.9,
               dk=0.001,
               p_norm=1,
               show_progress=False,
               save=False)
_images/c86a7b5d0bcab2f3c575cd9e425e777ff61aba50b5a52fc306687afa373c027b.png
k_min = .1
k_max = 5
dk = 0.01
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_1,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   show=True)
_images/bc71e7a85e44dceef7e14641d78d84cdc31f4876a9b0f169c3e514e8bc7bf805.png _images/c94e091af411bfa3a66f426a992203353fc68e08325d367ac08ad08a3a600117.png _images/60c6fbfdaeb85d14be70ad83142778154c371833048387e1f0f78a47f4997cef.png
def Orlicz_function(u):
    Phi = np.zeros(len(u))
    for i in range(len(u)):
        if u[i] <= 1:
            Phi[i] = u[i] ** 2
        elif u[i] <= 2:
            Phi[i] = 2 * u[i] - 1
        else:
            Phi[i] = (u[i] - 1) ** 2 + 2
    return Phi
osm.plot_Phi(Orlicz_function, du=0.01, u_max=3)
_images/49ba109b7d75eb653073deb89f2fcbe976be5e1229c7161ab4c3c9accb6a5fe9.png
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_1,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   show=True)
_images/461756f6d14ef4d262fa5daf631ef1b0a8d6c26a4f21dba3656bbd56cc9bf97b.png _images/0c6085d6eb7e6633eb94c91fbc8664da33732725c3d2154c2c28442067cecd81.png _images/42da83cd91d46626cc53e11a5f777c741e40ddfad76e2a3805afe0448c4085e9.png
def Orlicz_function(u):
    Phi = np.zeros(len(u))
    for i in range(len(u)):
        if u[i] <= 1:
            Phi[i] = 0
        elif u[i] <= 2:
            Phi[i] = u[i] - 1
        elif u[i] <= 3:
            Phi[i] = (u[i] - 1) ** 2
        else:
            Phi[i] = np.inf
    return Phi

# the same function as above
# def Orlicz_function(u):
#     return np.where(u <= 1, 0, np.where(u <= 2, u - 1, np.inf))
osm.plot_Phi(Orlicz_function, du=0.01, u_max=5)
_images/fc3879199b394a73577c01784e83f6063b9aa82da455c8c522d7136d9345d5f2.png
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_1,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   show=True)
_images/e61c732063fb15a57976adbc1fc157a4c4245e833b2b02dd39d53fa2279ed0aa.png _images/cba551f06e7a02802de0a5d1101dc7b76676dff01537d1d7de4fb4161ee77d1d.png _images/ad037e8bcd2fb674b27fe00b2b2f85c4cd617441466d4e93835f764ac9a3f99f.png
def Orlicz_function(u):
    Phi = np.zeros(len(u))
    for i in range(len(u)):
        if u[i] <= 1:
            Phi[i] = 0
        else:
            Phi[i] = u[i] - 1
    return Phi
osm.plot_Phi(Orlicz_function, du=0.01, u_max=5)
_images/2a6771bde905b04575bbfb4e942f84abf22fc9167a18a42e2daef0def7a816e3.png
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_1,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   show=True)
_images/f19e7ef0f346951f9cad72c9d182fdc84422c566e4f0235f405757338426f869.png _images/8a6c95bb849143ffb9c3c53c8ead3588a92a29fe885d3638f6fe4fd643058173.png _images/32dea82d74e041f5874c76e3ef654efcddad0b7516f8b32099c0561b8799bd21.png
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_2,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   show=True)
_images/e1c75372f6b6b01374aae87134faefc037719f7233cff75c01fa76bb15b2c7ee.png _images/ea16d75be605fff3c9a38fd4b7464946a532a45fb89a4fa43d930ee3387c629a.png _images/7ca9e86d191d2d2bf1190160e30ac281eb4047940be4c5683946ebf120ec5bed.png
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_3,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   show=True)
_images/5daa0b5c9c729f462c6631095b2818a52977a519e102f988af8c7beba693ac46.png _images/e9076adc08ed4ca2fbb1149c7e52c2b5e2bf78e051bade5fe12dcab1dc406f1a.png _images/e3f862cb91413b55516c5e005b8b835ff401f6f638fa42140f2614b51916e894.png

It is known, that for Orlicz norm for such Orlicz function we have

\[\begin{equation*} ||x|| = \int_0^1 x^{*}(t)\,d\mu(t) \end{equation*}\]

so

\[\begin{equation*} ||x_3|| = \int_0^1 \cos{\frac{t}{2}}\,dt = 2\sin{\frac{1}{2}} \end{equation*}\]

and we may check accuracy of calculation by

osm.Orlicz_norm_with_stars(Orlicz_function, x=x_3)[0] - 2 * np.sin(1 / 2)
np.float64(2.751016016100394e-07)
for x in [x_1, x_2, x_3, x_4]:
    osm.plot_kappa(Orlicz_function, x,
                   k_min=0.5,
                   k_max=3,
                   dk=dk,
                   p_norm=1,
                   show=True)
_images/84e13be42a8e4459120fb9c3c24d94ff1d3aa29fded1ee837319b021a39b9c20.png _images/df27c64cfda6fe1205902b895c23aa4cfe8a20a5131cffdef306d6c5e221a0d6.png _images/ef4ff08923ccdb41a5995c6e01dcf5b3c2089e6582e4eb6f5263a732287b6435.png
C:\Users\Adam\OneDrive - Zachodniopomorski Uniwersytet Technologiczny w Szczecinie\numerical_function_spaces\src\numerical_function_spaces\orlicz_spaces\norms.py:50: RuntimeWarning: invalid value encountered in multiply
  return 1 / k * (1 + np.nansum(Orlicz_function((k * x[0, :])) * x[1, :]))
_images/5f6c1f57092766c1c571de9c947fd98acf9765faf6422c2eeb885720bf93d919.png
for x in [x_1, x_2, x_3, x_4]:
    osm.plot_kappa(Orlicz_function, x,
                   k_min=0.5,
                   k_max=3,
                   dk=dk,
                   p_norm=2,
                   show=True)
_images/c955ec1c7ee3c01eb86357975e4d656a0978348ba033f7930544851563170246.png _images/5e827251b9689d865b0af1f8c7ebe3e7f44055d972287fc19fd79de8b3049f92.png _images/c96c4b7f6e4d259206ff52eeea50e4fb6b1644539473aff8b5a9138d6fb7ac0d.png
C:\Users\Adam\OneDrive - Zachodniopomorski Uniwersytet Technologiczny w Szczecinie\numerical_function_spaces\src\numerical_function_spaces\orlicz_spaces\norms.py:54: RuntimeWarning: invalid value encountered in multiply
  return 1 / k * (1 + (np.nansum(Orlicz_function((k * x[0, :])) * x[1, :]) ** p_norm)) ** (1 / p_norm)
_images/7ccb671d0c24ce831ea0649492e205aab4682c4e97341b267949146ae1d66575.png
for x in [x_1, x_2, x_3, x_4]:
    osm.plot_kappa(Orlicz_function, x,
                   k_min=0.5,
                   k_max=3,
                   dk=dk,
                   p_norm=np.inf,
                   show=True)
_images/b68f5a119f005658df65d88447c0c94729bd2e225ab167f58db027f51fe0d49c.png _images/7f4de52c331c352d8a50a6bd29f7808c482bf4869c90edbc978f2b92911e5027.png _images/e8c32e1076f69c539ce294bbed4fa373ae98642bdae19fdba7db35624c460d36.png
C:\Users\Adam\OneDrive - Zachodniopomorski Uniwersytet Technologiczny w Szczecinie\numerical_function_spaces\src\numerical_function_spaces\orlicz_spaces\norms.py:52: RuntimeWarning: invalid value encountered in multiply
  return 1 / k * (max(1, np.nansum(Orlicz_function((k * x[0, :])) * x[1, :])))
_images/1dbd9a319e0f6bb73292ef6b73d41c8e03761958af8015220b6d6c535b35b28b.png
for p_norm in [1, 2, np.inf]:
    osm.plot_kappa(Orlicz_function, x_4,
                   k_min=k_min,
                   k_max=k_max,
                   dk=dk,
                   p_norm=p_norm,
                   save=False, show=True)
_images/5d9c58c2077588e6039f7e3ba7786e198fb9f9e6f514a5ff8a6f6bddcb8ea8aa.png _images/230a3962e740f793e72226c7a4b39ce548eb4414775569ad5a056ec4479d6dd7.png _images/22478dc2d3c2f5a9a58aa470c2965cca4165d903a8f5378c90cc88638c5897b6.png

\(\alpha\) (alpha) and \(\tau\) (tau) function

For any \(k \in (0,\infty)\) define function \(\alpha_{p,x}(k)\colon (0,\infty) \rightarrow \left[-1, \infty \right]\) by formula

\[\begin{equation*} \alpha_{p,x}(k) =\left\{ \begin{array}{lll} I_{\Phi}^{p-1}(kx)I_{\Psi}(p_+(k|x|)) -1 & \text{if } & 1 \leq p <\infty, \\ -1 & \text{if} & p=\infty \text{ and } I_{\Phi}(kx)\leq 1 \\ I_{\Psi}(p_+(k|x|)) & \text{if } & p=\infty \text{ and } I_{\Phi}(kx) > 1 \end{array} \right. \end{equation*}\]

and, finally, define function \(\tau_{p,x}(k)\colon (0,\infty) \rightarrow \left[0,\infty\right]\) by formula

\[\begin{equation*} \tau_{p,x}(k) =\left\{ \begin{array}{lll} I_{\Psi}(p_+(k|x|)) & \text{if } & p =1, \\ I_{\Phi}^{{1}/{q}}(kx)I_{\Psi}^{{1}/{p}}(p_+(k|x|)) & \text{if} & 1 < p < \infty \text{ and } {1}/{p} + {1}/{q} = 1 \\ I_{\Phi}(kx) & \text{if } & p=\infty. \end{array} \right. \end{equation*}\]

Function \(\alpha_{p,x}(k)\) is called the norm attainability indicator.

def Orlicz_function(u):
    return np.where(u <= 1, u, u ** 2)


x = np.array([[1], [3]])
osm.plot_alpha(Orlicz_function, du=0.001, u_max=5, x=x, p_norm=1)
for k>2.5097499999999995: p(kx) is out of Psi domain - if needs try bigger u_max or smaller k_max
_images/63a29af043018310d41e0cbdcf0d45d502404b9b95243a9b02463bc278fd4937.png
for p_norm in [1, 2, np.inf]:
    osm.plot_alpha(Orlicz_function, du=0.001, u_max=5, x=x, p_norm=p_norm, k_max=2, show=True)
_images/674692c884d0f3732059d5d889654e656d8276f93c00cf2b07c6169dd19cbdbb.png _images/b73ae1798806068a8abdf63885b6d6ea7315ba14a099b6db35432d9f30c8c39b.png _images/2444331b6551b16fb14df37339957f6940695cfd5292645dd85bc2cee6bb4b2e.png
osm.plot_tau(Orlicz_function, du=0.001, u_max=5, x=x, p_norm=1)
for k>2.5097499999999995: p(kx) is out of Psi domain - if needs try bigger u_max or smaller k_max
_images/bb98448c992428972ea6be934f198845952b6e9d0c42457d1e937b6844730ca3.png
for p_norm in [1, 2, np.inf]:
    osm.plot_tau(Orlicz_function, du=0.001, u_max=5, x=x, p_norm=p_norm, k_max=2, show=True)
_images/827d6f85d566d3f897bda8eb7e0acca11a402e54a98dc7a37950af6ff17b9620.png _images/72a3a185f90cbc33982f35dff0d6ad9569fbb73794b9a32d298682579b1ab2ca.png _images/0274fd98d8070cf5ca7ae7a091da2395b2311fd373db2f0b49f754b52ec4e477.png