数值计算
文章平均质量分 65
肥宅_Sean
在UCB,Stanford各做过一段时间的RA。去牛津访学过一段时间。
现在在某家头部量化当研究员。
个人站: https://seanquant.github.io/
展开
-
不动点迭代法求方程的根(Python实现)
简述不动点迭代法求方程的根:是迭代法解方程的根当中经典的方法。将求解f(x) = 0的问题变成x = h(x)这样的问题。转变的方程很简单,一般是移项,平方,开根号什么的。难点: 问题难点就得到的对应不动点迭代方程是否收敛上。 因为对于一个方程来说,对应的不动点迭代方程会有很多种的。而收敛性的考究,最为经典的定理有两个。全局上的一个定理: 这个定理就是在全局上使用的。具体...原创 2018-06-26 14:13:32 · 11136 阅读 · 1 评论 -
斯特芬森迭代法(Python)
简述斯特芬森迭代法,本质上就使用了埃特金加速法的不动点迭代法。可以结合不动点迭代法来看,点击访问代码from sympy import *import randomx = symbols("x")func = (x + 1) ** (1 / 3)begin = 1end = 2MAXSTEP = 100step_count = 0x0 = random....原创 2018-06-26 15:10:47 · 6217 阅读 · 0 评论 -
高斯--塞德尔迭代法求方程组的解(Python实现)
数值分析题目求方程组 ⎧⎩⎨⎪⎪5x1+2x2+x3=−12−x1+4x2+2x3=202x1+−3x2+10x3=2{5x1+2x2+x3=−12−x1+4x2+2x3=202x1+−3x2+10x3=2\left\{ \begin{array}{c}5x_1+2x_2 + x_3 = -12 \\-x_1 + 4x_2+2x_3 = 20 \\2x_1+-3x_2+10x_3=...原创 2018-05-25 23:18:26 · 8717 阅读 · 8 评论 -
牛顿法求解方程(python和C++)
简述牛顿迭代法跟之前的不动点迭代法系列的区别,就在于这里考虑的function就是函数本身,而不是之前所说的函数迭代函数。 但是实际上还是类似的。因为这时候的表达式比较清楚而已 迭代函数: xk+1=xk−f(xk)f′(xk)xk+1=xk−f(xk)f′(xk)x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}上述的迭代函数,本质上,其实是关于f(......原创 2018-06-26 15:44:36 · 10946 阅读 · 0 评论 -
牛顿法求根号数(Python)
简述以前也是用过这个东西的,但是一直都不是很清楚原理。 后来理解了牛顿法了之后,发现这个东西,就是牛顿法的一个简单的应用而已。代码target:就是目标数 我们在下面就是为了求这个数的开根号。同样的原理,我们只需要修改方程中的对应的指数,我们就可以实现了 func部分from sympy import *x = symbols("x")target = 10fu...原创 2018-06-26 16:13:34 · 6207 阅读 · 0 评论 -
牛顿插值多项式(python实现)
理论知识牛顿插值多项式(理论知识)目标函数 f(x)=11+x2f(x)=11+x2f(x) = \frac{1}{1+x^2}插值点为[-10, 10]上的整数点。图片代码实现import sympyimport numpy as npfrom matplotlib import pyplot as pltdef f(X): return...原创 2018-07-08 19:18:53 · 9931 阅读 · 1 评论 -
重根迭代法解方程(两种方法)(Python实现)
简述通过两种不同的重根迭代的来解方程。处理的方程是 (sin(x) - x/2) ^2 = 0代码采用的第一种迭代重根迭代方法:xk+1=xk−mf(xk)f′(xk)xk+1=xk−mf(xk)f′(xk)x_{k+1} = x_k - m\frac{f(x_k)}{f'(x_k)}这里取m为2。from sympy import *x = symbols(...原创 2018-06-27 00:16:34 · 4650 阅读 · 0 评论 -
Sympy常见多个变量【一行代码创建】
解决办法import sympyvrs = sympy.symbols('x1:10')输出的结果是:(x1, x2, x3, x4, x5, x6, x7, x8, x9)其实是一个元组,里面的每个元素都是sympy的符号~如果第一个不标记为x1的话,就是从0开始数起~import sympyvrs = sympy.symbols('x:10')print(...原创 2018-09-14 21:20:41 · 3528 阅读 · 11 评论 -
Sympy计算结果带参数的方程组
简述下面是我随便写的一个方程,规模是3*3,然后有两个未知数,最后用最后一个未知数来作为参数。系数的话,选的是行列index的和再+1。(index计数从0开始)代码from sympy import *N = 3xs = symbols('x:%d' % N)fs = [i for i in range(N)]for i in range(N): temp ...原创 2018-09-14 21:39:29 · 5921 阅读 · 0 评论 -
快速生成一个二维矩阵Python
简述网上方法有很多种。这里就先记录下,一般人都想不到的一种来试试看~import numpy as npT = np.arange(count_h) + np.arange(count_t)[:, np.newaxis]print(T.shape)输出结果是:count_h: 100count_t: 5400(5400, 100)关键代码:T = np...原创 2018-09-15 11:22:21 · 5730 阅读 · 0 评论 -
常微分方程数值求解【python】
简述这里只考虑最为简单的一种常微分方程dydx=f(x,y)\frac{dy}{dx} = f(x,y)dxdy=f(x,y)然后这里的实例都是以下面这个方程来做展示的。dydx=y∗(1−y2)\frac{dy}{dx} = y*(1-y^2)dxdy=y∗(1−y2)初值给定y(0)=2y(0) = 2y(0)=2这个方程的精确解结果是下面这个方程y(x)=4∗e2x4∗...原创 2018-11-27 20:36:05 · 3449 阅读 · 2 评论 -
复合高斯积分(节点数小于等于3的版本Python实现)
被积函数y=11+x2y=11+x2y = \frac{1}{ 1 + x^ 2} x∈[−1,1]x∈[−1,1]x \in [-1, 1]算法描述缺点: 在下面代码中,没有实现点数大于3的情况(等于3的话可以使用) 因为计算对应的系数值的时候,这里就不是直接用python的sympy似乎就搞不定了。 简述: 就是通过勒让德(正交多项式)的零点。来做积分的考量点。之后再结合...原创 2018-06-05 21:19:44 · 2015 阅读 · 0 评论 -
复合五点高斯公式计算(Python实现)
被积函数y=11+x2y=11+x2y = \frac{1}{ 1+x^2} x∈[−1,1]x∈[−1,1]x \in [-1 , 1]算法分析这里使用分段的方式,这里的节点做了变换之后记得对于结果记得要做类似的变换,来确保这个数值没有问题。 注意到,这里本来想用跟之前的节点数目更少的方法来做分析的时候,发现解方程,算不出对应的系数Ai值。 会陷入开顿当中,或者是报错。 所以...原创 2018-06-05 20:56:10 · 3455 阅读 · 0 评论 -
勒让德多项式(Python实现)
下面是使用了sympy,其中x为设置的symbols。 point是一个整数的参数,我把这个放到了全局变量中,方便修改 也可以放到函数参数中。 代表的是有多少个零点的勒让德多项式。def P(): if point == 0: return 1 elif point == 1: return x p0 = 1 p1 = x...原创 2018-06-05 12:56:11 · 5791 阅读 · 0 评论 -
雅克比迭代法求方程组的解(Python实现)
数值分析题目求方程组 ⎧⎩⎨⎪⎪5x1+2x2+x3=−12−x1+4x2+2x3=202x1+−3x2+10x3=2{5x1+2x2+x3=−12−x1+4x2+2x3=202x1+−3x2+10x3=2\left\{ \begin{array}{c}5x_1+2x_2 + x_3 = -12 \\-x_1 + 4x_2+2x_3 = 20 \\2x_1+-3x_2+10x_3=...原创 2018-05-22 17:48:56 · 13216 阅读 · 9 评论 -
拉格朗日插值--等距节点Python实现并计算误差
目标函数y=11+x2y=11+x2y = \frac{1}{1+x^2}条件通过拉格朗日进行插值但是通过所给的节点的不同,会导致插值的效果也不同。下面方法采用的是用等距节点来实现插值效果。插值节点分别是-5,-4,-3,-2,-1,0,1,2,3,4,5插值效果图龙格显现很严重,不过大致吻合。代码import numpy as npfrom ...原创 2018-05-27 12:44:20 · 4346 阅读 · 0 评论 -
Python求偏导
from sympy import *x, m = symbols('x m')Y = 1 / (1 + x ** 2 + m ** 2)print(diff(Y, m))原创 2018-05-27 13:43:47 · 14471 阅读 · 0 评论 -
埃尔米特插值(等距节点,只用一个点的导数构造n+1阶Hermite多项式)Python实现
函数y=11+x2y=11+x2y = \frac{1}{1+x^2}埃尔米特插值埃尔米特多项式构造方法有很多种。 这里只是用最简单的一种,通过均差来进行构造,最后再通过任意一个点的导数来计算出一个待定系数(这里假设的是m)。下面代码中使用的是第一个点的导数相等来作为限制,算出这个多项式。插值效果代码下面代码就是根据之前的拉格朗日插值改进得到的。所以那个lab...原创 2018-05-27 15:06:30 · 4198 阅读 · 0 评论 -
拉格朗日插值--11次切比雪夫多项式零点作为节点Python实现并计算误差
目标函数y=11+x2y=11+x2y = \frac{1}{1+x^2}条件通过拉格朗日进行插值但是通过所给的节点的不同,会导致插值的效果也不同。下面方法采用的是用等距节点来实现插值效果。插值节点: 使用的是11次切比雪夫多项式的零点(扩展到指定的x空间) 也就是11个特定的节点。可以区别于之前的使用等距节点的情况插值效果图龙格现象基本不严重。虽然误差还存在,...原创 2018-05-27 15:39:46 · 9349 阅读 · 5 评论 -
分段线性插值Python实现(同时估计误差)
函数y=11+x2y=11+x2y = \frac{1}{1+x^2}算法这个算法不算难。甚至可以说是非常简陋。但是在代码实现上却比之前的稍微麻烦点。主要体现在分段上。代码import numpy as npfrom sympy import *import matplotlib.pyplot as pltdef f(x): return 1 / (1 ...原创 2018-05-27 16:34:13 · 5227 阅读 · 1 评论 -
分段埃尔米特插值Python实现并检查误差
函数y=11+x2y=11+x2y = \frac{1}{1 + x^2}图像 可以看到,这里已经几乎没有任何差距了。。代码import numpy as npfrom sympy import *import matplotlib.pyplot as pltdef f(x): return 1 / (1 + x ** 2)def cal(be...原创 2018-05-27 16:49:04 · 3465 阅读 · 0 评论 -
三次样条插值Python实现
函数y=11+x2y=11+x2y = \frac{1}{1 + x^2}算法分析三次样条插值。就是在分段插值的一种情况。 要求:在每个分段区间上是三次多项式(这就是三次样条中的三次的来源) 在整个区间(开区间)上二阶导数连续(当然啦,这里主要是强调在节点上的连续)加上边界条件。边界条件只需要给出两个方程。构建一个方程组,就可以解出所有的参数。这里话,根据第一类样条作...原创 2018-06-04 22:15:20 · 36331 阅读 · 18 评论 -
Python求积分(定积分)
函数∫21xdx∫12xdx\int_1^2 {x} \,{d}x代码from sympy import *x = symbols('x')print(integrate(x, (x, 1, 2)))解释integrate(函数,(变量,下限, 上限))原创 2018-06-04 22:28:01 · 111843 阅读 · 8 评论 -
Sympy含pi等表达式转浮点数形式
介绍有时通过sympy进行科学运算的时候,有些时候是需要用到数值形式,有些时候是需要用到表达式形式。 这里介绍将包含有e,pi等的数学表达式转成数值的方法代码其中,这里的a就是sympy的表达式a.evalf()上述函数返回值就是一个浮点数。...原创 2018-06-05 00:02:39 · 5170 阅读 · 0 评论 -
超松弛迭代法求方法组的解(Python实现)
数值分析题目求方程组{5x1+2x2+x3=−12−x1+4x2+2x3=202x1+−3x2+10x3=2\left\{ \begin{array}{c}5x_1+2x_2 + x_3 = -12 \\-x_1 + 4x_2+2x_3 = 20 \\2x_1+-3x_2+10x_3=2\end{array}\right. ⎩⎨⎧5x1+2x2+x3=−12−x1+4...原创 2019-05-19 22:21:21 · 2670 阅读 · 0 评论