前沿
数值分析主要解决现实问题中模型很难用具体解析表达式表达的情况。一般通过分析样本数据通过
插值拟合或者说积分的方式实现相应近似多项表达的功能。其中迭代的思想贯穿始终。。
1. 非线性方程的求解。
传统方式求解解析解,但是运算比较繁琐,对于实时操作系统而言,只需要近似的数值解,则采用二
分法(例如:AD转换芯片逐次逼近式就是采用该方式)、迭代法(卷积神经网络中的基本运算)。当我第
一次看到方程可以通过x=f(x)形式求解,打破我对传统解析解的认知,通过迭代方式实现相应收敛解。
谈到这里,需要分析收敛条件以及判断收敛速度,这个是判断该迭代法的性能标志。
2. 线性方程的求解。
传统的方式通过高斯消元法,选定主元进行消元的过程。当然要求改系数矩阵为可逆的方阵。而采
用迭代方式,按照迭代法的基本原理,将AX=B中A拆分成A=C+D,将该线性方程组改写为x= Mx+f ,其
中M为n阶方;f为n维列向量。之后根据之前迭代法的基本思想,提出Yacobi(雅克比迭代法)将系数矩
阵A拆分成上三角、下三角以及对角矩阵,并将线性方程组改写为x =-D^(-1)*(L+U)+D^(-1)*B ,迭代的形式
依然是x=f(x)。高斯-塞得迭代法是在原迭代法的基础上将迭代新值迭代到原先的迭代中。
3. 矩阵特征值和特征向量的求解。
一般应用于有限元分析中,按模求最大特征值和最小特征值及其特征向量,这个没什么好讲的。
4. 插值和拟合
我认为是数值分析的精髓,通过对于样本的分析求得简单的近似函数替代传统的复杂的解析式。
拟合与插值不同的时,后者降低多项表达式的维度以及提高相应的精度。比如一个系统搭建好,由于
系统或硬件自身问题,测得的数据与实际数据存在误差,则可以通过拟合方式,实现误差的最小化。
5. 数值积分和数值微分。
在工程中应用于PID控制,汽车自动驾驶以及三坐标定位等。数值积分诞生的原因是不是所有被积
函数都存在原函数,通过数值积分的方式可以确定模型的规格和大小。
6. 其他代数方程的求根定理(补充)
1.判断根的上下界
定理1:设 ,且
则 方程f(x)=0 的实根的绝对值均小于
定理2:设 ,a0>0,若ak(K>=1)是它的
第一个负系数,(如果没有负系数,则f(x)不会有正根),B是所有负系数绝对值的最大值。
则数是f(x)的正根上界。
定理3:设有n次多项式f(x),首项系数a0>0,若x = c>0,且f(c),f'(c),..f^(n)(c)都取正值,
则 数c是f(x)的正根上限。
2.判断根的个数(包括正根和负根的个数)
https://zhuanlan.zhihu.com/p/341873822
--------------------------------------------------------------------------------------------------------------------------------------------
附 -matlab相应求解函数
总
1. 求解方程或方程组数值解
2. 求矩阵的特征值和特征向量
3. 求矩阵特征方程系数及其对应特征值
4. 求解线性方程组的解
5. 插值和拟合
6. 积分和微分
7. 微分方程
分
1.求解方程或方程组数值解
注:有两种求解方式,vpasolve 和 roots 函数,用法不同。
由于Vpa是外来函数,需要加函数申明 syms x,需要完整的表达式,可以求方程组。
与roots是区别是,roots只需要写入该方程组的行向量(系数coefficiency)
//1) Vpasolve 函数,求解过程如下:
//2) roots函数 ,求解过程如下
例如则 方程 : X^3 - 12*X^2 + 21*X + 88=0
则 E = 1 -12 21 88
Roots(E)即可求得方程的根。
//3) 底层代码
3.1 二分法算法(Bisection Methods Algorithm)(需要已知根的隔离区间)
clc;clear;
%% Author juyaozhao
%% Date: 20210403
%% 二分法算法:适用于连续函数且在已经确定根的隔离范围只有一个根。
%% Parameter Discrible
%% a 隔离根的左限位
%% b 隔离根的右限位
%% Xdef 定义域误差范围限制
%% Ydef 值域误差范围限制
%% k 迭代次数iteration number
%% flag 迭代标志位
f = @(x)exp(x)-10*x+2;
a = input('please enter left limitation:\n');
b = input('please enter right limitation:\n');
Xdef = 1e-6;
Ydef = 1e-6;
k = 999;
flag =1;
%% 前置判断
if (f(a)*f(b)>0)
fprintf("两个初始边界的函数值不异号:\n");
return; %%退出程序
end
%% 运算模式
for i=1:k %%已经限定迭代的次数
c = (a+b)/2;
if abs(a-b) < Xdef %%根的误差范围
break;
elseif abs(f(c)) < Ydef %%函数值误差范围
break;
else
if f(a)*f(c) < 0
b = c;
end
if f(b)*f(c) < 0
a = c;
end
end
flag=i;
end
c= (a+b)/2; %%由于最后运行完a,b,需要求解根进行更新
%% 输出模式
fprintf('iteration number %d, root is %f',k,c);
2.求矩阵的特征值和特征向量
[ v,e ]=Eig(A) , 其中v是特征向量,e是特征值
[e] =eig[A]
3.求矩阵特征方程系数及其对应特征值
E = Poly(A)
至于求特征值,就是求解非线性方程的解,使用roots(m),其中m是行向量。
如E = 1 -12 21 88
则使用root(E)相当于求解 X^3 - 12*X^2 + 21*X + 88=0
4.求解线性方程组的解
主要可以化解求解逆矩阵也可以用左除右除的形式
5. 插值和拟合
(1)插值
一维插值:
Interp1(x,y,u)(自变量,应变量,所求多项式的次数),其中(xi,yi) i=1,2,…n标本数据。
二维插值
Interp2(x,y,z,u)(自变量1,自变量2,应变量,所求多项式的次数),其中(xi,yi,zi) i=1,2,…n标本数据。
n维插值
Interpn(x,y,z,.......u)(自变量1,自变量2,........,应变量,所求多项式的次数),其中(xi,yi,zi,......) i=1,2,…n标本数据。
(2)拟合
Polyfit(x,y,n) (x,y)输入的数据 , n表示拟合曲线二次多项式x的最高系数
特别的, MATLAB自带的app工具箱中CURVE FITTING
纯GUI界面,输入自变量和应变量,然后选择合适的插值方式,即可求出相应插值多项式前面的系数。
其中残差:准确值和理论值之间的关系。
可以通过GENERATE CODE,产生相应的代码。
具体步骤:
//1. 在命令窗口中输入样本参数
//2. APP -Curve Fitting
//3. 输入参数,选择拟合方式为多项式拟合,选择多项式次数为5次,显示为多项式表达式和相应系数,以及判断标准
//4. 产生代码
//5.相关代码解释,产生函数文件
6. 积分和微分
不定积分
Matlab程序(外来的函数用syms定义变量)
Syms x; int(f,x) 其中f为被积函数,x是被积算子
Eg.
定积分
Matlab程序(外来的函数用syms定义变量)
Syms x; int(f,x,a,b) 其中f为被积函数,x是被积算子,a为积分下线,b为积分上限
Eg.
7.微分方程
Syms y(x) , dsolve(微分方程)
微分方程中n阶导数用diff(y,n)表示。N=1时,n可以省略。
Eg.
时间 : 2021-06-13 /14:44:13
更新:2022-11-23 根的上下界判断的定理,以及Matlab拟合工具的案例,Vapsolve和roots 函数的区别。