资源描述
Matlab-2013a教程P121
目录
创建一维数组变量P11
创建数组变量的一般方法P12
创建二维数组变量P12
一、逻辑运算"&&"与"&","||"与"|"的区别P2
二、norm命令P2
三、mean(A),求每一列的均值;Mean(A,2)求每一行的均值
四、std命令,求均值和标准偏差
五、corrcoef,求协方差,原矩阵为,求出的矩阵维数为,P3,单步计算与matlab计算,存在差异,还没明白
一、"&&"与"&","||"与"|"的区别
A&B
(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。
(2)A和B可以为矩阵(e.g. A=[1 0],B=[0 0])。
A&&B
(1)首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
(2)A和B不能是矩阵,只能是标量。
"|"与“||”同理。
二、norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数
1、如果A为矩阵
n=norm(A)
返回A的最大奇异值,即max(svd(A))
n=norm(A,p)
根据p的不同,返回不同的值
p
返回值
1
返回A中最大一列和,即max(sum(abs(A)))
2
返回A的最大奇异值,和n=norm(A)用法一样
inf
返回A中最大一行和,即max(sum(abs(A’)))
‘fro’
A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A'*A)))
3、如果A为向量
norm(A,p)
返回向量A的p范数,即返回 sum(abs(A).^p)^(1/p),对任意 1
三、mean命令
mean(A),求每一列的均值;mean(A,2)求每一行的均值
A=[1,2,3;3,3,6;4,6,8;4,7,7]
mean(A)
ans =
3 4.5 6
K>> mean(A,2)
ans =
2
4
6
6
四、std(A),求标准偏差
x可以是一行的matrix或者一个多行matrix矩阵如果只有一行,那么就是算一行的标准偏差,如果有多行,就是算每一列的标准偏差。
A=[1,2,3;3,3,6;4,6,8;4,7,7];
std(A)
ans =
1.4142 2.3805 2.1602
计算过程:
每列平均值:=(1+3+4+4)/4=3;=(2+3+6+7)/4=4.5;=(3+6+8+7)/4=6
第一列标准偏差:=1.4142
五、corrcoef,求协方差,原矩阵为,求出的协方差矩阵维数为,单步计算与matlab计算,存在差异,还没明白
命令原理:协方差(i,j)=(第i列所有元素-第i列均值)*(第j列所有元素-第j列均值)/(样本数-1)。样本数即为每列元素
(1)A=[1,3,4,5;2,6,2,2] %2x4矩阵
A =
1 3 4 5
2 6 2 2
corrcoef(A)
ans =;求出的协方差矩阵维数为4x4
1 1 -1 -1
1 1 -1 -1
-1 -1 1 1
-1 -1 1 1
计算过程:
A =
1 3 4 5
2 6 2 2
列平均数 1.5 4.5 3 3.5;样本数即为每列元素=n-1=2-1=1
E(1,1)=(第1列所有元素-第1列均值)*(第1列所有元素-第1列均值)/(样本数-1)
=(1-1.5,2-1.5)*(1-1.5,2-1.5)T/(2-1)=0.5
E(1,2)=(第1列所有元素-第1列均值)*(第2列所有元素-第2列均值)/(样本数-1)
=(1-1.5,2-1.5)*(3-4.5,6-4.5)T/(2-1)=1.5
E(1,3)=(第1列所有元素-第1列均值)*(第3列所有元素-第3列均值)/(样本数-1)
=(1-1.5,2-1.5)*(4-3,2-3)T/(2-1)=-1
E(1,4)=(第1列所有元素-第1列均值)*(第4列所有元素-第4列均值)/(样本数-1)
=(1-1.5,2-1.5)*(5-3.5,2-3.5)T/(2-1)=-1.5
E(2,1)=(第2列所有元素-第2列均值)*(第1列所有元素-第1列均值)/(样本数-1)
=(3-4.5,6-4.5)*(1-1.5,2-1.5)T/(2-1)=1.5
E(2,2)=(第2列所有元素-第2列均值)*(第2列所有元素-第2列均值)/(样本数-1)
=(3-4.5,6-4.5)*(3-4.5,6-4.5)T/(2-1)=6.125
(2)A=[1,3,4,5;2,6,2,2]’%注意与上面矩阵差别,是转置矩阵,4x2矩阵
A =
1 2
3 6
4 2
5 2
K>> corrcoef(A)
ans =;求出的协方差矩阵维数为2x2
1 -0.09759
-0.09759 1
计算过程:
A =
1 2
3 6
4 2
5 2
列平均数 3.25 3 ;样本数即为每列元素=n-1=4-1=3
E(1,1)=(第1列所有元素-第1列均值)*(第1列所有元素-第1列均值)/(样本数-1)
=(1-3.25,3-3.25,4-3.25,5-3.25)*(1-3.25,3-3.25,4-3.25,5-3.25)T/(4-1)=25.52
E(1,2)=(第1列所有元素-第1列均值)*(第2列所有元素-第1列均值)/(样本数-1)
=(1-3.25,3-3.25,4-3.25,5-3.25)*(2-3,6-3,2-3,2-3)T/(4-1)=1.83
E(2,1)=(第2列所有元素-第2列均值)*(第1列所有元素-第1列均值)/(样本数-1)
=(2-3,6-3,2-3,2-3)*(1-3.25,3-3.25,4-3.25,5-3.25)T/(4-1)=1.83
E(2,2)=(第2列所有元素-第2列均值)*(第2列所有元素-第2列均值)/(样本数-1)
=(2-3,6-3,2-3,2-3)*(2-3,6-3,2-3,2-3)T/(4-1)=4
例:计算sin(450)
>>sin(45*pi/180)
ans=
0.7071
Matlab中正弦函数sin是常见的函数
它的参数值是以“弧度”为单位的
pi是Matlab的预定义变量,pi=3.14159….
例:计算
>>sqrt(2*exp(4.92+0.5)+1)
ans=
21.2781
Matlab中开平方sqrt(x),是英文square root
Matlab中指数函数是常见的表达方式。
例:计算y=
>>y=2*sin(0.3*pi)/(1+sqrt(5))
y=
0.5000
例:计算y=
>>y=2*cos(0.3*pi)/(1+sqrt(5))
y=
0.3633
计算半径为5.2m的圆的周长和面积
>>radius=5.2;
>>area=pi*5.2^2,circle_len=2*pi*5.2
area=
84.9487
circle_len=
32.6726
以上两例,命令行中用到了等号“=”。计算结果不再是赋值给“ans”,而是赋给用户指定的变量y,area,circle_len。
无论是预定义变量还是用户自定义变量,都被存储在系统的工作空间内(Workspace),即系统定义的一个存储窗口变量的内存空间。
区别(有无;号):radius=5.2;x=5;和radius=5.2;x=5区别
radius=5.2;x=5;两语句,在命令窗口没有显示
radius=5.2;x=5前一语句在命令窗口无显示,后一语句在命令窗口有显示
x=
5
Who、Whos命令用来显示工作空间的变量。
clear命令用来清除工作空间的变量。(clc命令清除命令窗口)
>>who %显示工作空间命令
Your variables are:
area circle_len radius
>>whos %显示工作空间命令
Name Size Bytes Class Attributes
area 1x1 8 double
circle_len 1x1 8 double
radius 1x1 8 double
>>clear area %清除工作空间area变量
Your variables are:
circle_len radius
>>whos
Name Size Bytes Class Attributes
circle_len 1x1 8 double
radius 1x1 8 double
数值显示格式设置
窗口命令及语法格式:format 显示格式关键字
如:format %15位数字显示,没有使用过
long
常见通用命令
clc:清除命令窗口的显示内容
clear:清除Matlab工作空间中保存的变量
who或whos:显示Matlab工作空间中变量信息
dir:显示当前工作目录的文件和子目录清单
cd:显示或设置当前工作目录
type:显示指定m文件的内容
help或doc:获取在线帮助
quit或exit:关闭/退出Matlab
历史窗口:
首先记录每次启动时间
并记录在命令窗口输入命令,在此运行期间,输入的所有命令被记录为一组,并以此次启动时间为标志。
使用历史窗口:
可以查看命令窗口输入过的命令或语句
可以选择一条或多条命令执行拷贝、执行、创建m文件等。
要清楚历史记录,可以选择exit菜单中的clear command history命令。
当前目录窗口:指Matlab运行时的工作目录
只有在当前目录和搜索路径下的文件、函数才可以被运行和调用。
如果没有特殊指明,数据文件也将存放在当前目录下;
用户可以将自己的工作目录设置成当前目录,从而使得所有操作都在当前目录中进行。
Lookfor(条件比较宽松)例:inverse;没有使用过
窗口式综合帮助信息(文字、公式、图形)
doc
helpwin
求方程2x5-3x3+71x2-9x+13=0的全部根
p=[2,0,-3,71,-9,13];%注意p的大小写,如此语句为大写,后语句为小写,就不识别
x=roots(p);
x=
-3.4914 + 0.0000i
1.6863 + 2.6947i
1.6863 - 2.6947i
0.0594 + 0.4251i
0.0594 - 0.4251i
求解线性方程组:
a=[2,3,-1;8,2,3;45,3,9];
b=[2;4;23];
x=inv(a)*b
x =
0.5531
0.2051
-0.2784
inv是矩阵求逆的意思。具体用法A=inv(B),其中B是输入的可逆矩阵,输出A就是B的逆矩阵,逆矩阵满足性质AB=BA=E(E是单位阵)。如果输入的是不可逆矩阵会弹出警告,并返回inf。
符号计算
syms x y z
[x,y,z]=solve(2*x+3*y-z-2,8*x+2*y+3*z-4,45*x+3*y+9*z-23)
syms是定义符号变量,sym是将字符或者数字转换为字符
比如
syms x y %就是定了符号变量x y以后x y就可以直接使用了,有他们运算出来的结果也是符号变量
当然上面的也可以x=sym('x'),y=sym('y')
syms('a+b') %就是将a+b转化为符号表达式,此语句使用有问题,没通过
两者有不同的使用场合
比如符号变量涉及的个数比较少,但是使用频率比较高,那么就是使用syms
但是如果个数多,但是使用频率比较少 则使用sym
solve函数,求解代数方程,符号解析解,只是部分的结果,并不是全部解
求解
quad(‘x.*log(1+x)’,0,1)%此语句没有通过,在Matlab中修改符号’’后,通过了
或
syms x
nt(‘x.*log(1+x)’,0,1) %此语句没有通过
多项式曲线拟合
x=[1,2,3,4,5,6,7,8,9,10]
y=[1.2,3,4,4,5,4.7,5,5.2,6,7.2],y是由y(x)=x3-2x2-5在对应x点产生的值
注:y(x)=x3-2x2-5 在matlab中,y=[1 -2 0 -5]
p1=polyfit(x,y,1)
p3=polyfit(x,y,3)
x2=1:0.1:10;
y1=polyval(p1,x2) );%计算拟合函数在x处的值
y3=polyval(p3,x2)
plot(x,y,’*’,x2,y1,’:’,x2,y3)%此语句有问题,是符号’要在matlab中重写,如下
plot(x,y,'*',x2,y1,':',x2,y3)
用程序测试拟合多少次
syms c;
x=[1,2,3,4,5,6,7,8,9,10];
y=[1.2,3,4,4,5,4.7,5,5.2,6,7.2];
p1=polyfit(x,y,1);
p3=polyfit(x,y,3);
x2=1:0.1:10;
y1=polyval(p1,x2) ;%计算拟合函数在x处的值
y3=polyval(p3,x2);
%plot(x,y,'*',x2,y1,':',x2,y3)
for i=1:5
y2=polyfit(x,y,i);
Y=polyval(y2,x);%计算拟合函数在x处的值
if sum((Y-y).^2)<0.4
c=i
break;
end
end
输出结果c=3,即拟合3次可以使sum((Y-y).^2)<0.4
3)矩阵运算函数
MATLAB的运算以数组(array)及矩阵(matrix)方式来进行,但二者运算性质明显不同,数组强调元素对元素的运算,所以在运算符前要加.,而矩阵则采用线性代数的运算方式。请看下表:
Matlab中把复数的表达:z=a+bi,其中a,b为实数
Matlab把复数看作一个整体,象计算实数一样计算复数
例:复数z1=3+4i,z2=1+2i,z3=2
计算
>> z1=3+4*i,z2=1+2*i,z3=2*exp(i*pi/6),z=z1*z2/z3
z1 =
3.0000 + 4.0000i
z2 =
1.0000 + 2.0000i
z3 =
1.7321 + 1.0000i
z =
0.3349 + 5.5801i
>>z_real=real(z),z_image=imag(z),%注意是imag而不是image
z_real =
0.3349
z_image =
5.5801
>>z_angle=angle(z),z_length=abs(z),%对于复数,abs函数是求模
z_angle =
1.5108
z_length =
5.5902
第二章 Matlab数据及运算
Matlab数据类型丰富,除数值型、字符型等基本数据类型外,还有结构体、单元等更为复杂的数据类型。
各种数据类型都以矩阵形式存在,矩阵是Matlab最基本的数据对象,并且矩阵的运算是定义在复数域上的。
数组的概念
一维数组变量的创建
二维数组变量的创建
数组元素的标识与寻访
数组运算
多维数组
数组(array)的概念
数组的分类
一维数组,也称为向量(vector)
行向量(row vector)、列向量(column vector)
二维数组(矩阵matrix)
创建一维数组变量
第一种方法:使用方括号“[]”操作符
例:创建数组(行向量)a=[1 3 pi 3+5i]
>> a=[1 3 pi 3+5i]%or a=[1,3,pi,3+5i]
a =
1.0000 + 0.0000i 3.0000 + 0.0000i 3.1416 + 0.0000i 3.0000 + 5.0000i
所有的向量元素必须在操作符“[]”之内
向量元素间用空格或英文的逗号“,”分开
第二种方法:使用冒号“:”操作符
>>b=1:10
b =
1 2 3 4 5 6 7 8 9 10
例:键入并执行c=1:2:10和d=1:2:9
>> c=1:2:10(间隔是2)
c =
1 3 5 7 9
>> d=1:2:9
c =
1 3 5 7 9
利用冒号“:“操作符创建行向量的基本语法格式:
x=起:增量:止
起表示新向量x的第一个元素
新向量x的最后一个元素不能大于止
增量可正可负,若负,则起>止;若正,则起<止,否则创建的为空向量。
若增量=1,则可简写为x=起:止
第三种方法:利用函数linspace
函数linspace的基本语法
x=linspace(x1,x2,n)
该函数生成一个由n个元素组成的行向量;
x1为其第一个元素
x2为其最后一个元素
x1、x2之间的间隔=(x2-x1)/(n-1)
如忽略参数n,则系统生成100个元素的行向量
例:执行x=linspace(1,2,5)
>> x=linspace(1,2,5)
x =
1.0000 1.2500 1.5000 1.7500 2.0000
第四种方法:利用函数logspace
列向量的创建
使用方括号“[]”操作符,并使用分号“;”分割行。
例:执行x=[1;2;3]
>> x=[1;2;3]
x =
1
2
3
使用冒号“:”操作符
例:执行x=(1:3)’ %“’”表示矩阵的转置
>> x=(1:3) %注意区别
x =
1 2 3
>> x=(1:3)' %注意区别
x =
1
2
3
创建数组变量的一般方法
创建变量的赋值语句的一般格式
var=expression
var为变量名
expression为matlab的合法表达式
可以是单独的常数值或数值数组
也可以由常数值、其它变量(部分或全部)、数值数组和运算符(+、-)构成。
例:执行a=[1 1+6];b=[a 6 7];c=[6 a 7];d=[6 a 7 a];
a =
1 7
b =
1 7 6 7
c =
6 1 7 7
d =
6 1 7 7 1 7
创建二维数组变量
第一种方法:使用方括号“[]”操作符
使用规则
数组元素必须在“[]”内键入;
行与行之间须用分号“:”间隔,也可以在分行处用回车键间隔;
行内元素用空格或逗号“,”间隔。
例:执行a2=[1 2 3;4 5 6;7 8 9]
a2 =
1 2 3
4 5 6
7 8 9
a2=[1:3;4:6;7:9]
a2 =
1 2 3
4 5 6
7 8 9
例:由向量构成二维数组
>>a=[1 2 3];b=[2 3 4];
>>c=[a;b];%形成2x3矩阵
c =
1 2 3
2 3 4
>>c1=[a b];%形成1x6的矩阵
c1 =
1 2 3 2 3 4
第二种方法:函数方法
函数ones(生成全1矩阵)、zeros(生成全0矩阵)、reshape
例:创建全1的3x3数组
>>ones(3)
例:创建全1的3x4数组
>>ones(3,4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
例:reshape的使用
>>a=-4:4
a =
-4 -3 -2 -1 0 1 2 3 4
>>b=reshape(a,3,3)
b =
-4 -1 2
-3 0 3
-2 1 4
数组元素的排列顺序,从上到下按列排列
要求数组的元素总数不变。
数组元素的标识与寻访
数组元素的标识
全下标
单下标
例:size、length函数
size函数返回变量的大小,即变量数组的行列数
length函数返回变量数组的最大维数
>>a=ones(4,6)*6
>>m=size(a)
m =
4 6,返回行列数为4、6
>>length(a)
ans =
6
>>b=1:5
>>length(b)
>>c=b’
c =
1
2
3
4
5
>>length(c)
ans =
5
6.3 数组积分
一元函数的数组积分常用指令:quad和quadl;一般来说,quadl比quad更有效。
上面未完
求定积分
MATLAB指令quda和quadl求积分
>>fun=inline(‘exp(-x.*x)’,’x’);%数组乘符号.*的采用是必须的
>>Isim=quad(fun,0,1),I8=quadl(fun,0,1)
Isim=0.7468
I8=0.7468
求解定积分
用quad指令求积分
>>ff=inline(‘sqrt(log(1./x))’,’x’)
>>Isim=quad(ff,0,1)
Isim=0.8862
111 / 111
展开阅读全文