数值分析核心知识点

1 误差传播与数值精度

有效数字,从首位非零数字开始计算位数。0.0925有3位有效数字,3.1416有5位有效数字。        

避免误差传播的几种方法

  • 避免极小值相减,例如\large 1-cosx可替换为\large sin\frac{x^2}{2}
  • 简化计算步骤
  • 防止出现机器零(过小)或溢出(过大)

2 线性方程组的解

矩阵范数

Jacobi迭代法

有方程组Ax=b,方程组解的迭代公式如下,其中k表示迭代次数。

\large \begin{cases} x^{(k+1)}_1=\frac{1}{a_{11}}(-a_{12}x^{(k)}_2-a_{13}x^{(k)}_3-\cdots-a_{1n}x^{(k)}_n+b_1 ), & \\ x^{(k+1)}_2=\frac{1}{a_{22}}(-a_{21}x^{(k)}_1-a_{23}x^{(k)}_3-\cdots-a_{2n}x^{(k)}_n+b_2 ), &\\ ...............& \\ x^{(k+1)}_n=\frac{1}{a_{nn}}(-a_{n1}x^{(k)}_1-a_{n2}x^{(k)}_2-\cdots-a_{n,n-1}x^{(k)}_{n-1}+b_n ), & \end{cases}

写成矩阵形式为

\large x^{(k+1)}=D^{-1}(L+U)x^{k}+D^{-1}b

其中D,L,U的表示方式表示如下,A=D-L-U,而不是一般意义上的矩阵LU分解。

\large D=\begin{pmatrix} a_{11} & & & \\ & a_{22}& & \\ & & \ddots & \\ & & &a_{nn} \end{pmatrix}\large L=\begin{pmatrix} 0 & & & \\-a_{21} & 0& & \\ & & \ddots & \\ -a_{n1}&-a_{n2} &... &0 \end{pmatrix}\large U=\begin{pmatrix} 0 &-a_{12} & -a_{13}&... \\ & 0&-a_{23} & \\ & & \ddots &-a_{n-1,n} \\ & & &0 \end{pmatrix}

Gauss-Seidel迭代法

进一步的,从Jacobi迭代公式中的第二行开始,带入上面公式计算出的最新k次迭代数值,使收敛速度更快,形式如下

\large \large \begin{cases} x^{(k+1)}_1=\frac{1}{a_{11}}(-a_{12}x^{(k)}_2-a_{13}x^{(k)}_3-\cdots-a_{1n}x^{(k)}_n+b_1 ), & \\ x^{(k+1)}_2=\frac{1}{a_{22}}(-a_{21}x^{({\color{Red} k+1})}_1-a_{23}x^{(k)}_3-\cdots-a_{2n}x^{(k)}_n+b_2 ), &\\ ...............& \\ x^{(k+1)}_n=\frac{1}{a_{nn}}(-a_{n1}x^{({\color{Red} k+1})}_1-a_{n2}x^{({\color{Red} k+1})}_2-\cdots-a_{n,n-1}x^{({\color{Red} k+1})}_{n-1}+b_n ), & \end{cases}

矩阵形式为

\large x^{(k+1)}=(D-L)^{-1}(Ux^{(k)}+b)

两种方法均收敛的充要条件为,系数矩阵严格对角占优

谱半径<1,对称正定也可以证明收敛,范数>1不代表发散。

3 函数插值法

拉格朗日插值与余项公式

线性插值公式

\large L_1(x)=\frac{(x-x_1)}{(x_0-x_1)}f(x_0)+\frac{(x-x_0)}{(x_1-x_0)}f(x_1)

二次拉格朗日插值公式

\large L_2(x)=\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}f(x_0)+\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}f(x_1)+\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}f(x_2)

插值余项\large R_{(n)}(x)=\frac{f^{(n+1)}(\varepsilon )}{(n+1)!}\omega _{n+1}(x)

所以,当多项式次数不大于n次时,余项为0,\large f(x)=L_{(n)}(x)

牛顿差商

\small X_k\small f(x_k)1阶差商二阶差商三阶差商...
0\small f(x_0)...
1\small f(x_1)\small f[x_0,x_1]...
2\small f(x_2)\small f[x_1,x_2]\small f[x_0,x_1,x_2]...
3\small f(x_3)\small f[x_2,x_3]\small f[x_1,x_2,x_3]\small f[x_0,x_1,x_2,x_3]...
..................

其中差商\small f[x_0,x_1]=\frac{f(x_1)-f(x_0)}{x_1-x_0},\small f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}...

插值余项为\small E_{(n)}(x)=f[x_0,x_1,...x_n]\omega _{n+1}(x)

等距节点的插值用差分替换差商

Hermit插值与余项公式

在差商表算法基础上,加入导数值,x有一阶导数的,写两行f(x)。

余项为\small R(x)=\frac{f^{(2n+2)}(\varepsilon )}{(2n+2)!}\omega ^{2}_{n+1}(x)

分段插值

为避免龙格现象,将高次多项式改为分段低次多项式插值

\small \varphi _k(x)=\sum_{j=0}^{n}l_j(x)f(x_{j})

4 数值积分

代数精度

首先看一下数值积分公式,\small \int_{a}^{b}f(x)dx\approx \sum_{k=0}^{n}A_kf(x_k),令\small f(x)=1,x,x^2...x^{m},使得公式精确成立,而m+1次方不能精确成立,则代数精度就是m次。

复化梯形公式与余项

\small \int_{a}^{b}f(x)dx\approx \frac{h}{2}[f(a)+2\sum_{k=0}^{n-1}f(x_k)+f(b)],余项为\small -\frac{b-a}{12}h^2f''(\varepsilon ),h为步长。

复化辛普森公式与余项

\small \int_{a}^{b}f(x)dx\approx \frac{h}{6}[f(a)+4\sum_{k=0}^{n-1}f(x_{k+\frac{1}{2}})+2\sum_{k=1}^{n-1}f(x_k)+f(b)],余项为\small -\frac{b-a}{180}(\frac{h}{2})^4f^{(4)}(\varepsilon )

Romberg算法

将步长逐次折半,反复使用复化求积,可算出10个数,推出Romberg算法,步骤如下

k\small T_{2^k}\small S_{2^{k-1}}\small C_{2^{k-2}}\small R_{2^{k-3}}
0\small T_1
1\small T_2\small S_1
2\small T_4\small S_2\small C_1
3\small T_8\small S_4\small C_2\small R_1

\small T_1=\frac{b-a}{2}(f(a)+f(b)),T_{2^k}=\frac{1}{2}T_{2^{k-1}}+\frac{b-a}{2^k} \sum f(\sigma ),其中δ为新分点

\small S_n=\frac{4}{3}T_{2n}-\frac{1}{3}T_{n}

\small C_n=\frac{16}{15}S_{2n}-\frac{1}{15}S_{n}

\small R_n=\frac{64}{63}C_{2n}-\frac{1}{63}C_{n}

5 非线性方程解

二分法

 对于方程f(x)=0,f(a)>0,f(b)<0,那么a,b之间必有一个根,取a,b中点值f(x0),判断f(x0)的符号,如果>0,则根进一步缩小到[x0,b]的区间范围内,再一次取中点判断符号,这样逐步得到一个无限逼近的解,这个方法叫做二分法,二分法的缺点是不能求偶重根。

不动点迭代法

改造方程为x=g(x),从几何图形上分析,y=x与y=g(x)的交点即为原方程的根

\small x_1=g(x_0),\small x_2=g(x_1)...一步步迭代到逼近交点处,求得近似解。注意这里有一个适定性的概念,也就是说,当迭代序列不在解的取值范围内时,结果是不适定的,继续迭代只会越来越偏离。

牛顿法

有f(x)在x0处的Taylor公式可将发f(x)用导数近似,进而得出一个迭代公式

\small g(x)=x-\frac{f(x)}{f'(x)}

几何意义表示为经过f(x)初始某点的切线与x轴的交点作为f(x)的下一个迭代点

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用C语言进行数值计算时,需要掌握以下几个重要的知识点: 1. 变量和数据类型:在C语言中,必须首先定义变量并指定其数据类型,以便存储和操作数值。常见的数据类型包括整型(int)、浮点型(float和double)、字符型(char)等。 2. 算术运算符:C语言支持常见的算术运算符,包括加法(+)、减法(-)、乘法(*)、除法(/)和求余(%),这些运算符可用于执行基本的数值计算。 3. 表达式:在C语言中,可以使用表达式来计算数值。表达式是由变量、常数、运算符和函数调用组成的序列。使用表达式可以执行各种数学运算,如加减乘除、幂运算、绝对值等。 4. 控制流语句:使用C语言的控制流语句,可以根据特定的条件选择性地执行不同的数值计算操作。常见的控制流语句包括if语句、switch语句和循环语句(如for循环和while循环)。 5. 数组和指针:C语言中,可以使用数组来存储一系列相同类型的数值。通过使用指针,可以方便地进行数组元素的访问和操作,从而进行更复杂的数值计算。 6. 数学函数库:C语言提供了丰富的数学函数库,包括数值的求平方、开方、取整、取余等功能。通过使用这些函数,可以方便地进行更复杂的数值计算。 7. 运算符优先级和结合性:在C语言中,不同的运算符具有不同的优先级和结合性。熟悉这些规则很重要,以确保在复杂的数值计算中得到正确的结果。 总之,使用C语言进行数值计算需要了解和理解变量和数据类型、算术运算符、表达式、控制流语句、数组和指针、数学函数库以及运算符优先级和结合性。这些知识点是进行数值计算的基础,掌握它们有助于编写高效且正确的数值计算程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值