MATLAB学习笔记(三)——数值计算

数值计算

主要内容包括:
矩阵的多种运算方法MATLAB实现
计算矩阵的秩、特征值及其对应的特征向量
利用矩阵操作求解线性方程组
数值微积分

矩阵的计算

1、矩阵的结构变换

转置:    A'   A.'(非共轭转置)
对称变换:利用指令flipud()和fliplr()  
A=flipud(B)       %上下方向翻转矩阵。如果是列向量,返回相反顺序的向量;如果是行向量,则返回原向量
A=fliplr(B)       %水平方向翻转矩阵。如果是行向量,返回相反顺序的向量;如果是列向量,则返回列向量
A=flipdim(A,dim)  %返回指定维翻转矩阵。若dim=1,则以行方向翻转;dim=2,则:以列方向翻转
rot90(A,k)        %让矩阵A逆时针旋转90度。注意:该函数仅对下一次变换成立
triu(A,k)         %当K=0/不写时(K缺省时默认为0), 提取主对角线及其上方的元素。当K>0时,提取矩阵A主对角线上方的第K条对角线以上的元素。K<0时,提取矩阵A的主对角线下方第-K条对角线以上的元素。
tril(A,k)         %当K=0/不写时(K缺省时默认为0),提取主对角线及其以下的元素。其中K>0时,提取矩阵A主对角线上方的第K条对角线以下的元素。K>0时,提取矩阵A的主对角线下方第-K条对角线以下的元素。

例如:
% example 1
>> b=[1,2,3;4,5,6;7,8,9;10,11,12];
>> triu(b)

ans =

     1     2     3
     0     5     6
     0     0     9
     0     0     0
 
 % example 2
>> a=[1,2,3;4,5,6;7,8,9];
>> tril(a)

ans =

     1     0     0
     4     5     0
     7     8     9

2、矩阵分析(包括求矩阵的秩、矩阵对应的行列式和矩阵的逆等运算)

rank(A)     %求矩阵A的秩
rref(A)     %求矩阵A的行阶梯矩阵
det(A)      %计算方阵A的行列式
inv(A)      %求方阵A的逆矩阵
%{
如果矩阵A不是方阵或是奇异矩阵时,
该矩阵存在与A的转置矩阵同型的矩阵B,
使得AxBxA=A,BxAxB=B成立,
则B称为A的逆,即伪逆矩阵,
%}
%求伪逆矩阵的函数为pinv()

3、矩阵的特征值分析

[V,D]=eig(A)  % D是A的特征值,V是对应于D的特征向量,若函数只有一个输出宗量,则只给出特征值

4、线性方程组求解

% 方程组 Ax=b,其解为:
x=(A的逆)xb 即x=inv(A)*b / x=A\b

5、解方程组

% MATLAB还提供了函数null()用来求解齐次线性方程组解空间的一组基(即基础解系),格式如下:
X=null(A,'r')
%{
 求系数矩阵A的齐次线性方程组一组基础解系(即一组基)。r是可选参数:
 当有r时,输出有理基;当没有r时,输出正交规范基
%}

数值微积分

当已知函数的表达式时,理论上可以通过公式进行微积分计算。但在实际应用中,往往需要处理的对象
并不能通过公式来进行计算。因此,有必要介绍这些函数的微分和积分的数值算法。

1、差分与偏导

% 差分=f(x+h)-f(x),若h>0,则称为向前差分;若h<0,则称为向后差分。
% 在MATLAB中,计算差分的指令是diff(),调用格式为:
% DX=diff(A,n,dim) %计算矩阵A的n阶差分。dim=1时,按列计算差分;dim=2时,按行计算差分
例如:
clear
clc
dh=pi/10;
h=0:dh:pi;   
x=cos(h).*exp(h);          % 对应每个元素做相应的运算。如果不加上点,则是矩阵的运算
dxdt_diff=diff(x)/dh       % way one
dxdt_grad=gradient(x,dh)   % way two
% 结果为:

dxdt_diff =

  1 至 8 列

    0.9616    0.6824   -0.0255   -1.3455   -3.4561   -6.4783  -10.3924  -14.9207

  9 至 10 列

  -19.3763  -22.4915


dxdt_grad =

  1 至 8 列

    0.9616    0.8220    0.3284   -0.6855   -2.4008   -4.9672   -8.4353  -12.6565

  9 至 11 列

  -17.1485  -20.9339  -22.4915


2、数值积分

1、一重积分
[l,n]=quad(fun,a,b,tol)   
%{
quad()函数是基于遍步长辛普生法的求定积分函数,计算被积函数fun在区间[a,b]上的定积分。
输出宗量l为定积分的结果,n为调用被积函数的次数。tol是定积分结果的精度
如果只有一个输出宗量,即为定积分结果。tol缺省时为10的-6次方。
%}
它
[l,n]=quadl(fun,a,b,tol)
%{
quadl()函数是基于洛巴托法求定积分函数。功能同函数quad()函数。该函数能够精确地求出定积分的值,
且一般情况下quadl()函数调用的步数远远小于quad()函数。
%}

St=trapz(x,y)
%{
以表格形式定义的函数,采用梯形法求函数y关于自变量x的积分
注意:运用该函数无法控制结果的精度。
%}

2、二重积分
S=dblquad(fun,xmin,xmax,ymin,ymax.tol)
S=triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)
%{
采用递推自适应辛普森计算二重积分的函数为dblquad(),
计算三重积分的函数为triplequad(),
tol是积分结果的精度,缺省时默认为10的-6次方。
%}

你可能感兴趣的:(MATLAB)