Matlab基本数学应用

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,