前沿
數值分析主要解決現實問題中模型很難用具體解析表達式表達的情況。一般通過分析樣本數據通過
插值擬合或者說積分的方式實現相應近似多項表達的功能。其中迭代的思想貫穿始終。。
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 函數的區別。