metlab快速学习2

目录

数据分析与多项式计算

求最大元素和最小元素

 求矩阵的平均值和中值

求和与求积

标准差与相关系数

排序

 多项式计算

1.多项式的表示

2.多项式的四则运算

 3.多项式求导

 4.多项式的求值

 5.多项式的求根

 数值微分与数值积分

数值微分

 数值积分

线性方程组求解

(1)利用左除运算符的直接解法

 (2)MATLAB的LU分解函数  


 

数据分析与多项式计算

求最大元素和最小元素

max():求向量或矩阵的最大元素。

(1) y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。
(2) [y, k]=max(X): 返回向量X的最大值存入y,最大值元素的序号存入k,如果X中包含复数元素,则按模取最大值。

当参数为矩阵时,函数有三种调用格式:
(1) max(A): 返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
(2) [Y, U]=max(A):返回行向量Y和U,Y向量记录A中每列的最大值,U向量记录每列最大值元素的行号。
(3) max(A, [], dim): dim取1或2。dim取1时,该函数的功能和max(A)完全相同; dim取2时, 该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。

>> x=[1,3,4,2,6]
x =1     3     4     2     6

>> [a,b]=max(x)
a = 6
b = 5

>> y=max(x)
y = 6


>> a=[3,1,4;5,9,2;7,6,8]
a =  3     1     4
     5     9     2
     7     6     8

>> y=max(a)
y = 7     9     8

>> b=max(a,[],2)
b =  4
     9
     8

 min():求向量或矩阵的最小元素。(用法同上)

 求矩阵的平均值和中值

mean():求算数平均值

median():求中值 

>> x=[1,4,6,5,8]
x = 1     4     6     5     8

>> mean(x)
ans =  4.8000

>> median(x)
ans =  5

求和与求积

sum():求和           cumsum():累加和

prod():求积           cumprod():累乘积

>> a=[1,2,3,4,5]
a =  1     2     3     4     5

>> sum(a)
ans = 15

>> cumsum(a)
ans = 1     3     6    10    15

>> prod(a)
ans = 120

>> cumprod(a)
ans = 1     2     6    24   120

标准差与相关系数

MATLAB中计算标准差的函数为std(),其调用格式为:
(1) std(X): 计算向量X的标准差。
(2) std(A): 计算矩阵A的各列的标准差。
(3) std(A, flag, dim): flag取0或1, 当flag=0时,按(1)所列公式计算样本标准方差;当flag=1时, 按(2)所列公式计算总体标准方差。在默认情况下,flag=0, dim=1。 

>> a=[1,2,3,4,5]
a =   1     2     3     4     5

>> std(a)
ans = 1.5811

 

在MATLAB中,计算相关系数的函数为corrcoef(),其调用格式为:
(1) corrcoef (A):返回由矩阵A所形成的一个相关系数矩阵,其中,第i行第j列的元素表示原矩阵A中第i列和第j列的相关系数。
(2) corrcoef(X, Y):在这里,X, Y是向量,它们与corrcoef([xX, Y])的作用一样,用于求X、Y向量之间的相关系数。 

>> x=[1,2,3,4,5]
>> y=[2,4,6,8,10]
>> corrcoef(x,y)
ans =
    1.0000    1.0000
    1.0000    1.0000

排序

在MATLAB中,排序函数为sort(),其调用格式为:
(1) sort (X): 对向量X按升序排列。
(2) [Y, I]=sort (A, dim, mode),其中dim指明对A的列还是行进行排序。mode指明按升序还是降序排序,若取“ascend”,则按升序;若取“descend”,则按降序,默认为升序。输出参数中,Y是排序后的矩阵,而I记录Y中的元素在A中位置。

>> [Y,l]=sort([3,1,2,5,4])

Y =  1     2     3     4     5
l =  2     3     1     5     4

 多项式计算

1.多项式的表示

 在MATLAB中创建多项式向量时,要注意三点:
(1)多项式系数向量的顺序是从高到低。
(2)多项式系数向量包含0次项系数,所以其长度为多项式最高次数加1。
(3)如果有的项没有,系数向量相应位置应用0补足。

2.多项式的四则运算

>> f=[3,-5,0,-7,5,6]; g=[3,5,-3];  g1=[0,0,0,g];
>> f+g1
ans =
     3    -5     0    -4    10     3

>> f-g1
ans =
     3    -5     0   -10     0     9

>> conv(f,g1)
ans =
     0     0     0     9     0   -34    -6   -20    64    15   -18

>> conv(f,g)
ans =
     9     0   -34    -6   -20    64    15   -18

>> [Q,r]=deconv(f,g)
Q =
    1.0000   -3.3333    6.5556  -16.5926
r =
         0         0         0         0  107.6296  -43.7778

>> conv(g,Q)+r
ans =
    3.0000   -5.0000         0   -7.0000    5.0000    6.0000

 3.多项式求导

(1) p=polyder(P): 求多项式P的导函数。
(2) p=polyder(P, Q):求P*Q的导函数。
(3) [p, q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。


>> a=[3 1 0 -6];
b=[1 2];

>> c=polyder(a,b)
c =
    12    21     4    -6

>> [p,q]=polyder(a,b)
p =
     6    19     4     6
q =
     1     4     4

 4.多项式的求值

polyval(p, x): 代数多项式求值,其中,p为多项式系数向量,x可以是标量、向量或矩阵。若x为标量,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值。
polyvalm(p, x):矩阵多项式求值,其调用格式与polyva1相同,但含义不同。polyvalm函 数要求x为方阵,以防阵为自变量求多项式的值。

设A为方阵,P代表多项式x3-5x2+8,那么polyvalm(P, A)的含义是:
A*A*A-5*A*A+8*eye (size (A))        (eye(N),返回N*N大小的单位矩阵


而polyval(P, A)的含义是:
A. *A. *A-5*A. *A+8*ones (size (A))      (ones   创建全部为 1 的数组

 

>> a=[1,8,0,0,-10];
x=[-1,1.2;2,-1.8];
y1=polyval(a,x)
y1 =
  -17.0000    5.8976
   70.0000  -46.1584

y2=polyvalm(a,x)
y2 =
  -60.5840   50.6496
   84.4160  -94.3504

 5.多项式的求根

在MATLAB中,多项式求根函数是roots(p),其中p为多项式的系数向量。

例如求x^2-2x-3的根

a=[1 -2 -3]

x=roots(a)

x =

    3.0000
   -1.0000

若已知多项式的所有根,可以用poly函数建立该多项式,其调用方式为p=ploy(x)
>> p=poly(x)

p =

    1.0000   -2.0000   -3.0000

>> p=[-38.89,126.11,-3.42];
>> q=polyder(p)
 
>> roots(q)
 
>> polyval(p,1.6214)
 
>> x=0:0.1:2;
>> plot(x,polyval(p,x),1.6214,98.8154,'rp');

 数值微分与数值积分

数值微分

(数值微分的实现
MATLAB提供了求向前差分的函数diff,其调用格式有三种:
dx=diff(x): 计算向量x的向前差分,dx(i)=x(i+1)-x(i), i=1,2,.,n-1。
dx=diff(x, n):计算向量x的n阶向前差分。例如,diff (x, 2)=diff (diff (x))。
dx=diff(A, n, dim): 计算矩阵A的n阶差分,dim=1时 (默认状态),按列计算差分; dim=2, 按行计算差分。
注意: diff函数计算的是向量元素间的差分,故差分向量元素的个数比原向量少了
一个。同样,对于矩阵来说,差分后的矩阵比原矩阵少了一行或一列。另外,计算差分之后,可以用f (x)在某点处的差商作为其导数的近似值。

>> x=[1,1,2,3,5,8,11];
>> dx=diff(x)
dx =
     0     1     1     2     3     3

>> dx1=diff(x,2)
dx1 =
     1     0     1     1     0

>> A=[1,2,3;2,4,6]
A =
     1     2     3
     2     4     6

>> dx=diff(A,1)
dx =
     1     2     3

>> dx=diff(A,1,2)
dx =
     1     1
     2     2

 数值积分

(2)数值积分的实现
0基于自适应辛普森方法
[I, n]=quad (filename, a, b, tol, trace)
0基于自适应Gauss-Lobatto方法
[I, n]=quadl (filename, a, b, tol, trace)
其中,filename是 被积函数名; a和b分别是定积分的下限和上限,积分限[a, b]必须是有限的,不能为无穷大(Inf) ; to1用来控制积分精度,默认时取tol=10-6; trace控制 是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认时取trace=0;返回参数I即定积分的值,n为被积函数的调用次数。

>> format long
f=@(x) 4./(1+x.^2);
[I,n]=quad(f,0,1,1e-8)
I =
   3.141592653733437
n =
    61

[I,n]=quadl(f,0,1,1e-8)
I =
   3.141592653589806
n =
    48

(atan(1)-atan(0))*4
 
format short
ans =

   3.141592653589793

基于全局自适应积分方法
I=integral (filename, a, b)
其中,I是计算得到的积分; filename是 被积函数; a和b分 别是定积分的下限和上限,积分限可以为无穷大。

被积函数文件fe.m:
function f=fe(x)
f=1./(x.*sqrt(1-log(x).^2));

>> I=integral(@fe,1,exp(1))
I =

    1.5708

基于全局自适应积分方法
I=integral (filename, a, b)
其中,I是计算得到的积分; filename是 被积函数; a和b分别是定积分的下限和上限,积分限可以为无穷大。

 

被积函数文件fsx.m:
function f=fsx(x)
f=sin(1./x)./x.^2;

 I=quadgk(@fsx,2/pi,+Inf)

I =

    1.0000

基于梯形积分法
I=trapz(x, y)
其中,向量x、y定义函数关系y=f (x)。

可用以下语句实现:
sum(diff(x). *(y(1:end-1) +y (2:end))/2)

线性方程组求解

(1)利用左除运算符的直接解法

MATLAB提供了一一个左除运算符“\”用于求解线性方程组,它使用列主元消去法,
使用起来十分方便。对于线性方程组Ax=b,可以利用左除运算符反斜杠求解,b左
除以A可获得线性方程组的数值解x。
Ax=b = x=A\b
注意,如果矩阵A是奇异的或接近奇异的,则MATLAB会给 出警告信息。

A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13;-9;6;0];
>> x=A\b

x =

  -66.5556
   25.6667
  -18.7778
   26.5556

 (2)MATLAB的LU分解函数  

矩阵的LU分解就是将一个n阶矩阵表示为一个下三角矩阵和一个上三角矩阵的乘积。线性代数中已经证明,只要方阵是非奇异的,LU分解总是可以进行的。

对于三角方程很容易求解,于是可以首先求解向量y使Ly=b,再求解Ux=y, 从
而达到求解线性方程组Ax=b的目的。 

LU分解函数是根据列主元LU分解算法定义的,具有较好的数据稳定性。lu
函数有两种调用格式:
[L,U]=lu(A): 产生一个上三角阵U和一个变换形式的下三角阵L,使之满足A=LU。注意,这里的矩阵A必须是方阵。

Ax=b→LUx=b→x=U\ (L\b) 


[L,U, P]=lu(A): 产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PA=LU。同样,矩阵A必须是方阵。

Ax=b→PAx=Pb→LUx=Pb→x=U\ (L\P*b) 


当使用第一种格式时,矩阵L往往不是一个下三角阵,但可以通过行交换成为一
个下三角阵。

再次求解上面的方程

>> A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
b=[13,-9,6,0]';
[L,U]=lu(A);
x=U\(L\b)

x =

  -66.5556
   25.6667
  -18.7778
   26.5556

>> [L,U, P]=lu(A);
>> x=U\(L\P*b)

x =

  -66.5556
   25.6667
  -18.7778
   26.5556

 雅可比迭代法的函数文件jacobi.m:

function [y,n]=jacobi(A,b,x0,ep)
D=diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
B=D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep
    x0=y;
    y=B*x0+f;
    n=n+1;
end

Gauss-Serdel迭代法的函数文件gauseidel.m:

function [y,n]=gauseidel(A,b,x0,ep)
D=diag(diag(A));
L=-tril(A,-1); 
U=-triu(A,1);
B=(D-L)\U;
f=(D-L)\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep
  x0=y;
  y=B*x0+f;
  n=n+1;
end

A=[4,-2,-1;-2,4,3;-1,-3,3];
b=[1,5,0]';
[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)
x =
    0.9706
    0.8529
    1.1765

n =
    35

[x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)
x =
    0.9706
    0.8529
    1.1765
n =
    16

A=[1,2,-2;1,1,1;2,2,1];
b=[9;7;6];
[x,n]=jacobi(A,b,[0;0;0],1.0e-6)
x =
   -27
    26
     8
n =
     4

[x,n]=gauseidel(A,b,[0;0;0],1.0e-6)
x =
   NaN
   NaN
   NaN
n =
        1012

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值