Matlab数值计算

来源:互联网 发布:日系文艺男装淘宝店铺 编辑:程序博客网 时间:2024/05/16 15:19

统计函数

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

clearclcA=1:100;sum(A)
结果

ans =        5050

clearclcA=magic(3)sum(A)sum(sum(A))
结果

A =     8     1     6     3     5     7     4     9     2ans =    15    15    15ans =    45


clearclcA=magic(4)sum(A,1)sum(A,2)
结果
A =    16     2     3    13     5    11    10     8     9     7     6    12     4    14    15     1ans =    34    34    34    34ans =    34    34    34    34
例 多维向量

clearclcA(:,:,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];Asum(A,1)sum(A,2)sum(A,3)
结果

A(:,:,2) =     3     5     4     1     2     6     2     1     4     2     3     0ans(:,:,1) =     8     3    16    15ans(:,:,2) =     9    13     9     2ans(:,:,1) =     8    20    14ans(:,:,2) =    13    11     9ans =     4     5     6     6     6     7    10     8     7     4     9     3
例 精度

clearclcA=int8(1:20)B=sum(A) %A是整数类型,不指定精度时,默认返回双精度,结果正确C=sum(A,'native') %因为A是8位整数类型,精度设置为native,所以结果精度为int8(8位整数类型),int8的整数范围为-128~127,超过范围则截断,所以结果为127class(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   20B =   210C =  127ans =doubleans =int8
mean(A) 求平均值,参数与sum 差不多,但是mean不能指定精度
如果A是向量,mean(A)计算A所有元素的平均值
如果A是矩阵,mean(A)计算每列元素的平均值,(即把每列看成一个向量,然会返回一个行向量,结果为每列元素的平均值)

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

clearclc%对向量求平均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];Cmean(C,1)mean(C,2)mean(C,3)
结果

ans =    8.5000    8.5000    8.5000    8.5000C(:,:,1) =     3     5     8     6     3     7     9     4     3     4    12    14C(:,:,2) =     2     7     4     3     6     3    10     4    10     7     9     4ans(:,:,1) =    3.0000    5.3333    9.6667    8.0000ans(:,:,2) =    6.0000    5.6667    7.6667    3.6667ans(:,:,1) =    5.5000    5.7500    8.2500ans(:,:,2) =    4.0000    5.7500    7.5000ans =    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'时,按降序排列

clearclcA=[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    14ans =    14    12    11     9     9     8     6     2     1     1
降序的另一种做法是 逆序输出

clearclcA=[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    14C =    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的相关系数

clearclcA=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.5651B =    1.6320    0.1056    0.1332    2.4728    0.8687B2 =    1.0286C =    1.2775    0.3250    0.3650    1.5725    0.9320C2 =    1.0142D =    3.1096    0.7046    0.9301    4.2716    2.4988E =    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.8687F =    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)


clearclcA=[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.0000r =   12.1229   -5.7345   -0.3884
手算过程


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

p =     1    -6    11    -6
手算过程


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

n = length(A)z = eig(A); %求矩阵A的全部特征值,构成向量zc = 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:

clearclc 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]:

clearclcp=[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

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

c =    10    40   100   160   170   120q =    10    20    30r =     0     0     0     0     0     0

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

clearclca=[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
如果要求极大值可以先取导数

clearclcX1 = 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.1416X2 =    4.7124X3 =    0.9999

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

clearclcX1 = fzero(@sin,3)                % 函数为sin x,初值为3X2 = fzero(@(x) sin(3*x),2)       % 函数为sin 3x,初值为2f = @(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.1416X2 =    2.0944X3 =    0.7854X4 =   -0.7368


0 0
原创粉丝点击