簡體   English   中英

如何求解函數y = f(x,y),即函數值取決於自身

[英]How to solve a function y=f(x,y), i.e, the functional value depends on itself

我想在python中解決以下方程式。 問題是因變量“ y”也出現在等式的右側。 第一個問題,在數學中如何命名這些方程式?

如果我跳過RHS中的“ y”,就可以解決。 但是不知道如何解決將其固定在原位的問題。

在此處輸入圖片說明

我使用以下代碼:從matplotlib導入numpy作為np導入為plt pyplot

A=2
B=1.3
C=0.25
D=1.25
def func(x,A,B,C,D):
  y=A*np.sinh(((x)/B-C)/D)  #I skipped (x-y) here
  return y

x=np.linspace(-3,3,200)
y=func(x,A,B,C,D)
plt.plot(x,y)
plt.show()

此類非線性方程通常以迭代方式求解。 設置y=0 ,求解方程,獲取新y ,將新值插入RHS並重復該過程。 跟蹤值y(j)-y(j-1)以檢查收斂性。 如果未過渡,請嘗試將先前的RHS零件與具有一定權重的當前零件混合:RHS(j)= w * RHS(j)+(1-w)RHS(j-1)。 以下是一些有用的鏈接:

維基

圖書:幾個變量中非線性方程的迭代解法作者:JM Ortega,WC Rheinboldt

這是修改后的示例:

import matplotlib.pyplot as plt
A=2
B=1.3
C=0.25
D=1.25
def func(x,z,A,B,C,D):
  y=A*np.sinh(((x-z)/B-C)/D)  #I skipped (x-y) here
  return y

x=np.linspace(-3,3,200)
y = np.zeros(x.shape)
w = 0.4
d = 10
track_d = []

while d > 0.01:
    track_d.append(d)
    temp = y
    y = w * y + (1-w) * func(x,y,A,B,C,D)
    d = np.max(np.abs(temp-y))

y=func(x, y,A,B,C,D)
plt.plot(x,y)
plt.show()

plt.plot(track_d)
plt.show()

對於較大的間隔,它看起來更有趣,請注意參數w。

import matplotlib.pyplot as plt
A=2
B=1.3
C=0.25
D=1.25
def func(x,z,A,B,C,D):
  y=A*np.sinh(((x-z)/B-C)/D)  #I skipped (x-y) here
  return y

x=np.linspace(-30,30,200)
y = np.zeros(x.shape)
w = 0.99999999
d = 10
track_d = []

while d > 0.0000001:
    track_d.append(d)
    temp = y
    y = w * y + (1-w) * func(x,y,A,B,C,D)
    d = np.max(np.abs(temp-y))

y=func(x, y,A,B,C,D)
plt.plot(x,y)
plt.show()
# look at the convergence
plt.plot(track_d)
plt.show()

在此處輸入圖片說明

您的方程式可以非常簡化,以獲得x作為y的函數。 首先,我們可以按如下方式重寫您的方程式:

y = a * sinh(b * x + c * y + d)

請注意,這帶有一些關於A,B,C,D的非零假設

b * x + c * y + d = arcsinh(y / a)

可以使用自然對數重寫arcsinh :b * x + c * y + d = ln(y / a + sqrt((y / a)** 2 +1)))

這給出:

x =(1 / b)*(ln(y / a + sqrt((y / a)** 2 +1)))-c * y-d)

然后,您可以針對a,b,c,d的各種值繪制此圖。

您的函數通常以以下形式稱為遞歸關系

在此處輸入圖片說明

可以通過數值選擇y的起始值進行求解,然后將其放入方程中,然后計算下一個y值。 然后重復計算,將下一個y值作為先前的y值放入方程中。 循環重復計算,直到y值收斂為止。 Y值可能不會收斂。 即使在這種情況下,您也可以進一步分析系統。 您可以嘗試繪制圖y n = f(y n-1 )並查看得到的結果。 如果系統是穩定的,則曲線必須是高度周期性閉合的 ,否則非收斂系統將是混亂的,這樣的方程式您可以拋棄。

穩定系統的一些例子是李沙育曲線

在此處輸入圖片說明

混沌系統的一些例子是Rossler吸引子

在此處輸入圖片說明

y = A * sinh(-yC)分析

要查看您的系統是否穩定-讓我們嘗試使用雙曲線正遞歸關系來調制sin(x)函數: y=k*SIN(x)+0.88*SINH(-y-0.02)並嘗試繪制此y=k*SIN(x)+0.88*SINH(-y-0.02) y prev vs y next的遞歸參數圖。

K = 0

在此處輸入圖片說明

這里沒什么好看的,因為在這種情況下,我們得到的原始方程式在數據點之間的分辨率很低。 它們全都沿着一條線分布,並帶有一些我們無法用眼睛分辨的小散射-這就是為什么我們在這里需要sin(x)的原因!

K = 0.0005

在此處輸入圖片說明

更有趣。 現在可以看到,您的“線”根本就不是線,並且具有一些混亂的行為。 但是,讓我們看一些更具吸引力的東西。

K = 0.005

在此處輸入圖片說明

在某些地方,sinh()復發是成功的,但在某些地方-sin()。 讓我們嘗試強制贏得sin()函數,以便能夠查看它是否會定期進行調制以及是否具有閉環。 所以最終的形象。

K = 0.05

在此處輸入圖片說明

因此,它既不是高度周期性的,也不是封閉的。 我們有某種類型的吸引子。 這意味着,在一般情況下,您的方程式表現得非常混亂,因此不值一分錢。 當然,在您給定的確切參數范圍內,它可能表現為線性函數。 但是圓的無窮小段也重新組合了一條線,這是什么意思? 沒有。 您不能依賴非常具體的輸入范圍。 如果您的業務部門會稍微改變需求,則等式的行為將發生巨大變化。 因此,唯一合理的步驟是將其從窗口中移出並重新構建不同的(此時穩定的)數據模型。 或者只是說這是不可能完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM