Matlab基本數學應用


基本線性代數

  • [R jb]=rref(A)將A化為行最簡型矩陣。R為所得行最簡型矩陣,jb是一個向量顯示每行首非0元所在列號。

  • inv(A)求方陣A的逆,注意結果可能出現錯誤。當結果中出現Inf和NaN時一定有錯。

  • pinv(A)求矩陣偽逆

  • A \ b 矩陣左除計算,返回Ax = b的一個特解。當矩陣A為方陣時 A \ b等價於 inv(a) * b;當A不是方陣時只能使用左除計算而不能使用inv(A).

  • A / b 矩陣右除運算,當矩陣A為方陣時 A \ b等價於 inv(a) * b;當A不是方陣時只能使用左除計算而不能使用inv(A

  • det(A) 求矩陣A對應行列式的值

  • rank(A) 求矩陣A的秩

  • trace(A) 矩陣A求跡

  • [V D] = eig(A) 矩陣D為矩陣A所有特征值組成的對角矩陣,矩陣V是由矩陣A的特征向量組成的列向量組,其順序與矩陣D對應。

求解線性方程組

  • 克拉莫法則

  • 化為行最簡型(rref),代入完成剩下的計算。

  • null(A,’r’)可以求解向量空間A的一組有理基(列向量),參數’r’是求有理解(reasonable)的選項。此命令可以求解齊次線性方程組的基礎解系,結合求逆,左(右)除求非齊次方程的特解,可以求解任意線性方程組。

微積分

數學函數的定義

M函數文件,可執行字符串均可用於定義數學函數,但是數學函數通常使用符號表達式和匿名函數來定義.

為了與大多數函數(特別是求解析解的函數)兼容,這里推薦使用符號表達式.

求反函數:

  • g = finverse(f) 求符號表達式f對於默認自變量的反函數

  • g = finverse(f,var) 求符號表達式f對於符號變量var的反函數

復合函數

  • h= compose(f, g)求符號表達式f,g的復合函數f [ g(x) ]

  • h= compose(f, g, t) 求符號表達式f,g的復合函數f [ g(x) ],並代入t作為自變量

函數極限與微積分

極限:

  • limit(expr, x ,a)對符號表達式expr求在變量x趨於a時的極限,返回極限的符號表達式

  • limit(expr, a)對符號表達式expr求在默認自變量趨於a時的極限

  • limit(expr ) 對符號表達式expr求在默認自變量趨於0時的極限

  • limit(expr,x,a,'left')對符號表達式expr求在變量x趨於a時的左極限

  • limit(expr,x,a,'right')對符號表達式expr求在變量x趨於a時的右極限

Matlab通過數列的通項表達式來定義數列,通項表達式也是一個數學函數但是它的自變量是離散的。limit函數同樣可以對數列求極限,如limit(expr, n, Inf)

多重極限視為極限的復合,嵌套調用limit函數:

  • limit(limit(fun,x,x0), x , x0)

  • limit(limit(fun,x,x0), y , y0)

函數求導:

  • dyx = diff(fun) 對符號表達式fun求對於默認自變量的一階導數

  • dyx = diff(fun ,n)

偏導數本質上仍是一元導數,將其余變量賦值后即可使用diff求偏導數。

隱函數求導:

syms x dy 		%定義符號變量
y = sym('y(x)')	%聲明y為x的函數
fun = x*y - 1		%定義隱函數fun(x,y) = 0
dfx = diff(fun,x)   %對fun(x,y) 左側求導考慮,y與x之間的函數關系
dfx = subs(dfx,'diff(y(x),x)',dy)  %定義dy代替導數yx
dfx = solve(dfx,dy)			   %求解關於dy(yx )的方程dfx (dy) = 0

公式法隱函數求導:

syms x y		%定義符號變量
fun = x*y - 1	%定義隱函數fun(x,y) = 0
dy = diff( fun , y) 	%不考慮y與x的函數關系,求Fx。
dx = diff( fun , x)  %不考慮y與x的函數關系,求Fy。
dfx  = - dx / dy			%代入公式

隱函數求高階導:

function [ dyx ] = imdiff(fun,n)
% find the diff of the implict function y=y(x) defined by equation f(x,y)=0
%Please define the next sym :
%syms x dy
%y=sym('y(x)'); 
%please define fun, and you can use this function

    dfx = diff(fun,x);
    dfx = subs(dfx,'diff(y(x), x)',dy);
    dyx=solve(dfx,dy);
    dfx=dyx;
    for i=2:n
                dyx=diff(dyx,x);
                dyx=subs(dyx,'diff(y(x), x)',dfx);
    end
end

參數方程求導:

syms t;
y = sin(t);
x = cos(t);
dx = diff(x,t);
dy = diff(y,t);
dyx = dy / dx;

參數方程求高階導:

function [ dyx ] = paradiff(y,x,t,n)
%recurison diff of a paramatic function
% y = y(t) x = x(t) diff(y,x,n)
    dx = diff(x,t);
    if (n == 1)
                    dyx = diff(y,t) / dx;
    else
                    dyx = diff( paradiff(y,x,t,n-1) / dx);
    end
end

泰勒展開:

  • R = taylor( fun, v, a)fun為關於變量v的數學函數,var為符號變量表示自變量,a為展開點。

  • taylortool命令將打開圖形化的taylor展開分析界面。]

一元積分的解析解:

  • int (fx , x)關於符號表達式fx對變量x求不定積分解析解。當x為默認自變量時可以省略參數x。

  • int (fx , x, a, b)關於符號表達式fx對變量x在區間[a,b]上求定積分解析解。當x為默認自變量時可以省略參數x,可以進行反常積分。

一元積分的數值解:

  • I = integral(fun, xmin, xmax)fun是描述數學函數的函數句柄(不支持符號表達式和可執行字符串),在[xmin,xmax] 區間內求數值積分。含有參數的數學函數可以在參數表結尾依次添加參數值。

  • q = integral(fun,xmin,xmax,Name,Value)可以為integral指定選項。

重積分可以化為嵌套的定積分求解:

I = integral2(fun, xmin, xmax, ymin, ymax)fun是描述數學函數的函數句柄(不支持符號表達式和可執行字符串)。xmin, xmax, ymin, ymax 可以是常數或者數學函數句柄。調用與integral非常類似,三重積分可以使用integral3.

數值分析

擬合與回歸分析

擬合

多項式擬合[a,b,...]=polyfit(X,Y,N),X、Y是代表數據點的坐標,N代表擬合多項式的最高次數,返回降冪排列的多項式系數。

polyval(P, x)用於計算多項式的值,P是降冪排列的系數,x是待計算的自變量。

Matlab中的Fit函數可以進行自定義函數擬合,在使用該函數之前首先要使用fittype函數創建擬合模式參數。

p=fittype(LibraryModelName)使用庫定義的擬合模式,擬合模式是庫定義的描述擬合函數形式的字符串。

‘poly’代表多項式后面緊跟(不含空格)一系列數字代表各個自變量擬合時的最大次數,如 p=fittype(‘poly3’)代表擬合函數為y=k1x3+k2x2+k3*x+k4.

p=fittype(‘poly22’)代表擬合函數為z=k1x2+k2x+ k3y2+k4y+k5.

f=fittype('rat22')是進行比例擬合 y= (p1x^2 + p2x + p3) / (x^2 + q1*x + q2)。

更多擬合模式參見help fittype,調用該函數時將會輸出擬合模式f的表達式

p=fittype(LinearModelName)的參數是一個字符串組成的向量,每一個字符串都是關於自變量x的一個函數,Matlab以這些函數作為各項進行線性擬合.

例如fittype({'sin(x)','x','1'})代表擬合模式y = asin(x) + bx + c

上述擬合表達式中都以x為自變量y為因變量,實際上和許多Matlab函數一樣fittype函數的最后的參數可以是Name-Value對來對屬性進行設置.

  • 'independent'和一個代表自變量的字符串或string-cell數組

  • 'dependent'和代表因變量的字符串

  • 'coefficients'和代表系數的字符串或string-cell數組

p=fittype(expression)可以直接使用可執行字符串描述擬合函數模式,但需要在其后指定參數和自變量名稱(默認為x)

p=fittype(@(coefficients,independent,dependent))允許以匿名函數作為參數,但要求參數表按照先寫系數最后兩個依次為自變量和因變量的順序書寫

fit( X, Y,model)model是fittype型變量(本質是個類對象),X列向量,Y為X的等長列向量組,返回值中包含擬合系數和代表擬合程度的數組stats

線性回歸分析

上述擬合可以得到擬合函數但不能分析擬合程度,Matlab中的regress函數在進行擬合的同時返回代表擬合程度的值.

[b,bint,r,rint,stats] = regress(y,X,, alpha),參數y代表因變量組成的列向量,參數X為自變量矩陣將其理解為行向量組,每個行向量表示一組x值,通常將第一列置為全1向量以獲得常數項。

返回值b列向量代表每個自變量的系數,第一個系數是常數項,bint是一個兩列向量代表系數的置信區間,r為殘差列向量,rint為兩列向量,stats元素依次為殘差平方和R2,F_檢驗值,閾值f,顯著性概率p.

一般地,F_越大越好一般要求F_至少大於閾值f。參數中alpha為顯著性檢驗標准,默認為0.05,當返回值stats中p>alpha則表示有變量作用不明顯可以剔除。

regress函數利用最小二乘法進行線性回歸分析,返回的值b實際是各個自變量的系數即y(m,1)=X(m, 😃*b(:, m)或y=Xb,若有一個自變量始終為1那它的系數即為常數項。

regress函數只能進行線性回歸分析但是可以得到擬合情況的反饋,從而對擬合進行判斷。polyfit,與fittype可以進行多項式或者曲線擬合卻不能得到擬合效果的反饋。

假設已有數據X 和Y,在Matlab軟件包中,使用stepwise命令進行逐步回歸,得到回歸方程y=k1x1+k2x2+...+ε其中ε是隨機誤差。

stepwise命令的使用格式如下:stepwise(X,Y) ,X,Y與regress的要求一致。

注意:應用stepwise命令做逐步回歸,數據矩陣X的第一列不需要人工加一個全1向量,程序會自動求出回歸方程的常數項(intercept)。

在應用stepwise命令進行運算時,程序不斷提醒將某個變量加入(Move in)回歸方程,或者提醒將某個變量從回歸方程中剔除(Move out)。

方程數值解

[x, fval, exitflag, output] = fzero( fun, x0, options)
參數表:

  • fun為表達式,函數求fun(x) = 0的數值解。

    • x0為迭代的初始解。
    • options選項結構體,包括Display和Tolx兩個選項:Tolx 為誤差限;Display為輸出格式。如:- options = optimset('Display','final')

返回值:

  • x為求得的解。

  • fval是根處目標函數的值

  • exitflag表示解的存在狀況:正數表示存在,負數表示不存在

  • output為包含計算過程信息的結構體:

    • output.algorithm 表示求解算法

    • output.funcCount 表示函數賦值次數

    • output.iterations 表示迭代次數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM