Matlab数值计算

19 篇文章 8 订阅

统计函数

sum(A)求和
如果A是向量,sum(A)计算每个元素之和
如果A是矩阵,sum(A)计算每列元素之和,(即把每列看成一个向量,然会返回一个行向量,结果为每列元素之和)
如果A是多维数组,sum(A,dim)把指定的维度对应位置求和,即dim=1时对列求和,dim=2时对列求和,以次类推
B = sum(..., 'double')和B = sum(..., dim,'double')这个用于指定计算精度,强制使返回类型为双精度
B = sum(..., 'native')和B = sum(..., dim,'native')这个用于指定计算精度,强制使返回类型精度与右边一致
上面如果不指定精度'double'或者'natvie',如果A是整数类型,默认返回双精度,如果A是单精度类型或者双精度类型,默认返回单精度或者双精度

例 1+2+...+100

clear
clc
A=1:100;
sum(A)
结果

ans =

        5050

clear
clc
A=magic(3)
sum(A)
sum(sum(A))
结果

A =

     8     1     6
     3     5     7
     4     9     2


ans =

    15    15    15


ans =

    45


clear
clc
A=magic(4)
sum(A,1)
sum(A,2)
结果
A =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1


ans =

    34    34    34    34


ans =

    34
    34
    34
    34
例 多维向量

clear
clc
A(:,:,1)=[1 0 2 5;4 1 8 7;3 2 6 3];
A(:,:,2)=[3 5 4 1;2 6 2 1;4 2 3 0];
A
sum(A,1)
sum(A,2)
sum(A,3)
结果

A(:,:,2) =

     3     5     4     1
     2     6     2     1
     4     2     3     0


ans(:,:,1) =

     8     3    16    15


ans(:,:,2) =

     9    13     9     2


ans(:,:,1) =

     8
    20
    14


ans(:,:,2) =

    13
    11
     9


ans =

     4     5     6     6
     6     7    10     8
     7     4     9     3
例 精度

clear
clc
A=int8(1:20)
B=sum(A) %A是整数类型,不指定精度时,默认返回双精度,结果正确
C=sum(A,'native') %因为A是8位整数类型,精度设置为native,所以结果精度为int8(8位整数类型),int8的整数范围为-128~127,超过范围则截断,所以结果为127
class(B) %查看B的数据类型
class(C) %查看C的数据类型
结果
A =

  Columns 1 through 16

    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16

  Columns 17 through 20

   17   18   19   20


B =

   210


C =

  127


ans =

double


ans =

int8
mean(A) 求平均值,参数与sum 差不多,但是mean不能指定精度
如果A是向量,mean(A)计算A所有元素的平均值
如果A是矩阵,mean(A)计算每列元素的平均值,(即把每列看成一个向量,然会返回一个行向量,结果为每列元素的平均值)

如果A是多维数组,sum(A,dim)把指定的维度对应位置求的平均值,即dim=1时对列求的平均值,dim=2时对列求的平均值,以次类推

clear
clc
%对向量求平均
A=1:100;
mean(A)
%对矩阵求平均
B=magic(4)
mean(B)
%对多维向量求平均
C(:,:,1)=[3 5 8 6;3 7 9 4;3 4 12 14];
C(:,:,2)=[2 7 4 3;6 3 10 4;10 7 9 4];
C
mean(C,1)
mean(C,2)
mean(C,3)
结果

ans =

    8.5000    8.5000    8.5000    8.5000


C(:,:,1) =

     3     5     8     6
     3     7     9     4
     3     4    12    14


C(:,:,2) =

     2     7     4     3
     6     3    10     4
    10     7     9     4


ans(:,:,1) =

    3.0000    5.3333    9.6667    8.0000


ans(:,:,2) =

    6.0000    5.6667    7.6667    3.6667


ans(:,:,1) =

    5.5000
    5.7500
    8.2500


ans(:,:,2) =

    4.0000
    5.7500
    7.5000


ans =

    2.5000    6.0000    6.0000    4.5000
    4.5000    5.0000    9.5000    4.0000
    6.5000    5.5000   10.5000    9.0000

median 求中位数 min 求最小值 max 求最大值
prod 连乘积 sort 排序
这几个使用的参数和方法基本与mean求平均数一致
sort默认按升序排列,不过它也可以通过参数指定按升序还是降序排列
sort(X,DIM,MODE),DIM不指定默认是1,MODE取值为'ascend'时,按升序排列(默认),MODE取值为'descend'时,按降序排列

clear
clc
A=[11 6 9 1 1 8 12 14 2 9];
sort(A,'ascend')
sort(A,'descend')
结果

ans =

     1     1     2     6     8     9     9    11    12    14


ans =

    14    12    11     9     9     8     6     2     1     1
降序的另一种做法是 逆序输出

clear
clc
A=[11 6 9 1 1 8 12 14 2 9];
B=sort(A)
C=B(end:-1:1)
结果

B =

     1     1     2     6     8     9     9    11    12    14


C =

    14    12    11     9     9     8     6     2     1     1

离差和相关
var(X) 求X的方差
std(X) 求X的标准差
range(X) 求X的极差
cov(X) 求X的协方差阵
cov(X,Y) 求X、Y两个矩阵的协方差
corrcoef(X) 求X的自相关阵
corrcoef(X,Y) 求X、Y的互相关系数,结果为方阵

corr2(X,Y) 求X、Y的相关系数

clear
clc
A=randn(5,5) %生成5×5的标准正态分布(均值为0,方差为1)的随机数矩阵
B=var(A) %求A的方差
B2=var(A(:)) %求A所有数的方差
C=std(A) %求A的标准差
C2=std(A(:)) %求A所有数的标准差
D=range(A) %求A的极差
E=cov(A) %求A的协方差阵
F=corrcoef(A) %求A的自相关阵
结果

A =

    1.6035   -0.1559   -1.2507    0.0125    0.9337
    1.2347    0.2761   -0.9480   -3.0292    0.3503
   -0.2296   -0.2612   -0.7411   -0.4570   -0.0290
   -1.5062    0.4434   -0.5078    1.2424    0.1825
   -0.4446    0.3919   -0.3206   -1.0667   -1.5651


B =

    1.6320    0.1056    0.1332    2.4728    0.8687


B2 =

    1.0286


C =

    1.2775    0.3250    0.3650    1.5725    0.9320


C2 =

    1.0142


D =

    3.1096    0.7046    0.9301    4.2716    2.4988


E =

    1.6320   -0.1957   -0.4006   -1.1446    0.5936
   -0.1957    0.1056    0.0748   -0.0320   -0.1390
   -0.4006    0.0748    0.1332    0.1051   -0.2914
   -1.1446   -0.0320    0.1051    2.4728    0.1939
    0.5936   -0.1390   -0.2914    0.1939    0.8687


F =

    1.0000   -0.4713   -0.8592   -0.5698    0.4985
   -0.4713    1.0000    0.6307   -0.0626   -0.4589
   -0.8592    0.6307    1.0000    0.1830   -0.8564
   -0.5698   -0.0626    0.1830    1.0000    0.1323
    0.4985   -0.4589   -0.8564    0.1323    1.0000

多项式计算

定义多项式
P=[a1 a2 ... an an+1]
Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X + P(N+1)

Y = a1*X^N + a2*X^(N-1) + ... + an*X + an+1

poly 求特征多项式
poly(A) 当A是一个N*N矩阵式,poly(A)命令求出A的特征多项式,det(lambda*eye(size(A))-A)
poly(V) 当V是向量时,命令poly(V)生成以V为根的多项式

root 求多项式的根
root(p)


clear
clc
A=[1 2 3;4 5 6;7 8 0];
p=poly(A) %求特征多项式|λE-A|
r=roots(p) %根据上面的特征多项式,求特征值
结果

p =

    1.0000   -6.0000  -72.0000  -27.0000


r =

   12.1229
   -5.7345
   -0.3884
手算过程


clear
clc
A=[1 2 3];
p=poly(A)
结果

p =

     1    -6    11    -6
手算过程


帮助文档所给的求特征多项式|λE-A|的算法

n = length(A)
z = eig(A); %求矩阵A的全部特征值,构成向量z
c = zeros(n+1,1); c(1) = 1;
for j = 1:n
    c(2:j+1) = c(2:j+1)-z(j)*c(1:j);
end

polyval 多项式求值

polyval(P,X) P为多项式,X可为向量或矩阵,为向量时,结果为向量,为m×n矩阵时,对每一个元素求值,结果仍然为m×n矩阵
例 p(x) = 3x^2+2x+1 at x = 5,7, and 9:

clear
clc 
p=[3 2 1];
polyval(p,[5 7 9])
结果

ans =

    86   162   262
例 p(x) = 4x^2+4x+1 at x = [2 3 4;5 6 7]:

clear
clc
p=[4 4 1];
polyval(p,[2 3 4;5 6 7])
结果

ans =

    25    49    81
   121   169   225
conv 多项式乘法
conv(P1,P2) 多项式P1和多项式P2相乘
deconv 多项式除法
[Q,R]=deconv(P1,P2) 多项式P1和多项式P2相除,Q为商,R为余数
polyder 多项式求导
polyder(P) 多项式P的导函数
polyder(P1,P2) 多项式P1和多项式P2相乘后求导,相当于polyder(conv(P1,P2))
[Q,D]=polyder(P1,P2) 多项式分式P1/P2(即P1为分子,P2为分母)求导,结果仍为分式Q/D(即Q为分子,D为分母)

例 u=x^3+2x^2+3x+4,v=10x^2+20x+30,求c=u*v,c/u

clear
clc
u=[1 2 3 4];
v=[10 20 30];
c=conv(u,v)
[q,r]=deconv(c,u)
结果

c =

    10    40   100   160   170   120


q =

    10    20    30


r =

     0     0     0     0     0     0

例 a=3x^2+6x+9,b=x^2+2x,求a*b的导数

clear
clc
a=[3 6 9];
b=[1 2 0];
k=polyder(a,b)
结果

k =

    12    36    42    18


函数极值与零点

fminbnd 求极值
X =  fminbnd(FUN,x1,x2) 对函数值FUN求极小值,x1,x2表示区间, x1 < X < x2
如果要求极大值可以先取导数

clear
clc
X1 = fminbnd(@cos,3,4)
X2 = fminbnd(@(x) sin(x)+3,2,5)
f = @(x,c) (x-c).^2;
c = 1.5;
X3 = fminbnd(@(x) f(x,c),0,1)
结果

X1 =

    3.1416


X2 =

    4.7124


X3 =

    0.9999

fzero 求零点
X = fzero(FUN,X0) 求函数FUN的零点,X0为初值,FUN函数可以使用@

clear
clc
X1 = fzero(@sin,3)                % 函数为sin x,初值为3
X2 = fzero(@(x) sin(3*x),2)       % 函数为sin 3x,初值为2
f = @(x,c) cos(c.*x);             % 定义带参数的函数
c = 2;                            % 设置参数的值
X3 = fzero(@(x) f(x,c),0.1)
X4 = fzero ('x.^3-2.^x+1',-1)     % 函数为x^3-2^x+1,初值为-1
结果

X1 =

    3.1416


X2 =

    2.0944


X3 =

    0.7854


X4 =

   -0.7368


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值