张生工作室

一切皆有可能

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  24 随笔 :: 3 文章 :: 11 评论 :: 0 Trackbacks

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



张生工作室
posted on 2007-09-27 11:54 张生工作室 阅读(2192) 评论(3)  编辑  收藏

评论

# re: MathLab使用 2007-12-04 19:53 292939760
快速入门,方便大家...谢谢..  回复  更多评论
  

# re: MathLab使用[未登录] 2008-03-20 15:10 小小
请问要表示以(-0.5)为底的指数要怎么表示啊  回复  更多评论
  

# re: MathLab使用 2008-04-01 17:33 天涯浪子
看不明白  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: