我想在 python 中解决以下方程。问题是因变量“y”也出现在等式的右侧。第一个问题,这样的方程在数学上是怎么命名的?
如果我跳过 RHS 中的“y”,我就可以解决它。但是不知道如何解决将其固定到位的问题。
我使用了以下代码: 将 numpy 导入为 np 从 matplotlib 导入 pyplot 为 plt
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) 。下面是一些有用的链接:
书籍:多变量非线性方程的迭代求解 作者:J. M. Ortega、W. C. 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()
关于python - 如何求解函数 y=f(x,y),即函数值取决于自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56444541/