您的位置:首页 > 编程语言 > MATLAB

第一章笔记 <matlab入门>

2014-02-05 22:54 246 查看
------------> camlight

camlight的目的:创建或者移动在camera coordinates里的光源

主要有一下几种用法:

camlight('headlight') %在camera的位置创建一个光源

camlight('right') %在右上方,下面类似

camlight('left')

camlight

camlight(az,el)

camlight(...,'style')

camlight(light_handle,...)

light_handle = camlight(...)

eg 左上方创建光源,每次从新定位,当camera移动的时候!

surf(peaks)
axis vis3d

h = camlight('left');

for i = 1:20;

      camorbit(10,0)

        camlight(h,'left')

        drawnow;
end 

-------------> daspect && axis equal

daspect([1 1 1])是设置坐标轴的长宽高之比等于1
出现的是默认值,是不一样的
axis equal是将坐标轴的长度单位设成相等

axis equal除了设置了daspect([1 1 1])外,还对一些别的属性进行了设置

下面是axis函数的部分源文件

units = get(ax,'Units'); 
set(ax,'Units','Pixels');
a = get(ax,'Position'); 
set(ax,'Units',units);
set(ax,'DataAspectRatio',[1 1 1]);%-------------------------------------------------------< 这一句相当于daspect([1 1 1])

但可以看到下面还对PlotBoxAspectRatio属性进行了设置

dx = diff(get(ax,'xlim')); dy = diff(get(ax,'ylim'));
dz = diff(get(ax,'zlim'));
set(ax,'PlotBoxAspectRatioMode','auto')
pbar = get(ax,'PlotBoxAspectRatio');
set(ax,'PlotBoxAspectRatio',[a(3) a(4) dz*min(a(3),a(4))/min(dx,dy)]);

------------->eps

eps(a)是|a|与大于|a|的最小的浮点数之间的距离,距离越小表示精度越高。默认a=1。

我们知道浮点数其实是离散的,有限的,而且间隔是不均匀的。我们可以说一个数旁边的数是什么,而它们之间的距离就反应了其精度。越靠近0,数和数之间就越密 集,精度就越高。 

_______________________

但是楼以上的说法是错误的,eps不是matlab所能表示的最小的正数。

可以试试eps和eps/2,如果eps真的是最小的正数,那么eps/2就应该四舍五入到0或eps,但实际上却能精确表示出来。

正确的说法是eps=eps(1),是1的精度。

也就是说matlab无法表示介于1和1+eps之间的数,这些数将被四舍五入到1或1+eps。

比如1+0.3*eps被舍入到1,而1+0.7*eps被舍入到1+eps。

可以用下面的语句进行验证:

1+0.3*eps==1%true

1+0.7*eps==1%false

1+0.7*eps==1+eps%true 

正如前面所说,对浮点数而言,越靠近0,精度就越高。

因此2的精度就比1的精度要低。事实上,matlab无法区分介于2和2+2*eps之间的数。

也就是说eps(2)=2*eps,

下面是验证:

2+eps==2%true,说明matlab无法区分2和2+eps

1+eps==1%false,说明matlab可以区分1和1+eps,因此1的精度比2高 

0的精度是最高的,也就是说eps(0)才是matlab所能表示的最小的正数。

它和eps相比相差了300多个数量级,eps和它相比大的简直是个天文数字。

------------->interp

interp1       一维数据插值函数

一维数据插值。该函数对数据点之间计算内插值,它找出一元函数f(x)在中间点的数值,其中函数表达式由所给数据决定。

yi=interp1(x,Y,xi):返回插值向量yi,每一元素对应于参量xi,同时由向量X与Y的内插值决定。参量x 指定数据Y的点。
若Y为一矩阵,则按Y的每列计算。

yi是阶数为length(xi)*size(Y,2)的输出矩阵。

yi=interp1(Y,xi):假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。

yi=interp1(x,Y,xi,method):用指定的算法计算插值。nearest为最近邻点插值,直接完成计算;

linear为线性插值(默认方式),直接完成计算;spline为三次样条函数插值。

yi=interp1(x,Y,xi,method,'extrap'):对于超出x范围的xi中的分量将执行特殊的外插值法extrap。

yi=interp1(x,Y,xi,method,extrapval):确定超出x范围的xi中的分量的外插值extrapval,其值通常取NaN或0。

interp2函数    二维数据内插值
完成二维的数据插值。
ZI=interp2(X,Y,Z,XI,YI):返回矩阵ZI,其元素包含对应于参量XI与YI(可以是向量、或同型矩阵)的元素。

用户可以输入行向量和列向量Xi与Yi,此时,输出向量Zi与矩阵meshgrid(xi,yi)是同型的。同时取决于由输入矩阵X、Y与Z确定的二维函数Z=f(X,Y)。

ZI=interp2(Z,XI,YI):默认地,X=1:n、Y=1:n,其中[m,n]=size(Z)。

再按第一种情形进行计算。

ZI=interp2(Z,n):作n次递归计算,在Z的每两个元素之间插入它们的二维插值,这样,Z的阶数将不断增加。interp2(Z)等价于interp2(z,1)。

ZI=interp2(X,Y,Z,XI,YI,method):用指定的算法method计算二维插值。

linear为双线性插值算法(默认算法),nearest为最临近插值,spline为三次样条插值,cubic为双三次插值。

interp3函数     三维数据插值
完成三维数据插值。

VI=interp3(X,Y,Z,V,XI,YI,ZI):求出由参量X,Y,Z决定的三元函数V=V(X,Y,Z)在点(XI,YI,ZI)的值。

参量XI,YI,ZI是同型阵列或向量。

若向量参量XI,YI,ZI是不同长度、不同方向(行或列)的向量,这时输出参量VI与Y1,Y2,Y3为同型矩阵。Y1,Y2,Y3为用函数meshgrid(XI,YI,ZI)生成的同型阵列。

若插值点(XI,YI,ZI)中有位于点(X,Y,Z)之外的点,则相应地返回特殊变量值NaN。

VI=interp3(V,XI,YI,ZI):默认地,X=1:N,Y=1:M,Z=1:P,其中,[M,N,P]=size(V),再按上面的情形计算。

VI=interp3(V,n):作n次递归计算,在V的每两个元素之间插入它们的三维插值。这样,V的阶数将不断增加。interp3(V)等价于interp3(V,1)。

VI=interp3(...,method):用指定的算法method做插值计算。linear为线性插值(默认算法),cubic为三次插值,spline为三次样条插值,nearest为最邻近插值。

interpn函数     n维数据插值
完成n维数据插值。
VI=interpn(X1,X2,...,Xn,V,Y1,Y2,..,Yn):返回由参量X1,X2,..,Xn,V确定的n元函数V=V(X1,X2,..,Xn)在点(Y1,Y2,...,Yn)处的插值。参量Y1,Y2,...,Yn是同型的矩阵或向量。

若Y1,Y2,...,Yn是向量,则可以是不同长度,不同方向(行或列)的向量。

VI=interpn(V,Y1,Y2,...,Yn):默认地,X1=1:size(V,1),X2=1:size(V,2),...,Xn=1:size(V,n),再按上面的情形计算。

VI=interpn(V,ntimes):作ntimes递归计算,在V的每两个元素之间插入它们的n维插值。这样,V的阶数将不断增加。interpn(V)等价于interpn(V,1)。

------------->mash&&surf

mesh和surf命令都可以绘出某一区间内的完整曲面

它们的调用方法类似,不同的是
                                   mesh命令绘制的图形是一个一排排的彩色曲线组成的网格图

surf命令绘制得到的是着色的三维曲面

------------->meshgrid 

使用方法:    [X,Y] = meshgrid(x,y) 将向量x和y定义的区域转换成矩阵X和Y,这两个矩阵可以用来表示mesh和surf的三维空间点以及两个变量的赋值。

其中矩阵X的行向量是向量x的简单复制,而矩阵Y的列向量是向量y的简单复制。

    详细解释:
用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。
[A,B]=Meshgrid(a,b)

生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。因此命令等效于:

A=ones(size(b))*a;
B=b'*ones(size(a))

如下所示:

>> a=[1:2]

a =

     1     2

>> b=[3:5]

b =

     3     4     5

>> [A,B]=meshgrid(a,b)

A =

     1     2

     1     2

     1     2

B =

     3     3

     4     4

     5     5

 

>> [B,A]=meshgrid(b,a)

B =

     3     4     5

     3     4     5

A =

     1     1     1

     2     2     2

------------->phong

Phong着色法(Phong shading),是三维电脑图像的绘图技巧之一,结合了多边形物体表面反射光的亮度,并以特定位置的表面法线作为像素参考值

以插值方式来估计其他位置像素的色值。

由美国越南裔学者裴祥风(Bùi T??ng Phong)发明,于1973年的博士论文首度发表。

与Gouraud着色法比较,Phong着色法的效果比前者更逼真,但运算程序也比前者为复杂。

其原理要从光照和光线的反射讲起。

光线的反射有两种极端情况,一种是漫反射,另一种是镜面反射。
取得这两种反射情况的数学公式是不同的。
此外,由于我们看到的许多物体表面并没有受到光源的直接照射,而是受到在周围环境中几经反射的光的照射

物体之间复杂的反射现象也需要以某种方式反映在着色模型里。
由此还要引进一种环境光,它照射到场景的所有表面,并被每一个表面均匀地向所有方向反射。

模型是将物体表面的光反射看成是环境光的反射之和与光源直接有关的漫反射及镜面反射的组合。
从数学上讲就是将反射的总能量看做是光环境的强度,点光源的强度乘以三个不同的系数后相加的和。
这三个系数分别是代表物体表面反射环境光、产生漫反射和产生镜面反射的能力。
为每一个要知道颜色的点计算颜色通常需要很高的代价。
这在产生图像的目的仅仅是浏览一下的情况下是没必要的

为了解决这个问题,我们只是有选择的在某些表面点上全面的使用模型公式,然后依靠颜色差值和表面法线向量差值等技术来为其表面点着色

------------->x.^2中的.

 
x.^2中的.意思为按位计算

------------> 524288

724^2 < 524288 < 725^2

------------> 对gamma的联想

gamma函数

伽玛函数(Gamma Function)作为阶乘的延拓,是定义在复数范围内的亚纯函数

通常写成Γ(x).  当函数的变量是正整数时函数的值就是前一个整数的阶乘,或者说Γ(n+1)=n!。

也可以是复数。

invgammacorrection函数

Gamma矫正的作用,指更改 gamma 值以匹配图像的中间灰度

需要两个基本步骤补偿 gamma 变化:

校准输出显示设备,以使软件生成的中间色调精确地复制到显示设备上。在“首选项”对话框(显示 Gamma)的 Gamma 面板中进行此项操作。

通过渲染器和文件输入到软件,确定要应用于文件输出的 gamma 值,例如纹理贴图。这个控件也位于“首 选项”对话框(文件 Gamma)中的 Gamma 面板中。

gamma 校正中最重要的一条规则就是只做一次校正。如果做两次的话,图像质量会过亮并损失颜色分辨率。

gamma变换

对图像RGB三个通道进行gama变换增强

原理:x^gama,x是像素值归一化到(0,1)

------------>拉普拉斯(laplace)积分变换在

1、拉普拉斯(laplace)变换
语法:F= laplace(f,t,s)  %求时域函数f(t)的laplace变换F
F是s的函数,参数s省略,返回结果F默认为’s’的函数;

f为t的函数,当参数t省略,默认自由变量为’t’。

2、拉普拉斯(laplace)反变换
语法:F=i laplace(f,t,s)  %求F的laplace反变换f

eg 求sin(at)和阶跃函数的laplace变换
解:>>syms a t s

       >>F1=laplace(sin(a*t),t,s)  %求sin(at)函数的laplace变换

        F1=a/(s^2+a^2)

        F2=laplace(sym('heaviside(t)'))  %求阶跃函数的laplace变换(heaviside(t) 阶跃函数)

        F2 =

        1/s

eg 求1/(s+a)和1函数的laplace反变换
解:>>syms a t s

        >>f1=ilaplace(1/(s+a),s,t)  %求1/(s+a)函数的laplace反变换

        f1 =

        exp(-a*t)

        >>f1=ilaplace(1,s,t)  %求1函数的laplace反变换是脉冲函数dirac(t)

        f1 =

        dirac(t)

------------>Maple

可以让你直接访问Maple函数。
这个函数以符号对象、字符串、double作为输入,输出和输入相应的结果。还可以使用maple函数编译你所编写的符号数学程序。

eg:maple('gcd(14, 21)') 用maple调用maple内核中的gcd来求两个证书的最大公因数
maple('gcd(x^2-y^2,x^3-y^3)') 求最大公因子

如果想用maple命令在matlab环境下的任何地方使用gcd,你可以编制一个M文件来表示它。
eg:function g = gcd(a, b)

      g = maple('gcd',a, b);
将这个文件保存到目录toolbox/symbolic/@sym下,就可以随意调用gcd

对于矩阵的处理可以如下
function y = sin1(x)
for k = 1: prod(size(x))

  y(k) = maple('sin',x(k));
end
y = reshape(y,size(x));

效率更高的方法,只访问一次maple
function y = sin2(x)
if  prod(size(x)) == 1           % scalar case

  y = maple('sin',x);
else                             % array case

  y = maple('map','sin',x);
end

Maple命令提供了两种编译设备:

跟踪方式(trace mode)            maple traceon
a = sym('a');
exp(2*a)

状态输出参数(Status Output Argument)
[result, status] = maple('discrim', a*x^2+b*x+c)

------------>subs(表达式;被替换值;替换会用的值)

调用格式:R = subs(S)R = subs(S, new)R = subs(S, old, new)

>> syms x;

>> f=x^2;

>> subs(f,2)

ans =

4

将表达式x^2+y^2中x取值为2

>> syms x y;

>> f=x^2+y^2;

>> subs(f,x,2)

ans =

y^2 + 4

>> syms x y;

>> f=x^2+y^2;

>> subs(f,findsym(f),2)

ans =

y^2 + 4                   %其中findsym(f)为查找f中所有的符号变量

同时对两个或多个变量取值求解

>> syms a b;

subs(cos(a) + sin(b), {a, b}, {sym('alpha'), 2})

ans =

sin(2) + cos(alpha)

带入数据的值也可以是数组形式

>> syms t a;

>> subs(exp(a*t), 'a', -magic(2))

ans =

[   1/exp(t), 1/exp(3*t)]

[ 1/exp(4*t), 1/exp(2*t)]

------------>syms创建符号变量和表达式 

定义符号变量和表达式 x = sym('alpha') x输出为alpha
rho = sym('(1 + sqrt(5))/2') 然后通过符号变量rho可以计算各种各样的符号计算
如果要定义一个含有多个符号的表达式f =sym('a*x^2 + b*x + c'),

此时f不能用来作为较高级的微分积分等运算,必须先明确定义每一个符号:syms a b c x

可以用来将数值类型变量值转换成符号类型
x = sym('x','real') syms x y real 

可以指定符号变量的类型

可以用来定义抽象函数f = sym('f(x)')  df = (subs(f,'x','x+h') - f)/'h'

可以访问Maple中的函数kfac = sym('k!')  subs(kfac,k,6)

可以创建符号矩阵syms a b c A = [a b c; b c a; c a b]

注意:对于定义常数的符号变量时必须采用f = sym('5')形式。
Syms 一旦定义后所有的符号都从定义开始生效,前面相同的定义只对syms前起作用

Findsym(f) 用来找出符号变量f中的符号变量,
Findsym(f,1)用来查找符号变量f中的默认变量

Subs(f,a,b) 用符号新符号变量b,替换f中的符号变量a,当然b可以是数字

 
用户可以自己定义符号函数。
通过在@sym 文件夹目录下创建M-文件,来建立自己的符号函数:此时可以扩充到多个参变量的情况
function z = sinc(x)
%SINC The symbolic sinc function
%     sin(x)/x. This function
%     accepts a sym as the input argument.
if isequal(x,sym(0))

    z = 1;
else

    z = sin(x)/x;
end

------------> symsum 函数求数列或级数的和
syms n 
symsum(f(n), n a ,b)

其中, f (n)为数列或级数的通项,n 为自变量,a 为该数列或级数所求和的起始项数
b 为该数列或级数所求和的结束项数.

------------> matlab控制运算精度用的是digits和vpa这两个函数

digits用于规定运算精度

比如:digits(20); 这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。

vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用

vpa函数。

digits(5);
a=vpa(sqrt(2));

这样a的值就是1.4142,而不是准确的1.4142135623730950488016887242097

digits(5);
a=vpa(sqrt(2));

  b=sqrt(2);

这样a的值是1.4142,b没有用vpa函数,所以b是1.4142135623730950488016887242097......

vpa函数对其中每一个运算都控制精度,并非只控制结果。

digits(11);

a=vpa(2/3+4/7+5/9);

b=2/3+4/7+5/9;

a的结果为1.7936507936,b的结果为1.793650793650794......

也就是说,计算a的值的时候,先对2/3,4 /7,5/9这三个运算都控制了精度,又对三个数相加的运算控制了精度。

而b的值是真实值,对它取11位有效数字的话,结果为1.7936507937,与a不同

就是说vpa并不是先把表达式的值用matlab本身的精度求出来,再取有效数字,而是每运算一次,都控制精度。

------------>Z变换(Z-transform)

在数学和信号处理上,把一连串离散的实数或复数信号,从时域转为频域表示。

除数字信号处理领域外,Z-变换也是控制理论的重要基石。

此外,Z-变换亦可视为一种数列与连续函数间的对应关系的定义,更可将对数列运算映射为对连续函数的运算。因此使用Z-变换可使一些数列相关问题得到简化(如排队论等)。

------------>三种算符操作

Numeric 浮点数算术   Rational 准确地符号算术  VPA 可变精度算术

eg:format long 1/2+1/3 返回长整型的数值计算结果

    sym(1/2)+1/3 返回一个有理符号计算结果

    digits(25) vpa('1/2+1/3') 返回精度为25的数值计算结果

浮点数数值计算是这三个运算中最快的,而且要求的内存也最少,但是结果不是最精确的。

一般输出由format 定义。

符号有理运算是最耗时间和内存的,但结果最为精确。

------------>微积分类函数列表

Diff计算符号微分                                   Jacobian 计算雅可比矩阵

Limit 求符号函数的极限                            Int 求符号函数的积分

Symsum 符号函数关于某个变量求和                   Taylor 求符号函数的有限项泰勒展开式

------------> Jacobian雅可比矩阵

是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。还有,在代数几何中,代数曲线的雅可比量表示雅可比簇:伴随该曲线的一个群簇,曲线可以嵌入其中。

它们全部都以数学家雅可比命名;英文雅可比量"Jacobian"可以发音为[ja ˈko bi ən]或者[ʤə ˈko bi ən]。

雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅可比矩阵类似于多元函数的导数。

雅可比矩阵定义为向量对向量的微分矩阵

syms r l f
x=r*cos(l)*cos(f);
y=r*cos(l)*sin(f);
z=r*sin(l);
J=jacobian([x;y;z],[r l f])
结果:
J =
[ cos(l)*cos(f), -r*sin(l)*cos(f), -r*cos(l)*sin(f)]
[ cos(l)*sin(f), -r*sin(l)*sin(f), r*cos(l)*cos(f)]
[ sin(l), r*cos(l), 0 ]

------------>repmat 

即 Replicate Matrix ,复制和平铺矩阵

B = repmat(A,m,n)

B = repmat(A,[m n])

B = repmat(A,[m n p...])

eg:>> a=repmat(randn(3),2,3) 

   a =

      0.5377    0.8622   -0.4336    0.5377    0.8622   -0.4336    0.5377    0.8622   -0.4336

      1.8339    0.3188    0.3426    1.8339    0.3188    0.3426    1.8339    0.3188    0.3426

     -2.2588   -1.3077    3.5784   -2.2588   -1.3077    3.5784   -2.2588   -1.3077    3.5784

      0.5377    0.8622   -0.4336    0.5377    0.8622   -0.4336    0.5377    0.8622   -0.4336

      1.8339    0.3188    0.3426    1.8339    0.3188    0.3426    1.8339    0.3188    0.3426

     -2.2588   -1.3077    3.5784   -2.2588   -1.3077    3.5784   -2.2588   -1.3077    3.5784

拥有相同的表达结果的式

rempat(NaN,m,n)==NaN(m,n)         

repmat(int8(0),m,n)==zeros(m,n,'int8')

rempat(single(int),m,n)==inf(m,n,'single')

repmat(uint32(1),m,n)等价于ones(m,n,'uint32')

repmat(eps,m,n)等价于eps(ones(m,n))

------------>矩阵拼接

way 1 使用矩阵符[]

1.1 横向拼接矩阵a与b时至少保证矩阵的列数相等 

>> c=[a b]  或者  >> c=[a,b]

1.2 纵向拼接矩阵a与b时至少保证矩阵的行数相等

>> c=[a;b]

总之条件即为 ← ← 保证拼接之后能有一个新的矩形 否则报错 

way 2 使用拼接函数
2.1 cat 按指定方向拼接

>> c=cat(dim,a,b) %其中dim用{1,2,3,}代替 对应方向为{垂直,水平,三维}

eg:>> a=[1 2 

       3 4 ]

    >> b=[ 5 6

       7 8]

    >> c=cat(3,a,b)
       c(:,:,1) =
   
1     2

      3     4

       c(:,:,2) =

    5     6

    7     8

*2.2 repmat 用输入矩阵的备份拼接一个大矩阵 

>> a=repmat(b,m,n)   % 纵向复制m次再横向n次复制

B = repmat(A,m,n)

B = repmat(A,[m n])

B = repmat(A,[m n p...])

2.3 horzcat函数 水平拼接 == 1.1

2.4 vertcat函数 垂直拼接 == 1.2   要求一样

2.5 blkdiag函数 构造对角矩阵 c=blkdiag(a,b,c,d,…)

>> c=blkdiag(1,2,3,4)
   c =
     1     0     0     0

     0     2     0     0

     0     0     3     0

     0     0     0     4

函数元素由对角线分布 可以是数组 如下:

>> a=[1 2]

>> b=[3 4

      5 6

      7 8 ]

>> c=[9 10

     11 12]

>> d=blkdiag(a,b,c)

   d =

     1     2     0     0     0     0

     0     0     3     4     0     0

     0     0     5     6     0     0

     0     0     7     8     0     0

     0     0     0     0     9    10

     0     0     0     0    11    12

------------>生成向量
>> 1:10

ans =

     1     2     3     4     5     6     7     8     9    10
 
>> 100:-7:66

ans =

   100    93    86    79    72

>> x=linspace(10,100,10)      

  (x=linspace(a,b,n))
x =

    10    20    30    40    50    60    70    80    90   100

 (  a    a+n   a+2n         …               b-2n   b-n   b    )

------------>下标表示

觉得比C语言里的数组好~Σ(+д+ ;)!!!

A(4,3)就是数组A里第四行第三列 也是A(12)------< 单双下标转换

单双下标转换计算函数
sub2ind 双算单

ind2sub 单算双 

>> sub2ind(size(a),4,3)

>> ans=

      12

多个数据要显示时

a(1,:) == 第一行all

a(2:4,:) == 第二至四行all

a(3,:) == 第三列all

a(:,:) == a 

利用关键字end 

a(1:3,2:end) == 第一至三行从第二个开始到该行末

a(1:2:end)=0 == 每隔两个元素赋值为0 -----> a(m:n:y)=x 从第m行到第y行每隔n个元素赋值为x

------------>乘除法及广义逆矩阵奇异矩阵

1 乘法(无交换律)

C=A*B是A,B满足A为m*k矩阵而B为k*n矩阵是才有的形式

被乘的列数与要乘的行数一致或其中之一为标量,且两矩阵行列数不相等

2 除法(乘法逆运算) 

2.1 左除\  

A\B-------> X*A=B  

2.2 右除/

A/B-------> A*X=B 

2.2.1 ----> pinv(A)*B (A为方阵)             pinv(A)为A的广义逆

2.2.2 ----> inv(A)*B  (A为m×n方阵且m>n)    inv(A)为A'即A的逆

*2.3 广义逆矩阵 generalized inverse matrix or pseudoinverse

是对逆矩阵的推广

若A为非奇异矩阵,则线性方程组Ax=b的解为x=A^(-1)b,其中A的逆矩阵A^(-1)满足A^(-1)A=AA^(-1)=I(I为单位矩阵)。

若A是奇异阵或长方阵,Ax=b可能无解或有很多解。若有解,则解为x=b+(I-XA)у,其中у是维数与A的列数相同的任意向量,X是满足AXA=A的任何一个矩阵,通常称X为A的广义逆矩阵,用A^g、A^-或A^(1)等符号表示,有时简称广义逆。

当A非奇异时,A^(-1)也满足AA^(-1)A=A,且x=A^(-1)b+(I-A^(-1)A)у=A^(-1)b。故非奇异阵的广义逆矩阵就是它的逆矩阵,说明广义逆矩阵确是通常逆矩阵概念的推广。

存在一个唯一的矩阵M使得下面三个条件同时成立:

(1) AMA=A;(2)MAM=M;(3)AM与MA均为对称矩阵。

这样的矩阵M成为矩阵A的Moore-Penrose广义逆矩阵,记作M=A(^+).

广义逆矩阵的计算方法大致可分为三类:以满秩分解和奇异值分解为基础的直接法,迭代法和其他一些常用于低阶矩阵的非凡方法。

← ←第四类matlab法o(*≧▽≦)ツ 

*2.4 奇异矩阵 Singular matrix

首先,看这个矩阵是不是方阵(即行数和列数相等的矩阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。 

然后,再看此方阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。 

同时,由|A|≠0可知矩阵A可逆,这样可以得出另外一个重要结论:可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。 

如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。

如果A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。

非奇异矩阵还可以表示为若干个初等矩阵的乘积,证明中往往会被用到。

如果A(n×n)为奇异矩阵(singular matrix)<=> A的秩Rank(A)<n.

一个方阵非奇异当且仅当它的行列式不为零。

一个方阵非奇异当且仅当它代表的线性变换是个自同构。

一个矩阵半正定当且仅当它的每个特征值大于或等于零。

一个矩阵正定当且仅当它的每个特征值都大于零。

如果A(n×n)为非奇异矩阵(nonsingular matrix)<=> A满秩,Rank(A)=n. 

3 按位运算 加一个.即可 

即 A./B之类的,就会按照对应位置操作 

故./与.\无差别 

处理的对象必须行列数相同 不然位不齐不能运算

------------>幂运算(参考了度娘文库里的某毕设和某文档~(@^_^@)~
1 数学归纳法OTZ
2 矩阵乘法结合律
3 分块对角矩阵
4 利用jordan标准形求解
5 最小多项式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: