Matlab6.5使用
第1章 Matlab6.5使用方法
1.Matlab6.5简介
1.1 21世纪的科学计算语言
☺功能强大
数值计算、符号运算、图形可视化
☺语言简单
☺扩充能力强、可开发性好
☺编程容易、效率高
1.2 Matlab6.5的新特点
☺开发环境
☺数值处理
☺程序及数据结构
☺图形处理
☺用户图形界面
☺应用程序接口
1.3 Matlab网上资源
http://www.mathsworks.com
ftp.mathworks.com
……
2.Matlab6.5桌面平台
☺Matlab主窗口
☺命令窗口
☺历史窗口
☺当前目录窗口
☺发明说明书窗口
☺工作间管理窗口
3.Matlab6.5帮助系统
☺联机帮助系统
选中Help下拉菜单的前四项中任何一项;
在命令窗口中执行Helpwin、helpdesk、doc;
直接按主窗口的?按钮.
☺命令窗口查询帮助
help系列----help、help+函数(类)名、helpwin、helpdesk;
lookfor函数;
其他帮助命令
exist—变量检验函数;
what---目录中文件列表;
who---内存变量列表;
whos---内存变量详细信息;
which---确定文件位置。
☺联机演示系统
1.基本介绍窗口
>> intro
2.演示界面
help--demos
>>demo
☺常用命令和技巧
1.一些通用命令
cd 显示或改变工作目录
dir, ls 显示目录文件
type 显示文件内容
clear 清理内存变量
clf 清除图形窗口
pack 收集内存碎片、扩大内存空间
clc 清除工作窗
echo 工作窗信息显示开关
hold 图形保持开关
disp 显示变量或文字内容
path 显示搜索目录
save 保存内存变量到指定文件
load 加载指定文件的变量
diary 日志文件命令
quit 退出Matlab
! 调用dos命令
2. 标点
: 多种应用功能
; 区分行,取消行显示等
, 区分列,函数参数分隔符等
() 指定运算过程中的先后次序等
[] 矩阵定义的标志
{} 用于构成单元数组等
. 小数点及域访问等
… 续行符
% 注释标记
= 赋值标记
’ 字符串的标志符等
Help 程序(主题)名
>> help sinh
SINH Hyperbolic sine.
SINH(X) is the hyperbolic sine of the elements of X.
Overloaded methods
help sym/sinh.m
>>lookfor complex
……
显示
>>who %显示当前工作区中的所有变量名
>>whos %显示当前工作区中的所有变量%名,变量的大小,字节数和类型。
>>disp(x) %显示x的内容,矩阵或字符串
清除
>>clear (变量名)
存储
>>save (文件名)
调出
>> load (文件名)
>> save
Saving to: matlab.mat
>> load
Loading from: matlab.mat
>> save temp
-将当前系统中的所有变量存入temp.mat;
>> save temp x
-仅存入x变量到temp.mat;
>> save temp x y z
-仅存入x y z变量到temp.mat;
>> load temp
-重新从temp.mat中提出变量。
搜索
>>path %显示目前的搜索路径,可以用File菜单中的Set Path观察和修改路径
管理
what 返回目前目录下的M,MAT,MEX文件列表
dir、 ls 列出目前目录下的所有文件
cd path 改变目前目录为path
pwd、 cd、 chdir 显示目前的工作目录
退出
>>quit
第2章 数值计算功能
2.1 Matlab的数据类型
1. 变量与表达式
Matlab命令的通常形式
变量=表达式
>> A=[1,3.0,5.6,sin(2.)]
A =
1.0000 3.0000 5.6000 0.9093
>> a=[1 3.0 5.6 sin(2.)]
a =
1.0000 3.0000 5.6000 0.9093
>> sin(pi/2)/3
ans =
0. 3333
>> whos
Name Size Bytes Class
A 1x4 32 double array
a 1x4 32 double array
ans 1x1 8 double array
Grand total is 9 elements using 70 bytes
2.预定义变量----常量
系统的特殊常量
特殊变量 取值
pi
eps 计算机的最小正数
flops 浮点运算次数
i,j i=j=
Inf 无穷大
NaN 不定量
Realmin 最小的正浮点数 2^(-1022)
Realmax 最大的浮点数 2^(1023)
>> z1=3+4i
z1 =
3.0000 + 4.0000i
>> z1=3+4j
z1 =
3.0000 + 4.0000i
3.显示格式
计算以双精度计算;
数值的有效范围为10e-308~10e308;
显示可以不同的显示格式显示;
缺省情况为短格式(short)显示—若数据为整数,则以整型表示;若为实数,则保留小数点后4位的浮点数表示。
>> x=[3.0 2]
x =
3 2
>> x=[4/3 1.2345e-6]
x =
1.3333 0.0000
>> format long
>> x=[4/3 1.2345e-6]
x =
1.33333333333333 0.00000123450000
>> format short e
>> x=[4/3 1.2345e-6]
x =
1. 3333e+000 1.2345e-006
>> format +
>> x=[4/3 1.2345e-6]
x =
++
short
long
hex
bank
+
short e
long e
short e
short g
long g
rational
4. 字符串
--所有字符串用单引号设定后输入或赋值
>> s='matrix laboratory'
s =
matrix laboratory
--字符串的每个字符(包括空格)均为字符数组的一个元素
>>size(s) %size命令查看字符数组的维数
ans =
1 17
--字符串和字符数组(或矩阵)基本上等价
>> s(3)
ans =
t
>> s2=['matlab']
s2 =
matlab
--字符数组的生成
>> s3=char('s','y','m','b','o','l','i','c');
>> s3'
ans =
symbolic
--字符串和数组之间的转换
A. 字符串转换为数值代码
>> double(s3)'
ans =
115 121 109 98 111 108 105 99
B. 字符数组转换为字符串
>> cellstr(s3)'
ans =
's' 'y' 'm' 'b' 'o' 'l' 'i' 'c'
C. 数值数组和字符串之间的转换
-num2str 数字转换为字符串
-int2str 整数转换为字符串
-mat2str 矩阵转换为字符串
-str2num 转换字符串为数字
-sprintf 将格式数据写为字符串
-sscanf 在格式控制下读字符串
>> a=[1:5];
>> b=num2str(a);
>> a*2
ans =
2 4 6 8 10
>> b*2
ans =
Columns 1 through 11
98 64 64 100 64 64 102 64 64 104 64
Columns 12 through 13
64 106
>> str2num(b)*2
ans =
2 4 6 8 10
D. 字符串操作
-strcat 链结串
-strvcat 垂直链结串
-strcmp 比较串
-strncmp 比较串的前n个字符
-findstr 在其他串中寻找此串
-strjust 证明字符数组
-strmatch 查找可能匹配的字符串
-strrep 以其他串代替此串
-strtok 寻找串中记号
-upper 转换为大写
-lower 转换为小写
-blanks 生成空串
-deblank 移去串内空串
E. 执行字符串
--函数eval实现
n=4;
t='1/(i+j-1)';
a=zeros(n);
for i=1:n
for j=1:n
a(i,j)=eval(t);
end
end
a
a =
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
>> d='cd';
>> eval(d)
C:\MATLAB6p1\work
F. 一些基本数字转换函数
-hex2num 十六进制转换为双精度数
-hex2dec 十六进制转换为十进制整数
-dec2hex 十进制整数转换为十六进制串
-bin2dec 二进制转换为十进制整数
-dec2bin 十进制整数转换为二进制串
-base2dec 转换B底字符串为十进制整数
-dec2base 转换十进制整数为B底串
-strings strings函数的帮助
5. 矩阵
6. 单元型变量
一种以任意形式的数组为元素的多维数组
--定义
(1)赋值语句直接定义
(2)由cell函数预先分配存储空间,再对单元元素逐个赋值
>> A=[1, 2; 3, 4];
>> B={1:4, A, 'abcd'}
B =
[1x4 double] [2x2 double] 'abcd'
>> c{1,1}=1:4;
>> c{1,2}=A;
>> c{1,3}='abcd';
>> c
c =
[1x4 double] [2x2 double] 'abcd'
>> c{2}
ans =
1 2
3 4
>> c(2)
ans =
[2x2 double]
注:
1)单元型变量的元素不是以指针的方式保存。改变其元素原变量矩阵A的值不等于改变变量B的第2个元素的值。
2)单元型变量自身可以嵌套。
>> D={1:4,A,B}
D =
[1x4 double] [2x2 double] {1x3 cell}
>> D{3}{3}
ans =
abcd
>> A(1,2)=-10
A =
1 -10
3 4
>> c{2}
ans =
1 2
3 4
--单元型变量的相关函数
-cell 生成单元型变量
-cellfun 对单元型变量中元素作用的函数
-celldisp 显示单元型变量的内容
-cellplot 图形显示单元型的内容
-num2cell 数值数组转换为单元型变量
-deal 输入输出处理
-cell2struct 单元型变量转换为结构型变量
-struct2cell 结构型变量转换为单元型变量-iscell 判断是否为单元型变量
-reshape 改变单元数组的结构
>> cellfun('islogical', B)
% 其他函数isreal, isempty, length, ndims等
ans =
0 0 0
>> celldisp(B)
B{1} =
1 2 3 4
B{2} =
1 2
3 4
B{3} =
abcd
>> size(D)
ans =
1 3
>> reshape(D,3,1)
ans =
[1x4 double]
[2x2 double]
{1x3 cell }
>> size(ans)
ans =
3 1
7. 结构型变量
以指针方式传递数据,将不同数据类型组合在一起的数据类型。
--定义
(1)赋值语句直接定义,以指针操作符‘.’连接结构变量名和属性名;
(2)由struct函数定义
结构变量名=struct(元素名1, 元素值1,元素名2, 元素值2, …)
>> A.a1='abcd';
>> A.a2=1;
>> A.a3=[1,2,3,4];
>> A
A =
a1: 'abcd'
a2: 1
a3: [1 2 3 4]
>> B=[1,2;3,4];
>> A(2).a1='efgh';
>> A(2).a2=2;
>> A(2).a3=B;
>> A
A =
1x2 struct array with fields:
a1
a2
a3
>> A(1)
ans =
a1: 'abcd'
a2: 1
a3: [1 2 3 4]
>> A(2)
ans =
a1: 'efgh'
a2: 2
a3: [2x2 double]
>> C=struct('c1',1,'c2',B, 'c3','abcd')
C =
c1: 1
c2: [2x2 double]
c3: 'abcd'
>> C.c1=A
C =
c1: [1x2 struct]
c2: [2x2 double]
c3: 'abcd'
>> C.c1(1).a1
ans =
abcd
--结构型变量的相关函数
-struct 创建或转换结构变量
-findnames 得到结构型变量的属性名
-getfield 得到结构型变量的属性值
-setfield 设定结构型变量的属性值
-rmfield 删除结构型变量的属性
-isfield 判断是否为结构型变量的属性
-isstruct 判断是否为结构型变量
>> fieldnames(C)
ans =
'c1'
'c2'
'c3'
>> iscell(ans)
ans =
1
>> D=getfield(C,'c1')
D =
1x2 struct array with fields:
a1
a2
a3
>> C=setfield(C,'c1',2)
C =
c1: 2
c2: [2x2 double]
c3: 'abcd'
>> C=rmfield(C,'c1')
C =
c2: [2x2 double]
c3: 'abcd'
>> isfield(C,'c2')
ans =
1
>> isstruct(C)
ans =
1
2.2 矩阵的基本运算
I.数和算术表达式
3 –90 0.0001 9.1234 1.6021e-20
5.02252e23
数学运算符:
+ - * / (右除) \ (左除) ^
II.数学函数
基本三角函数 sin cos sec csc tan cot
反三角函数 asin acos asec acsc atan acot
双曲函数 sinh cosh sech csch tanh coth
反双曲函数 asinh acosh asech acsch atanh acoth
指数和对数 exp log Log10 sqrt
复数运算 abs angle conj real imag
数值函数 fix floor ceil round rem
整数函数 lcm gcd
>> x=5.1
x =
5.1000
>> fix(x)
ans =
5
>> floor(x)
ans =
5
>> ceil(x)
ans =
6
>> round(x)
ans =
5
>> rem(5,3)
ans =
2
>> sin(1+2i)
ans =
3.1658 + 1.9596i
III.矩阵及其元素
1.矩阵输入的基本方法
>> A=[1 2 3]
A =
1 2 3
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A=[1, 2, 3;
4,5,6;
7, 8,9]
A =
1 2 3
4 5 6
7 8 9
>> A=[1, 2, 3
4,5,6
7, 8,9]
A =
1 2 3
4 5 6
7 8 9
2.矩阵元素的存取
Matlab的矩阵元素可以为任何数值表达式。
>> x=[-1.3 sqrt(3) (1+2+3)*4/5]
x =
-1.3000 1.7321 4.8000
>> A=[1+5i 2+6i]
A =
1.0000 + 5.0000i 2.0000 + 6.0000i
>> A=[1 2; 3 4]+i*[5 6;7 8]
A =
1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i
Matlab的矩阵元素的引用:
>> x=A(1,2)
x =
2.0000 + 6.0000i
Matlab的矩阵的维数自动扩充:
>> x=[-1.3 sqrt(3) (1+2+3)*4/5]
x =
-1.3000 1.7321 4.8000
>> x(5)=abs(x(1))
x =
-1.3000 17321 4.8000 0 1.3000
>> A=[1 2;3 4]
A =
1 2
3 4
>> A(3,1)=-1
A =
1 2
3 4
-1 0
3.子矩阵的操作
大的矩阵可以通过小的矩阵扩充得到:
>> A=[A;2 1]
A =
1 2
3 4
-1 0
2 1
>> A=[A, [1 2 3 4]']
A =
1 2 1
3 4 2
-1 0 3
2 1 4
小的矩阵可以从大的矩阵抽取得到:
A(:)—A的所有元素;
A(:,J)—A的第J列所有元素;
A(J:K)—A(J),A(J+1),…,A(K);
A(:,J:K)—A(:,J),A(:,J+1),…A(:,K);
A(J,:)—A的第J行所有元素;
A(J:K,:)—A(J,:),A(J+1,:),…A(K.:);
A =
1 2 1
3 4 2
-1 0 3
2 1 4
>> y=A(1:3,:)
y =
1 2 1
3 4 2
-1 0 3
>> x=A(:,1:2)
x =
1 2
3 4
-1 0
2 1
>> z=A(1:2,2:3)
z =
2 1
4 2
4. “:”运算符的用法
用来产生相同增量的向量的方法:
>> t=1:5
t =
1 2 3 4 5
>> x=pi:-pi/3:0
x =
3.1416 2.0944 1.0472 0
>> x=(0.0:0.2:1.0)';%‘'’表示转置
>> y=sin(x); %计算函数值
>> [x y] %组合出矩阵
ans =
0 0
0.2000 0.1987
0.4000 0.3894
0.6000 0.5646
0.8000 0.7174
1.0000 0.8415
5.生成特殊矩阵的函数
>> rand(1,3)
ans =
0.9501 0.2311 0.6068
>> rand(3)
ans =
0.4860 0.4565 0.4447
0.8913 0.0185 0.6154
0.7621 0.8214 0.7919
>> eye(2,3)
ans =
1 0 0
0 1 0
>> ones(3,2)
ans =
1 1
1 1
1 1
>> randn(3,2) %标准正态分布
ans =
-0.4326 0.2877
-1.6656 -1.1465
0.1253 1.1909
IV. 矩阵操作
1.矩阵转置
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> B=A'
B =
1 4
2 5
3 6
>> C=[1+i,-i;2,1-i]
C =
1.0000 + 1.0000i 0 - 1.0000i
2.0000 1.0000 - 1.0000i
>> D=C' %转置共扼
D =
1.0000 - 1.0000i 2.0000
0 + 1.0000i 1.0000 + 1.0000i
2.对角矩阵
diag函数用来生成一个对角矩阵
或提取一个矩阵的对角元素:
>> diag(2:4)
ans =
2 0 0
0 3 0
0 0 4
>> A
A =
1 2 3
4 5 6
>> diag(A)
ans =
1
5
3.上/下三角矩阵
>> tril(A)
ans =
1 0 0
4 5 0
>> triu(A)
ans =
1 2 3
0 5 6
>> fliplr(A)
ans =
3 2 1
6 5 4
>> flipud(A)
ans =
4 5 6
1 2 3
V.矩阵运算
1.加和减
>> A
A =
1 2 3
4 5 6
>> B=[1 4 7;2 5 6]
B =
1 4 7
2 5 6
>> C=A+B
C =
2 6 10
6 10 12
>> D=A-1.0
D =
0 1 2
3 4 5
2.乘法
>> A
A =
1 2 3
4 5 6
>> A'
ans =
1 4
2 5
3 6
>> A*A'
ans =
14 32
32 77
3.矩阵除法
标量运算时:
矩阵运算时:
--inv(A)*B;
--A*inv(B);
>> A=[1 2 3]
A =
1 2 3
>> B=[1 2 -3; -2 5 6; 7 2 1]
B =
1 2 -3
-2 5 6
7 2 1
>> A/B
ans =
-0.1818 0.3636 0.2727
>> B\A'
ans =
0.2929
0.4444
0.0606
4. 矩阵乘方
>> B
B =
1 2 -3
-2 5 6
7 2 1
>> B^3
ans =
6 -6 114
258 309 150
-98 134 118
5.数组运算
----向量或矩阵间对应元素的运算:
.+ .- .* ./ .\ .^
>> x=[1 2 3]
x =
1 2 3
>> y=[4 5 6]
y =
4 5 6
>> z=x.*y
z =
4 10 18
>> z1=x.^y
z1 =
1 32 729
>> z3=x.^2
z3 =
1 4 9
>> z4=2.^x
z4 =
2 4 8
>> [1 2; 3 4]./[2 2; 2 2]
ans =
0.5000 1.0000
1.5000 2.0000
>> [1 2; 3 4].\[2 2; 2 2]
ans =
2.0000 1.0000
0.6667 0.5000
常见数值问题介绍
一、 线性方程组求解
A*x=b
A为m*m阶矩阵, X和b为m阶向量。
>> A=[1,2,3;4,5,6;7,8,0];
>> b=[366;804;351];
>> det(A)
ans =
27
>> x=inv(A)*b
x =
25.0000
22.0000
99.0000
>> x=A\b
x =
25.0000
22.0000
99.0000
广义情况:方程数与未知量数目不等时,线性方程组通常不存在唯一解,但最小二乘解x*是存在唯一。
>> A=[1 2 3; 4 5 6; 7 8 0; 2 5 8];
>> b=[366 804 351 514]';
>> x=A\b
x =
247.9818
-173.1091
114.9273
二、矩阵函数
I.矩阵基本性质
1)行列式
>> A=rand(3)
A =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
>> det(A)
ans =
0.4289
2)秩
>> rank(A)
ans =
3
3)迹
>> trace(A)
ans =
2.6628
4)范数
>> A=[1 1 1;0 0 0;1 1 1]
A =
1 1 1
0 0 0
1 1 1
>> norm(A) %2-范数
ans =
2.4495
>> norm(A,inf) % inf-范数
ans =
3
>> norm(A,1) %1-范数
ans =
2
II.特征值计算
>> A=[0 1;-1 0]
A =
0 1
-1 0
>> eig(A)
ans =
0 + 1.0000i
0 - 1.0000i
>> [x,D]=eig(A)
x =
0.7071 0.7071
0 + 0.7071i 0 - 0.7071i
D =
0 + 1.0000i 0
0 0 - 1.0000i
---A*X=X*D
III.三角分解
>> A=[1 2 3;4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> [L,U]=lu(A)
L =
0.1429 1.0000 0
0.5714 0.5000 1.0000
1.0000 0 0
U =
7.0000 8.0000 9.0000
0 0.8571 1.7143
0 0 0.0000
>> L*U
ans =
1 2 3
4 5 6
7 8 9
>> [L,U,P]=lu(A)
L =
1.0000 0 0
0.1429 1.0000 0
0.5714 0.5000 1.0000
U =
7.0000 8.0000 9.0000
0 0.8571 1.7143
0 0 0.0000
P =
0 0 1
1 0 0
0 1 0
>> P*A
ans =
7 8 9
1 2 3
4 5 6
>> L*U
ans =
7 8 9
1 2 3
4 5 6
IV.正交分解
>> A=[1 2 3; 4 5 6;7 8 9;10 11 12]
A =
1 2 3
4 5 6
7 8 9
10 11 12
>> [Q,R]=qr(A)
Q =
-0.0776 -0.8331 0.5456 -0.0478
-0.3105 -0.4512 -0.6919 0.4704
-0.5433 -0.0694 -0.2531 -0.7975
-0.7762 0.3124 0.3994 0.3748
R =
-12.8841 -14.5916 -16.2992
0 -1.0413 -2.0826
0 0 -0.0000
0 0 0
>> Q*R
ans =
1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
7.0000 8.0000 9.0000
10.0000 11.0000 12.0000
-- QR分解可用来求超定方程的最小二乘解
>> b=[1;3; 5; 7]
b =
1
3
5
7
>> x=A\b
Warning: Rank deficient, rank = 2 tol = 1.4594e-014.
x =
0.5000
0
0.1667
>> y=Q'*b
y =
-9.1586
-0.3471
0.0000
-0.0000
>> x=R\y
Warning: Rank deficient, rank = 2 tol = 1.4594e-014.
x =
0.5000
0
0.1667
三、方程求根
>> p=[1 -12 0 25 116]
p =
1 -12 0 25 116
>> r=roots(p)
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
已知多项式的根,可用poly构造相应的多项式:
>> pp=poly(r)
pp =
1.0000 -12.0000 -0.0000 25.0000 116.0000
四、曲线拟和
I.一维插值
>> h=1:12;
>> t=[5 8 9 15 25 29 31 30 22 25 27 24];
>> plot(h,t,h,t,'+')
interp1插值函数的格式:
Y1=interp1(X,Y,X1,’method’)
X,Y—原数据点;
X1—加细的数据点,或希望得到插值数据的数据点;
Method---‘linear’, ‘spline’, ‘cubic’;
>> x1=1:0.2:12;
>> y1=interp1(h,t,x1,'spline');
>> plot(h,t,'k+',x1,y1,'k-')
II.曲线拟和
设有一组数据点
寻找一个多项式n次多项式P*(x):
>> x=0:0.1:1;
>> y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
>> p=polyfit(x,y,2)
p =
-9.8108 20.1293 -0.0317
>> xi=linspace(0,1,100);
>> z=polyval(p,xi);
>> plot(x,y,'ko',xi,z,'r-')
>> p=polyfit(x,y,10);
>> xi=linspace(0,1,100);
>> z=polyval(p,xi);
>> plot(x,y,'ko',xi,z,'r-')
五、数值积分
sum(x)—输入数组x, 输出为x的和;
cumsum(x)—输入数组x, 输出为x的依次累加和;
trapz(x)—输入数组x, 输出为x按梯形求积公式计算的积分(单位步长);
trapz(x,y)—输入数组x,y, 输出y对x按梯形求积公式计算的积分(步长可以不相等);
quad(‘fun’,a,b)—用辛普森公式(2阶)计算以fun.m的函数在(a,b)上的积分,相对误差为0.001;
quad(‘fun’,a,b,tol)—用辛普森公式(2阶)计算以fun.m的函数在(a,b)上的积分,相对误差为tol;
quad8(‘fun’,a,b,tol)—用辛普森公式(8阶)计算以fun.m的函数在(a,b)上的积分,相对误差为tol;
rand(1,n)—产生n个(0,1)的随机数。
计算积分
1)矩形公式和梯形公式:将
>> h=pi/20;
>> x=0:h:pi/2;
>> y=sin(x);
>> z1=sum(y(1:10))*h
z1 =
0.9194
>> z2=sum(y(2:11))*h
z2 =
1.0765
>> z=cumsum(y);
>> z11=z(10)*h
z11 =
0.9194
>> z12=(z(11)-z(1))*h
z12 =
1.0765
>> z3=trapz(y)*h
z3 =
0.9979
2)辛普森公式
>> z4=quad('sin',0,pi/2)
z4 =
1.0000
3)蒙特卡罗方法
>> n=100000;
>> x=rand(1,n);
>> y=sin(x.*pi/2);
>> z=sum(y)*pi/(2*n)
z =
1.0005
六、数据分析
max----最大值
min----最小值
mean----均值
media----中值
std----标准差
sum----元素总和
cumsum----累加和
prod----元素乘积
cumprod----累积
corrcoef----互相关系数矩阵
cov----协方差矩阵
……
>> a=[ 1 3 5 9 3 2 7 6];
>> mean(a)
ans =
4.5000
>> median(a)
ans =
4
>> std(a)
ans =
2.7255
>> cumsum(a)
ans =
1 4 9 18 21 23 30 36
>> b=[1 4 6 8 2 1 5 0];
>> corrcoef(a,b)
ans =
1.0000 0.6771
0.6771 1.0000
>> cov(a,b)
ans =
7.4286 5.2143
5.2143 7.9821
编程基础
一、 关系运算和IF语句
I. 关系运算和逻辑操作符
关系运算符
< <= > >= == ~=
逻辑操作符
& | ~
y=all(x)
若x 为向量,当所有元素非零时y=1,
否则y=0;
若x 为矩阵,all作用于列元素,y为行向量。
y=any(x)
若x 为向量,当有一个元素非零时y=1,
否则y=0;
若x 为矩阵,all作用于列元素,y为行向量。
>> A=[1 2; 0 1]
A =
1 2
0 1
>> any(A) %any表示矩阵的每一列中%是否有非零元素
ans =
1 1
>> all(A) %all表示矩阵的每一列中
%是否全是非零元素
ans =
0 1
IF语句:
1)
if <关系表达式>
<语句1>
end
2)
if <关系表达式>
<语句1>
else
<语句2>
end
3)
if <关系表达式1>
<语句1>
elseif <关系表达式1>
<语句2>
……
elseif <关系表达式n>
<语句n>
else
<语句n+1>
end
二、for 循环
for <循环参数>=<初值>:<步长>:<终值>
<语句>
end
>> for i=1:3
for j=1:4
a(i,j)=1/(i+j-1);
end
end
>> format rat
>> a
a =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
二、 while语句
while <关系表达式>
<语句>
end
求出满足1+2+…+n<100的最大整数n:
>> sum=0;n=0;
>> while sum<100
n=n+1;
sum=sum+n;
end;
>> n=n-1;
>> n
n =
13
三、 switch语句
switch <表达式>
case value1
<语句1>
case value2
<语句2>
…
otherwise
<语句n>
end
四、 M文件:文本文件及函数文件
I.文本文件: <M-文件名>.m
fibo.m:
%An M-file to calculate Fibonnacinumbers
f=[1 1]; i=1;
while i<15
f(i+2)=f(i)+f(i+1);
i=i+1;
end
plot(f, ‘*k’)
II.函数文件
M-文件的第一行包含function;
变量和运算都在文件内部,不在工作间;
文件名为函数名;
function <因变量>=<函数名>(<自变量>)
function a=randint(m,n)
%RANDINT Randomly generated integral %matrix
%randint(m,n) returns an m-by-n matrix %with entries between 0 and 9
a=floor(10*rand(m,n));
>>x=randint(2,3)
x=
9 6 8
2 3 5
stat.m:
function [mean,stdev]=stat(x)
% STAT Mean and standard deviation
% For a vector x, stat(x) returns the mean %and standard deviation of x
% For a matrix x, stat(x) returns two row %vectors containing, respectively,
% the mean and standard deviation of each %column.
[m,n]=size(x);
if m==1
m=n; % handle case of a row vector
end
mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2);
>> x=[2 4 -7 0 5 -1];
>> [xm,xd]=stat(x)
xm =
0.5000
xd =
3.9476