返回

python-如何求解给定微分方程的库兹涅茨曲线增长模型?

发布时间:2022-06-30 01:48:24 217
# node.js

语境:

使用 Maddison 项目实际人均​​ GDP 数据集,我使用最小二乘法得出以下等式:0.012406 + 0.005132 ln(g) - 0.006304 ln(g)**2

当我试图预测不同经济群体到 2050 年的人均 GDP 时,我参考了本文的方法“Tilman et al. 10.1073/pnas.1116437108”,以了解他们如何尝试求解微分方程:dG/dt = G(-0.6284 + 0.157lnG - 0.0093ln(G)^2

我以同样的方式转换了我的最小二乘:-0.012406 g + g 0.005132 math.log(g) - g 0.006304*math.log(g)**2

我正在尝试在 python 中求解 ODE 以获得几个初始值,以获得库兹涅茨曲线并估计 2050 年。我使用了下面的代码,但我无法解决相同的问题。

Python代码:

import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.integrate import odeint
from scipy.integrate import solve_ivp 
import math

def solveit(y0):
    def gdp(g, t):
        y = g
        dgdt = [-0.012406*g  + g*0.005132*math.log(g) - g*0.006304*math.log(g)**2]
        return dgdt

#initial conditions
    #y0 = [785.60] 
    t = np.linspace(0, 60000, 1000)
#call integrator
    sol = odeint(gdp, y0, t)
    m = sol[:]
    plt.plot(t,m)
    plt.show()


ys= [[785.60],[1860],[7800]]

fig = plt.figure()
for y_ in ys:
    solveit(y_)

plt.legend(loc='best')
plt.grid()
plt.show()

错误消息:

RuntimeError: The array return by func must be one-dimensional, but got ndim=2.

关于这方面的说明会很有帮助。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像