计算数学课程 参考 Python代码

求积分以及方程的解需要自己修改f(x)函数里面的返回值。求非线性方程的解需要安装sympy包。

牛顿法解一元非线性方程

牛顿法解二元非线性方程

5种积分方法

绝对误差与相对误差

最小二乘法一元多项式拟合

Python 求积分的几种方法

不同的方法最大区别在于公式的不同/矩形区域的不同,依据公式而定,需要什么代码你可以自己进行更改,很简单。
本文代码为不严格代码,最严格的代码为先判断连续性。当你需要对大量函数积分(懒得写函数连续性检测的时候)可以使用本文代码用try…except…不严格替代。
看不懂公式的可以去 CSDN 查看图片。

  1. Simpson积分法:
    \(\int _ { a } ^ { b } f ( x ) d x \approx \frac { ( b – a ) ( f ( a ) + f ( b ) + 4 f ( \frac { a + b } { 2 } ) ) } { 6 }\)
  1. 右矩形积分公式
    \(\int _ { a } ^ { b } f ( x ) d x = \lim _ { n \rightarrow \infty } \sum _ { i = 1 } ^ { n } \frac { b – a } { n } f ( a + \frac { b – a } { n } i )\)
  1. 左矩形积分公式
    \(\int _ { a } ^ { b } f ( x ) d x = \lim _ { n \rightarrow \infty } \sum _ { i = 1 } ^ { n } \frac { b – a } { n } f ( a + \frac { b – a } { n } (i – 1) )\)
  1. 中矩形积分公式
    \(\int _ { a } ^ { b } f ( x ) d x = \lim _ { n \rightarrow \infty } \sum _ { i = 1 } ^ { n } \frac { b – a } { n } f ( a + \frac { (b – a)} { 2 n }(2i – 1 ) )\)
  1. 梯形积分公式
    \(\int _ { a } ^ { b } f ( x ) d x = \lim _ { n \rightarrow \infty } \sum _ { i = 1 } ^ { n } \frac { b – a } { 2n } (f ( a + \frac { b – a } { n }( i – 1) ) + f ( a + \frac { b – a } { n } i ))\)

Python matrix 3种解矩阵方程方法

高斯消元法,简单迭代法(Jacobi迭代),高斯迭代法(Gauss-Seidel迭代)。参考文章,该参考文章可以让你明白简单迭代和高斯迭代的方法。
总结:高斯迭代和简单迭代法会遇到矩阵存在解但迭代不收敛的情况,推荐使用高斯消元法。

  1. 高斯消元 O(n3)
  1. 简单迭代 O(k*n2)
  1. 高斯迭代基本思路和简单迭代差不多 O(k*n2)

优化A* 算法运行时间python代码

说明:文章所示优化对某些地图有一定优化作用,运行速度可以提高2倍以上,但很大程度上会牺牲准确度,并且很多时候并不能用此方法加速运行,请在有一定A*算法代码基础上阅读。代码中piecemeal_matrix判断边界函数没有那么完美,只是提供一种参考,有兴趣的朋友可以和我一起改进。

A*算法在迷宫很复杂的情况下运行速度会很慢,甚至会和Dijkstra算法运行速度差不多,比如遇到如下这张复杂地图:

尽管只有约100*100像素,但是在我电脑上要运行10s左右时间才能计算出来(我电脑运行速度比较慢,不同电脑运行时间不同,文章测试环境均为同一台电脑)

遇到这种规则的方方正正的迷宫,我们可以运用(伪)图片缩小。不同于直接缩小图片,更可以说成对迷宫切片,防止图片缩小变糊。简单算法思路:把迷宫围墙边界作为转换后矩阵像素,类似于边缘检测,如下图x轴方向上的切片:

最终可以得到如下切片/缩小后图片:

最终结果对比:

优化前10s左右运行速度得出的图片:

优化后5s左右运行速度得出的图片:

切片优化python代码

优化前python代码

具体A*算法代码可见我的博客

A* 算法 Python 代码

版本说明:
V1.0版本为只有固定上下左右四个方向进行规划路线。
V2.0版本对V1.0做出了提升,现在可以填入任意方向(至多8个方向)进行路线规划。
V3.0版本删除了sub和index的互相转换,减少了算法复杂度。优化了代码,增加可重复使用性。发现并改正了total_costs计算错误。

V3.0使用方法:
(1)
from 文件名 import A_star
a_star = A_star(matrix=[], step=1000, way=[“R”, “L”, “D”, “U”, “RU”, “RD”, “LU”, “LD”], wall=0)
road = a_star.run(start_point=[],end_point=[]) #可重复使用

或者直接
from 文件名 import A_star
road = A_star(matrix=[], step=1000, way=[“R”, “L”, “D”, “U”, “RU”, “RD”, “LU”, “LD”], wall=0).run(start_point=[],end_point=[])

输出为二位点坐标数组eg:[[10, 10], [9, 9], [8, 8], [7, 7], [6, 6], [5, 5], [4, 4], [3, 3], [2, 2], [1, 1], [0, 0]]

(2)参数说明:
start_point 为起始坐标.
end_point为终点坐标.
matrix为地图/迷宫地图,bool类型.
wall为matrix里True/False哪个为墙,False为墙写0,True为墙写1.
weight为权值(不用特别调整).
Corner_amend为拐角优化,1开启,0关闭.
step表示运行一定循环后退出程序,防止因为地图过大无限运行。代码默认无限循环即step=float(“inf”),推荐加入限制条件,减少特定程序时间.
way表示可以走的方向,eg:[“R”, “L”, “D”, “U”, “RU”, “RD”, “LU”, “LD”]。需要大写(因为没写upper操作).

说明:
该代码为matlab改编成的python代码并经过我的相关优化,有一定参考性,在pycharm debug调试中你可以测试该算法逻辑,希望对你有帮助。

待更新:

如果代码有错误请和我联系,我会及时改正。

V3.0版本代码

A*算法可视化参考代码

下面为历史版本代码:

Read More

浙ICP备2021019730-1    浙公网安备 33010902002953号
Copyright © 2022 PanCake