{"id":100,"date":"2023-02-28T09:30:50","date_gmt":"2023-02-28T08:30:50","guid":{"rendered":"https:\/\/softinery.com\/website\/?page_id=100"},"modified":"2024-01-25T07:40:29","modified_gmt":"2024-01-25T06:40:29","slug":"uklad-rownan-algebraicznych-rozniczkowych","status":"publish","type":"page","link":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/","title":{"rendered":"Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie"},"content":{"rendered":"\n<p>R\u00f3wnania algebraiczne r\u00f3\u017cniczkowe&nbsp;(DAE &#8211; Differential-Algebraic Equations) to r\u00f3wnania zawieraj\u0105ce nieznan\u0105 funkcj\u0119 i jej pochodne. Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w swojej og\u00f3lnej formie opisany jest nast\u0119puj\u0105co:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-definition.jpg\" alt=\"DAE equation\" style=\"width:344px;height:67px\"\/><\/figure>\n<\/div>\n\n\n<p>gdzie <em>x&nbsp;<\/em>=&nbsp;<em>x<\/em>(<em>t<\/em>)  to nieznana funkcja i <em>F<\/em>=<em>F<\/em>(<em>t<\/em>, <em>u<\/em>, <em>v<\/em>) zawiera <em>N<\/em> sk\u0142adowych: <em>F<sub>i<\/sub><\/em>, <em>i<\/em>&nbsp;=&nbsp;1,2,&#8230;,<em>N<\/em>.<\/p>\n\n\n\n<p>Rozwa\u017cmy przyk\u0142adowy problem:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/problem.jpg\" alt=\"System of differential-algebraic equations\"\/><\/figure>\n<\/div>\n\n\n<p>Istnieje kilka bibliotek, kt\u00f3rych mo\u017cna u\u017cy\u0107 do rozwi\u0105zania takich zagadnie\u0144, ale ich u\u017cycie mo\u017ce by\u0107 skomplikowane. Tym razem zobaczymy jak rozwi\u0105za\u0107 taki problem za pomoc\u0105 fsolve z biblioteki SciPy.<\/p>\n\n\n\n<p>Metoda polega na dyskretyzacji pochodnych czasowych &#8211; zamiast d<em>U<sub>i<\/sub><\/em>\/d<em>t <\/em>u\u017cyjemy \u0394<em>U<sub>i<\/sub><\/em>\/\u0394<em>t<sub>i<\/sub><\/em>:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-transform.jpg\" alt=\"Discretization of DAE\"\/><\/figure>\n<\/div>\n\n\n<p>Warto\u015b\u0107 \u0394<em>U<sub>i<\/sub><\/em> jest r\u00f3wna r\u00f3\u017cnicy mi\u0119dzy dwoma kolejnymi warto\u015bciami czasu. Zatem otrzymujemy:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-discretization.jpg\" alt=\"Discretization of DAE - finite differences\"\/><\/figure>\n<\/div>\n\n\n<p>W ten spos\u00f3b uk\u0142ad r\u00f3wna\u0144 r\u00f3\u017cniczkowo-algebraicznych zosta\u0142 przekszta\u0142cony w uk\u0142ad r\u00f3wna\u0144 algebraicznych. Teraz musimy przenie\u015b\u0107 niezerowe elementy na lew\u0105 stron\u0119 r\u00f3wnania w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-final-form.jpg\" alt=\"Final form of DAE\"\/><\/figure>\n<\/div>\n\n\n<p>Ostatecznie w ka\u017cdym kroku czasowym musimy rozwi\u0105za\u0107 uk\u0142ad r\u00f3wna\u0144 algebraicznych <em>f<\/em><sub>0<\/sub>, <em>f<\/em><sub>1<\/sub>,\u2026<em>f<\/em><sub>7<\/sub>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rozwi\u0105zyanie uk\u0142adu r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie<\/h2>\n\n\n\n<p>Najpierw zaimportujemy niezb\u0119dne biblioteki:<\/p>\n\n\n\n<pre class=\"wp-block-code has-nv-dark-bg-color has-nv-text-dark-bg-background-color has-text-color has-background\"><code>import numpy as np\nfrom scipy.optimize import fsolve\nimport matplotlib.pyplot as plt<\/code><\/pre>\n\n\n\n<p>Zdefiniujemy funkcj\u0119 opisuj\u0105c\u0105 r\u00f3wnania algebraiczne:<\/p>\n\n\n\n<pre class=\"wp-block-code has-nv-dark-bg-color has-nv-text-dark-bg-background-color has-text-color has-background\"><code>def dae_eqs(U, *args):\n\n    # U denotes vector of variables at time t + time_step. U(0) means U1, U(1) is U2 and so on.\n\n    # *args contains Ut and time_step\n        # Ut denotes vector of variables at time t.\n        # value of time step is necessary for calculating discretized derivatives.\n\n    # Unpack arguments\n    Ut, time_step = args\n    # set some arbitray values of parameters\n    c1 = 1.0\n    c2 = 2.0\n    c3 = 3.0\n    c4 = 4.0\n    R2 = 2.0\n    R3 = 3.0\n    R4 = 4.0\n    B1 = 1.0\n    B2 = 2.0\n    E = 5.0\n\n    # Let's assign values of U array to U1, U2, ... for ease.\n    U1 = U&#091;0]\n    U2 = U&#091;1]\n    U3 = U&#091;2]\n    U4 = U&#091;3]\n    U5 = U&#091;4]\n    U6 = U&#091;5]\n    U7 = U&#091;6]\n    U8 = U&#091;7]\n    # The same for array Ut.\n    Ut1 = Ut&#091;0]\n    Ut2 = Ut&#091;1]\n    Ut3 = Ut&#091;2]\n    Ut4 = Ut&#091;3]\n    Ut5 = Ut&#091;4]\n    Ut6 = Ut&#091;5]\n    Ut7 = Ut&#091;6]\n    Ut8 = Ut&#091;7]\n\n    # Derivatives of U valuses. Some of them are not used, but let's leave them for consistency.\n    U1_deriv = (U1-Ut1)\/time_step\n    U2_deriv = (U2-Ut2)\/time_step\n    U3_deriv = (U3-Ut3)\/time_step\n    U4_deriv = (U4-Ut4)\/time_step \n    U5_deriv = (U5-Ut5)\/time_step\n    U6_deriv = (U6-Ut6)\/time_step\n    U7_deriv = (U7-Ut7)\/time_step   \n    U8_deriv = (U8-Ut8)\/time_step   \n\n    # calculate values of algebraic equations\n    f0 = c1 * U3_deriv + c3 * U7_deriv - E\n    f1 = c1 * U3_deriv - U4\/R3\n    f2 = c2 * U5_deriv + c4 * U8_deriv - E\n    f3 = c2 * U5_deriv - U6\/R4\n    f4 = B1 + U7 - U4 - U3\n    f5 = U6 + U5 - U8 - B2\n    f6 = U7 + U8 - E*R2 - U1\n    f7 = B1 - U8 - E*U2 - U1 - U3 - U4\n\n    # Gather all fs into one array\n    f = np.array(&#091;f0, f1, f2, f3, f4, f5, f6, f7])\n    return f<\/code><\/pre>\n\n\n\n<p>Zgodnie z wyja\u015bnieniem w pierwszej cz\u0119\u015bci artyku\u0142u, program g\u0142\u00f3wny wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code has-nv-dark-bg-color has-nv-text-dark-bg-background-color has-text-color has-background\"><code># set initial conditions for t = 0\nnumber_of_unknowns = 8\nU = np.zeros(number_of_unknowns)\n\n# If initial conditions are different from zero, they should be set separately, as below\nU&#091;0] = 1.0\nU&#091;1] = 1.0\nU&#091;2] = 1.0\nU&#091;3] = 1.0\nU&#091;4] = 1.0\nU&#091;5] = 1.0\nU&#091;6] = 1.0    \nU&#091;7] = 1.0   \n\n# set time step, end_time and time\ntime_step = 0.1\nend_time = 5\ntime = 0\n\n# Initial condition must satisfy the system. Therefore it is required to find proper solution at time 0.\nu_0 = fsolve(dae_eqs, U, args=(U,time_step))\n\n# Create arrays for storing solution\ntime_solution = np.linspace(0, end_time, (int)(end_time\/time_step)+1)\nu_solution = np.zeros((time_solution.size, number_of_unknowns))\ni = 0\nu_solution&#091;0] = u_0 # assign initial condition\nwhile time &lt; end_time - time_step:\n    args = (U, time_step) # arguments for fsolve\n    u_next =  fsolve(dae_eqs, U, args=args) # calculate u at time t + time_step\n    U = u_next # in next iteration U is equal U from previous iteration \n    u_solution&#091;i+1] = u_next\n    time += time_step # increase time\n    i += 1\n<\/code><\/pre>\n\n\n\n<p>Teraz mo\u017cemy narysowa\u0107 wykres przedstawiaj\u0105cy wyniki.<\/p>\n\n\n\n<pre class=\"wp-block-code has-nv-dark-bg-color has-nv-text-dark-bg-background-color has-text-color has-background\"><code>fig, ax = plt.subplots(2)\nax&#091;0].plot(time_solution, u_solution&#091;:,0])\n\nax&#091;0].set(ylabel='U1')\nax&#091;0].grid()\n\nax&#091;1].plot(time_solution, u_solution&#091;:,1])\n\nax&#091;1].set(xlabel='time (s)', ylabel='U2')\nax&#091;1].grid()\n\n#Plot the solution of differential-algebraic equations\nplt.show()<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/result.png\" alt=\"Result visualization\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>Powy\u017cej widzieli\u015bmy, jak rozwi\u0105zywa\u0107 r\u00f3wnania algebraiczne r\u00f3\u017cniczkowe w Pythonie. Takie problemy pojawiaj\u0105 si\u0119 w wielu dziedzinach in\u017cynierii, w tym biochemii, elektrotechnice i in\u017cynierii procesowej.<\/p>\n\n\n\n<p>Powy\u017csza metoda nie jest doskona\u0142a. Wykorzystuje najprostsz\u0105 dyskretyzacj\u0119 i nie zawsze b\u0119dzie dzia\u0142a\u0107, na przyk\u0142ad, je\u015bli mamy do czynienia ze sztywnymi r\u00f3wnaniami r\u00f3\u017cniczkowymi. Istnieje kilka bibliotek Pythona, kt\u00f3rych mo\u017cna u\u017cy\u0107. Niekt\u00f3re z nich s\u0105 wymienione poni\u017cej:<\/p>\n\n\n\n<p><a href=\"https:\/\/pypi.org\/project\/diffeqpy\/\">https:\/\/pypi.org\/project\/diffeqpy\/<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/lcvmwww.epfl.ch\/software\/daepy\/\">https:\/\/lcvmwww.epfl.ch\/software\/daepy\/<\/a><\/p>\n\n\n\n<p>Wi\u0119cej na temat DAE mo\u017cesz dowiedzie\u0107 si\u0119 na stronie <a href=\"http:\/\/www.scholarpedia.org\/article\/Differential-algebraic_equations\">Scholarpedia<\/a>.<\/p>\n\n\n\n<p>Je\u015bli chcesz dowiedzie\u0107 si\u0119 wi\u0119cej o rozwi\u0105zywaniu problem\u00f3w in\u017cynierskich za pomoc\u0105 Pythona, zapoznaj si\u0119 z ofert\u0105 kursu: <strong><a href=\"https:\/\/softinery.com\/pl\/katalog-szkolen\/wprowadzenie-do-obliczen-naukowych\/\">Wprowadzenie do oblicze\u0144 naukowych przy u\u017cyciu j\u0119zyka Python<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Skontaktuj si\u0119 z nami<\/h2>\n\n\n\n<p>Skontaktuj si\u0119 z nami, aby uzyska\u0107 profesjonaln\u0105 pomoc w rozwi\u0105zywaniu problem\u00f3w zwi\u0105zanych z symulacjami i modelowaniem matematycznym.<\/p>\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>R\u00f3wnania algebraiczne r\u00f3\u017cniczkowe&nbsp;(DAE &#8211; Differential-Algebraic Equations) to r\u00f3wnania zawieraj\u0105ce nieznan\u0105 funkcj\u0119 i jej pochodne. Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w swojej og\u00f3lnej formie opisany jest nast\u0119puj\u0105co: gdzie x&nbsp;=&nbsp;x(t) to nieznana funkcja i F=F(t, u, v) zawiera N sk\u0142adowych: Fi, i&nbsp;=&nbsp;1,2,&#8230;,N. Rozwa\u017cmy przyk\u0142adowy problem: Istnieje kilka bibliotek, kt\u00f3rych mo\u017cna u\u017cy\u0107 do rozwi\u0105zania takich zagadnie\u0144, ale ich u\u017cycie mo\u017ce&hellip;&nbsp;<a href=\"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/\" rel=\"bookmark\">Dowiedz si\u0119 wi\u0119cej &raquo;<span class=\"screen-reader-text\">Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":578,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-100","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie - Softinery<\/title>\n<meta name=\"description\" content=\"Ten artyku\u0142 opisuje jak rozwi\u0105zywa\u0107 uk\u0142ad r\u00f3wna\u0144 algebraicznych r\u00f3\u017cniczkowych za pomoc\u0105 Pythona.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie - Softinery\" \/>\n<meta property=\"og:description\" content=\"Ten artyku\u0142 opisuje jak rozwi\u0105zywa\u0107 uk\u0142ad r\u00f3wna\u0144 algebraicznych r\u00f3\u017cniczkowych za pomoc\u0105 Pythona.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/\" \/>\n<meta property=\"og:site_name\" content=\"Softinery\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-25T06:40:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-definition.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minuty\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie - Softinery","description":"Ten artyku\u0142 opisuje jak rozwi\u0105zywa\u0107 uk\u0142ad r\u00f3wna\u0144 algebraicznych r\u00f3\u017cniczkowych za pomoc\u0105 Pythona.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/","og_locale":"pl_PL","og_type":"article","og_title":"Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie - Softinery","og_description":"Ten artyku\u0142 opisuje jak rozwi\u0105zywa\u0107 uk\u0142ad r\u00f3wna\u0144 algebraicznych r\u00f3\u017cniczkowych za pomoc\u0105 Pythona.","og_url":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/","og_site_name":"Softinery","article_modified_time":"2024-01-25T06:40:29+00:00","og_image":[{"url":"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-definition.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Szacowany czas czytania":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/","url":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/","name":"Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie - Softinery","isPartOf":{"@id":"https:\/\/softinery.com\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/#primaryimage"},"image":{"@id":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/#primaryimage"},"thumbnailUrl":"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-definition.jpg","datePublished":"2023-02-28T08:30:50+00:00","dateModified":"2024-01-25T06:40:29+00:00","description":"Ten artyku\u0142 opisuje jak rozwi\u0105zywa\u0107 uk\u0142ad r\u00f3wna\u0144 algebraicznych r\u00f3\u017cniczkowych za pomoc\u0105 Pythona.","breadcrumb":{"@id":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/#primaryimage","url":"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-definition.jpg","contentUrl":"https:\/\/softinery.com\/wp-content\/uploads\/2023\/02\/dae-definition.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/softinery.com\/pl\/blog\/uklad-rownan-algebraicznych-rozniczkowych\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/softinery.com\/pl\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/softinery.com\/pl\/blog\/"},{"@type":"ListItem","position":3,"name":"Uk\u0142ad r\u00f3wna\u0144 algebraicznych-r\u00f3\u017cniczkowych w Pythonie"}]},{"@type":"WebSite","@id":"https:\/\/softinery.com\/pl\/#website","url":"https:\/\/softinery.com\/pl\/","name":"Softinery","description":"Rozwi\u0105zania IT dla nowoczesnego przemys\u0142u","publisher":{"@id":"https:\/\/softinery.com\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/softinery.com\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/softinery.com\/pl\/#organization","name":"Softinery","url":"https:\/\/softinery.com\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/softinery.com\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/softinery.com\/wp-content\/uploads\/sites\/5\/2023\/05\/cropped-Gear-logo-transparent-1.webp","contentUrl":"https:\/\/softinery.com\/wp-content\/uploads\/sites\/5\/2023\/05\/cropped-Gear-logo-transparent-1.webp","width":512,"height":512,"caption":"Softinery"},"image":{"@id":"https:\/\/softinery.com\/pl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/pages\/100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":6,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/pages\/100\/revisions"}],"predecessor-version":[{"id":7472,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/pages\/100\/revisions\/7472"}],"up":[{"embeddable":true,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/pages\/578"}],"wp:attachment":[{"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/softinery.com\/pl\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}