返回顶部
首页 > 资讯 > 后端开发 > Python >数学——Euler方法求解微分方程详解(
  • 220
分享到

数学——Euler方法求解微分方程详解(

微分方程详解数学 2023-01-30 22:01:28 220人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

算法的数学描述图解 实例 用Euler算法求解初值问题 \[ \frac{dy}{dx}=y+\frac{2x}{y^2}\] 初始条件\(y(0)=1\),自变量的取值范围\(x \in [0, 2]\) 算法python3代码求解

算法数学描述图解

实例

用Euler算法求解初值问题
\[ \frac{dy}{dx}=y+\frac{2x}{y^2}\]
初始条件\(y(0)=1\),自变量的取值范围\(x \in [0, 2]\)

算法python3代码求解

# 导入包
import numpy as np
import matplotlib.pyplot as plt
# 定义求解函数 y_dot = y + 2*x/(y*y)
def fx(y, x):
    return y + 2*x/(y*y)
# 算法定义
def ode_euler(f, y0, tf, h):
    """
    Solve and ODE using Euler method.
    Solve the ODE y_dot = f(y, t)
    Parameters
    ------------
    :param f: function
            Function describing the ODE
    :param y0: array_like
            Initial conditions.
    :param tf: float
            Final time.
    :param h: float
            Time step
    :return:
    y : array_like
        Solution to the ODE.
    t : array_like
        Time vector.
    """

    y0 = np.array(y0)
    ts = np.arange(0, tf + h, h)
    y = np.empty((ts.size, y0.size))
    y[0, :] = y0
    for t, i in zip(ts[1:], range(ts.size - 1)):
        y[i + 1, :] = y[i, :] + h * f(y[i, :], t)
    return y, ts
# 实例应用案例
def newton_cooling_example():
    print('Solving Newton Cooling ODE...')
    y, ts = ode_euler(fx, 1, 2, 0.01)
    print('Done.')
    plt.figure()
    plt.plot(ts, y)
    plt.xlabel('time [s]')
    plt.title('Solution to the Newton cooling equation')
    plt.show()

代码中的部分函数理解

numpy.array

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
参考numpy.array
output:创建一个array,返回类型为ndarray
实例

np.array([1, 2, 3.0]) # array([1., 2., 3.])
np.array([[1, 2], [3, 4]]) # array([[1, 2], [3, 4]])
np.array([1, 2, 3], dtype=complex) # array([1.+0.j, 2.+0.j, 3.+0.j])

numpy.arange

参考numpy.arange
numpy.arange([start, ]stop, [step, ]dtype=None)
作用:在给定间隔内返回均匀间隔的值。
值在半开区间[start, stop)内生成(换句话说,包括开始但不包括终止)。返回的是ndarray而不是列表。
np.arange()函数返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是5,步长为1。
参数个数情况: np.arange()函数分为一个参数,两个参数,三个参数三种情况 :

1. 一个参数时,参数值为终点,起点取默认值0,步长取默认值1。 
2. 两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。 
3. 三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数。

案例

np.arange(3,7) # array([3, 4, 5, 6])
np.arange(3,7,2) # array([3, 5])

numpy.ma.size

numpy.ma.size(obj, axis=None)
参考
案例

a = np.array([[1,2,3],[4,5,6]])
np.size(a) # 6
np.size(a,1) # 3
np.size(a,0) # 2

numpy.empty

参考
numpy.empty(shape, dtype=float, order='C')
shape : int or tuple of int Shape of the empty array, e.g., (2, 3) or 2.
out : ndarray
案例

np.empty([2, 2])
# 结果
array([[ -9.74499359e+001, 6.69583040e-309],
       [ 2.13182611e-314, 3.06959433e-309]]) #random
np.empty([2, 2], dtype=int)
# 结果
array([[-1073741821, -1067949133],
       [ 496041986, 19249760]]) #random

--结束END--

本文标题: 数学——Euler方法求解微分方程详解(

本文链接: https://lsjlt.com/news/180236.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 数学——Euler方法求解微分方程详解(
    算法的数学描述图解 实例 用Euler算法求解初值问题 \[ \frac{dy}{dx}=y+\frac{2x}{y^2}\] 初始条件\(y(0)=1\),自变量的取值范围\(x \in [0, 2]\) 算法Python3代码求解...
    99+
    2023-01-30
    微分方程 详解 数学
  • Python数值求解微分方程方法(欧拉法,隐式欧拉)
    不说什么,先上代码 这里先求解形如的微分方程 1.欧拉法 def eluer(rangee,h,fun,x0,y0): step = int(rangee/h) x ...
    99+
    2024-04-02
  • 微信小程序请求前置的方法详解
    问题 因为我们有的页面是在onload中去请求数据回来再渲染视图,如果我们可以将请求数据这一步提前到小程序页面跳转前做,就可以早一点把数据请求回来,优化的效果取决于页面跳转所需的时...
    99+
    2024-04-02
  • 用C++的odeint库求解微分方程
    目录1、集成方程2、求解单摆模型2.1 微分方程标准化2.2 代码实现微分方程的标准形式为: 即:\dot{\boldsymbol{x}} = \boldsymbol{f}(\b...
    99+
    2024-04-02
  • python 解决微分方程的操作(数值解法)
    Python求解微分方程(数值解法) 对于一些微分方程来说,数值解法对于求解具有很好的帮助,因为难以求得其原方程。 比如方程: 但是我们知道了它的初始条件,这对于我们叠代求解很有帮助,也是必须的。 那么现在我们也...
    99+
    2022-06-02
    python 微分方程 数值解法
  • C++实现二分法求方程近似解
    二分法是一种求解方程近似根的方法。对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我...
    99+
    2024-04-02
  • 用Python解微分方程用什么函数
    Python中使用sympy模块的dsolve函数求解微分方程,具体方法如下:import sympy as sy #导入sympy模块def differential_equation(x...
    99+
    2024-04-02
  • python如何解决微分方程
    这篇文章主要介绍python如何解决微分方程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python求解微分方程(数值解法)对于一些微分方程来说,数值解法对于求解具有很好的帮助,因为难以求得其原方程。比如方程:但是...
    99+
    2023-06-15
  • SpringMVC实现获取请求参数方法详解
    目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@RequestHeader5、@CookieValue6、通过POJO获取...
    99+
    2024-04-02
  • matlab怎么求解虚数方程
    在MATLAB中,可以通过使用符号工具箱中的函数来求解虚数方程。具体步骤如下:1. 打开MATLAB,并确保在当前工作目录下有需要解...
    99+
    2023-08-19
    matlab
  • 微信小程序map地图使用方法详解
    本文实例为大家分享了微信小程序map地图使用的具体实现代码,供大家参考,具体内容如下 以下代码是主要的代码片段 <!-- 地图部分 --> <!-- en...
    99+
    2024-04-02
  • android 网络请求库volley方法详解
    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包   volley网络请...
    99+
    2022-06-06
    volley Android
  • Java Http请求方式之RestTemplate常用方法详解
    目录引言常见用法简单Get\Post请求Post提交常规表单Post上传文件配置项请求添加Cookie\Header配置请求工厂 超时、代理配置拦截器、转换器,错误处理错误重试(额外...
    99+
    2024-04-02
  • Python学习之循环方法详解
    目录for循环while循环拓展:列表推导式常见的推导式方法循环的继续与退出(continue与break)continue的使用break的使用循环实现九九乘法表什么是循环? &m...
    99+
    2024-04-02
  • Window.open()方法参数详解
    window.open()方法是JavaScript中的一个方法,用于打开一个新的浏览器窗口或者标签页。它接受多个参数来控制打开的窗...
    99+
    2023-09-01
    Window.open()
  • Assert.assertEquals()方法参数详解
    junit.framework包下的Assert提供了多个断言方法. 主用于比较测试传递进去的两个参数. Assert.assertEquals();及其重载方法: 1. ...
    99+
    2024-04-02
  • 详解JS数组方法
    目录一、会修改原数组1.push():2.pop():3.shift():4.unshift():5.splice():6.sort():7.reverse():二、不修改...
    99+
    2024-04-02
  • kotlin 官方学习教程之基础语法详解
    kotlin 官方学习教程之基础语法详解Google 在今天的举行了 I/O 大会,大会主要主要展示内有容 Android O(Android 8.0)系统、Google Assistant 语音助手、Google 智能音箱、人工智能、机器...
    99+
    2023-05-31
    kotlin 教程
  • 微信小程序获取用户openid的方法详解
    目录获取openid的思路需要修改的地方完整代码总结小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系然而因为小程序中的openid不可...
    99+
    2024-04-02
  • Vue + Axios 请求接口方法与传参方式详解
    目录一、Get请求:二、Post请求:三、拓展补充使用Vue的脚手架搭建的前端项目,通常都使用Axios封装的接口请求,项目中引入的方式不做多介绍,本文主要介绍接口调用与不同形式的传...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作