数学——Euler方法求解微分方程详解(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()
<h2>代码中的部分函数理解</h2>
<h3>numpy.array</h3>
`numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)`
[参考numpy.array]( https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.array.html)
output:**创建一个array**,返回类型为ndarray
<strong>实例</strong>
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])
<h3>numpy.arange</h3>
[参考numpy.arange](https://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html)
`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])
<h3>numpy.ma.size</h3>
`numpy.ma.size(obj, axis=None)`
[参考](https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ma.size.html#numpy.ma.size)
**案例**
a = np.array([[1,2,3],[4,5,6]])
np.size(a) # 6
np.size(a,1) # 3
np.size(a,0) # 2
<h3>numpy.empty</h3>
[参考](https://docs.scipy.org/doc/numpy/reference/generated/numpy.empty.html)
`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
数学——Euler方法求解微分方程详解(python3)的更多相关文章
- 详解 Python3 正则表达式(四)
上一篇:详解 Python3 正则表达式(三) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些注明和修改 ^_^ 更多强大的功能 ...
- 详解 Python3 正则表达式(三)
上一篇:详解 Python3 正则表达式(二) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些批注和修改 ^_^ 模块级别的函数 ...
- 详解 Python3 正则表达式(二)
上一篇:详解 Python3 正则表达式(一) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些批注和修改 ^_^ 使用正则表达式 ...
- 详解 Python3 正则表达式(一)
本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些批注和修改 ^_^ 正则表达式介绍 正则表达式(Regular expressio ...
- .NET Excel导出方法及其常见问题详解
摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...
- (转)详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
原文:https://www.jb51.net/article/138363.htm hasattr()函数 hasattr()函数用于判断是否包含对应的属性 语法: hasattr(object,n ...
- 详解 Python3 正则表达式(五)
上一篇:详解 Python3 正则表达式(四) 本文翻译自:https://docs.python.org/3.4/howto/regex.html 博主对此做了一些注明和修改 ^_^ 非捕获组和命名 ...
- cloudemanager安装时出现failed to receive heartbeat from agent问题解决方法(图文详解)
不多说,直接上干货! 安装cdh5到最后报如下错误: 安装失败,无法接受agent发出的检测信号. 确保主机名称正确 确保端口7182可在cloudera manager server上访问(检查防火 ...
- cloudemanager安装时出现8475 MainThread agent ERROR Heartbeating to 192.168.30.1:7182 failed问题解决方法(图文详解)
不多说,直接上干货! 问题详情 解决这个问题简单的,是因为有进程占用了.比如 # ps aux | grep super root ? Ss : : /opt/cm-/lib64/cmf/agen ...
随机推荐
- cf round546 cde
第一题会卡一下同时用set和cin.. 其他的注意下矩阵对角线下标的应用即可 #include<bits/stdc++.h> using namespace std; #define ma ...
- cf949C 建模,SCC缩点
/* 给定n个数据中心,m份资料,每份资料在其中的两个中心备份,一天可供下载的时间是h小时 中心i在第hi小时需要维护,无法下载 现在要将一些中心的维护时间往后推1小时,使得任意时刻每份资料都可以被下 ...
- C++ StrCat()
关于StrCat function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/bb759925(v=vs.85).aspx ...
- MySQL数据库权限分类
一.权限表 mysql数据库中的3个权限表:user .db. host 权限表的存取过程是: 1)先从user表中的host. user. password这3个字段中判断连接的IP.用户名.密码是 ...
- 手机app数据的爬取之mitmproxy安装教程
mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler.Charles的功能,只不过它通过控制台的形式操作. 此外,mitmproxy还有两个关联组件,一个是mitmdump, ...
- Echo()、print()、print_r()区别
echo可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用.echo是php的内部指令,不是函数, ...
- Leetcode 344. 反转字符串
344. Reverse String 解题代码: class Solution { public: void reverseString(vector<char>& s) { , ...
- 函数wait和waitpid
函数wait 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号 ...
- android app使用微信登录接口回调没有被执行的问题研究
本人开发的一个app使用了sharesdk集成微信登录功能,在测试的过程中微信授权登录界面有调用,但是授权后原应用的回调没有被执行 应用的包名是com.kimi.searcher 首先,确认微信点击授 ...
- Vue爬坑之路
1.关闭eslint严格语法检查