1 / 60

MATLAB 程序设计基础

MATLAB 程序设计基础. MATLAB 的数值计算. Matlab 的数据类型. 变量 变量不需要事先声明,也不需要指定变量类型,它会自动根据所赋予变量的值或对变量的操作来确定变量的类型;赋值过程中,如果变量已存在,则用新值代替旧值,以新的类型代替旧的类型。 变量的命名规则: 变量名区分大小写; 变量名长度不超过 31 位,第 31 位之后的字符被忽略; 变量名以字母开头,变量名中可以包含字母、数字、下划线,但不能使用标点。 变量一般为局部变量,即仅在其调用的 M 文件内部有效;若要定义全局变量,须在变量前加关键字 global 。. 常量

alissa
Download Presentation

MATLAB 程序设计基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MATLAB程序设计基础 MATLAB的数值计算

  2. Matlab的数据类型 • 变量 变量不需要事先声明,也不需要指定变量类型,它会自动根据所赋予变量的值或对变量的操作来确定变量的类型;赋值过程中,如果变量已存在,则用新值代替旧值,以新的类型代替旧的类型。 变量的命名规则: • 变量名区分大小写; • 变量名长度不超过31位,第31位之后的字符被忽略; • 变量名以字母开头,变量名中可以包含字母、数字、下划线,但不能使用标点。 变量一般为局部变量,即仅在其调用的M文件内部有效;若要定义全局变量,须在变量前加关键字global。

  3. 常量 matlab中预定义的一些特殊的量。 i,j 虚数单位 Realmin 最小的正浮点数, pi 圆周率 Realmax 最大的浮点数, eps 浮点运算的相对精度 Inf 无穷大 NaN not a number ,不定值 例如: ?pi ans = 3.1416

  4. ?1/0 Warning: Divide by zero. ans = Inf ?0/0 Warning: Divide by zero. ans = NaN

  5. 定义变量时应避免与常量名相同,如果改变了某个常量的值,可以用clear命令来恢复。定义变量时应避免与常量名相同,如果改变了某个常量的值,可以用clear命令来恢复。 ?pi=1 pi = 1 ?clear pi ?pi ans = 3.1416

  6. 数字变量 • 数字变量的运算 ?258*369 ans = 95202 ?x=258*369 x = 95202 ?123^3 ans = 1860867 ?sqrt(ans) ans = 1.3641e+003

  7. 数字的输入输出格式 缺省为实数保留小数点后4位浮点数表示。 其输入格式与C语言一致: 如:9 -73 0.1999 1.475e6 输出格式由format命令控制,只是影响屏幕显示效果,不影响内部存储和计算。 ?format long;pi ans = 3.14159265358979 ?format long e;pi ans = 3.141592653589793e+000 ?format long g;pi ans = 3.14159265358979

  8. 字符串 • 1、字符串的约定 • 字符串用单引号输入或赋值; • 字符串的每个字符都是都是字符数组的一个元素; • 字符串和字符数组基本上等价。 ?s='symbolic' s = symbolic ?size(s) ans = 1 8 ?s(3) ans = m

  9. 字符串的转换 double 字符串转换为数值代码 num2str 数字转换为字符串 int2str 整数转换为字符串 mat2str 矩阵转换为字符串 str2num 转换字符串为数字 ?double(s) ans = 49 50 51 50 51 52

  10. 字符串操作 strcat strcmp strvcat strncmp findstr upper lower blanks deblank …… • 执行字符串 ?t='1/(a*b-1)';a=2;b=3;c=eval(t) c = 0.2000

  11. 结构型变量 由函数struct定义,以指针操作符“.”连接结构型变量名与属性名。 结构型变量名=struct(元素名1,元素值1,元素名2,元素值2,…) ?c=struct('c1',1,'c2',[1 2 3 4],'c3','abcd') c = c1: 1 c2: [1 2 3 4] c3: 'abcd' ?c.c2 ans = 1 2 3 4 ?c.c3 ans = abcd

  12. 单元型变量 单元型变量为任意类型的多维数组,其定义需用大括号,元素间用逗号隔开。 ?a=[1,2;3,4] a = 1 2 3 4 ?b={1:4,a,'abcd'} b = [1x4 double] [2x2 double] 'abcd' ?cellplot(b)

  13. 单元型变量元素的引用采用大括号为下标标识,用小括号只显示该元素的压缩形式。单元型变量元素的引用采用大括号为下标标识,用小括号只显示该元素的压缩形式。 ?b{2} ans = 1 2 3 4 ?b(2) ans = [2x2 double]

  14. 向量 向量元素用“[]”括起来,元素间用空格、逗号或分号分隔; 注意:空格和逗号分隔成行向量,分号分割成列向量。 • 冒号表达式生成向量 基本格式:x=x1:step:x2 x=x1:x2 ?a=1:2:12 a = 1 3 5 7 9 11 ?a=12:-2:1 a = 12 10 8 6 4 2 ?a=1:6 a = 1 2 3 4 5 6

  15. 线性等分向量生成 y=linspace(x1,x2) 生成100维行向量 y=linspace(x1,x2,n) 生成n维行向量 ?a=linspace(1,100,6) a = 1.0000 20.8000 40.6000 60.4000 80.2000 100.0000

  16. 对数等分向量生成 y=logspace(x1,x2) 生成50维对数等分向量, y(1)=10^x1 y(50)=10^x2 y=logspace(x1,x2,n) 生成n维对数等分向量 y(1)=10^x1 y(n)=10^x2 ?a=logspace(0,5,6) a = 1 10 100 1000 10000 100000

  17. 向量的基本运算 • 与数运算 a = 1.0000 20.8000 40.6000 60.4000 80.2000 100.0000 ?a-1 ans = 0 19.8000 39.6000 59.4000 79.2000 99.0000 ?a*2 ans = 2.0000 41.6000 81.2000 120.8000 160.4000 200.0000

  18. 点积计算 指两个向量在其中一个向量方向上的投影的乘积。 dot(a,b) a,b必须同维。 ?a=[1 2 3]; ?b=[3,4,5]; ?dot(a,b) ans = 26 ?sum(a.*b) ans = 26

  19. 叉积 表示过两相交向量的交点的垂直于两向量所在平面的向量。 cross(a,b) a,b必须为三维向量。 • 混合积 ?c=cross(a,b) c = -2 4 -2 ?dot(a,cross(b,c)) ans = 24

  20. 矩阵 大型矩阵通借助M文件来输入。 ?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

  21. x=rand(1,5) %产生的均布随机数组 x = 0.9501 0.2311 0.6068 0.4860 0.8913 x(3) %寻访数组x的第三个元素。 ans = 0.6068 x([1 2 5]) %寻访数组x的第一、二、五个元素组成的子数组。 ans = 0.9501 0.2311 0.8913 x(1:3) %寻访前三个元素组成的子数组 ans = 0.9501 0.2311 0.6068 x(3:end) %寻访除前2个元素外的全部其他元素。end是最后一 %个元素的下标。 ans = 0.6068 0.4860 0.8913

  22. 常用的特殊矩阵 单位矩阵:eye(m,n); eye(m) 零 矩 阵:zeros(m,n); zeros(m) 一 矩 阵:ones(m,n); ones(m) 对角矩阵:对角元素向量 V=[a1,a2,…,an] A=diag(V) 随机矩阵:rand(m,n)产生一个m×n的均匀分别的随机 矩阵

  23. 》eye(2,3) ans= 1 0 0 0 1 0 》zeros(2,3) ans= 0 0 0 0 0 0 》ones(2,3) ans= 1 1 1 1 1 1 》V=[5 7 2]; A=diag(V) A= 5 0 0 0 7 0 0 0 2 》eye(2) ans= 1 0 0 1 》zeros(2) ans= 0 0 0 0 》ones(2) ans= 1 1 1 1 如果已知A为方阵,则V=diag(A)可以提取A的对角元素构成向量V。

  24. 其他特殊矩阵 compan 友矩阵函数 magic 魔方矩阵 hankel Hankel矩阵 rosser 对称特征值测试矩阵 hilb Hilbert矩阵 pascal Pascal矩阵 invhilb 反Hilbert矩阵 vander 范德蒙矩阵 ……

  25. 矩阵的基本运算 • 加减运算 要求两矩阵必须同阶。 ?a=[1 2 3;2 3 4; 3 4 5]; ?b=[1 1 1;2 2 2;3 3 3]; ?c=a+b c = 2 3 4 4 5 6 6 7 8

  26. 乘法 要求a为i×j阶,b为j×k阶时,ab才能相乘。 ?e=[b,[5 5 5]'] e = 1 1 1 5 2 2 2 5 3 3 3 5 ?f=a*e f = 14 14 14 30 20 20 20 45 26 26 26 60

  27. 除法 左除“\”: 相当于Ax=B的解,x=A-1B。 右除“/”:相当于xA=B的解,x=BA-1 A-1B=(B’A’-1)’。 通常,右除稍快一些,而左除可以避免奇异性。对于Ax=B,其中A为(n×m)阶矩阵: • n=m且非奇异时,方程为恰定方程; • n>m 方程为超定方程; • n<m 方程为欠定方程。

  28. ?A=[1 2 3;4 5 6;7 8 0;1 3 5]; ?B=[1 3 5;2 4 6]; ?A/B ans = 0 0.5000 -3.0000 3.5000 -12.0000 10.2500 1.0000 0.0000 ?(B'\A')' ans = 0 0.5000 -3.0000 3.5000 -12.0000 10.2500 1.0000 0.0000

  29. 矩阵与常数的运算 常数与此矩阵的各元素之间进行运算。 注意:进行数除时,常数通常只能做除数。 • 矩阵的逆运算 函数 inv ?A=[2 1 -3 -1;3 1 0 7;-1 2 4 -2;1 0 -1 5]; ?inv(A) ans = -0.0471 0.5882 -0.2706 -0.9412 0.3882 -0.3529 0.4824 0.7647 -0.2235 0.2941 -0.0353 -0.4706 -0.0353 -0.0588 0.0471 0.2941

  30. 矩阵的行列式运算 函数 det ?A=[2 1 -3 -1;3 1 0 7;-1 2 4 -2;1 0 -1 5]; ?a1=det(A) a1 = -85 ?a2=det(inv(A)) a2 = -0.0118 ?a1*a2 ans = 1

  31. 矩阵的幂运算 与数字的幂运算形式相同,用“^”算符。 • 矩阵的指数运算 常用函数 expm expm1 expm2 expm3 • 矩阵的对数运算 函数 logm • 矩阵的开方运算 函数 sqrtm

  32. ?b=magic(3) b = 8 1 6 3 5 7 4 9 2 ?sqrtm(b) ans = 2.7065 + 0.0601i 0.0185 + 0.5347i 1.1480 - 0.5948i 0.4703 + 0.0829i 2.0288 + 0.7378i 1.3739 - 0.8207i 0.6962 - 0.1430i 1.8257 - 1.2725i 1.3511 + 1.4155i ?b^0.5 ans = 2.7065 + 0.0601i 0.0185 + 0.5347i 1.1480 - 0.5948i 0.4703 + 0.0829i 2.0288 + 0.7378i 1.3739 - 0.8207i 0.6962 - 0.1430i 1.8257 - 1.2725i 1.3511 + 1.4155i

  33. 矩阵的基本函数运算 • 特征值函数 函数 [x,y]=eig(A) 可以给出特征值和特征向量的值 x为特征向量矩阵,y为特征值矩阵。 ?A=[7 3 -2;3 4 -1;-2 -1 3]; ?[x,y]=eig(A) x = 0.5774 0.0988 -0.8105 -0.5774 -0.6525 -0.4908 0.5774 -0.7513 0.3197 y = 2.0000 0 0 0 2.3944 0 0 0 9.6056

  34. 奇异值函数 函数 svd svds • 矩阵翻转 函数 fliplr flipud rot90 a = 7 3 -2 3 4 -1 -2 -1 3 ?fliplr(a) ans = -2 3 7 -1 4 3 3 -1 -2 ?flipud(a) ans = -2 -1 3 3 4 -1 7 3 -2 ?rot90(a) ans = -2 -1 3 3 4 -1 7 3 -2

  35. 范数函数 函数 norm(X,P) P=1 1范数 P=2 2范数 P=inf 无穷范数 P=fro F范数 norm(X)=norm(X,2) • 秩函数 函数 rank e = 1 1 1 5 2 2 2 2 3 3 3 5 ?rank(e) ans = 2

  36. 迹函数 矩阵所有对角线上元素的和称为矩阵的迹。 函数 trace • 正交空间函数 函数 orth 用来求矩阵的一组正交基。 • 条件数函数 判断矩阵的“病态”程度。 函数 cond 计算矩阵的条件数的值 condest 计算矩阵的1范数条件数的估计值 rcond 计算矩阵的条件数的倒数值 • 伪逆函数 函数 pinv 求解“病态”问题时,避免产生伪解。

  37. ?a=magic(4) a = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 ?b=a*[1 1 1 1]'; ?inv(a)*b Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.567374e-017. ans = 0 8 0 0 ?pinv(a)*b ans = 1.0000 1.0000 1.0000 1.0000

  38. 通用函数形式 通用函数调用格式 funm(A,‘funname’) funname包括sin sinh asin asinh cos cosh acos acosh tan exp log log2 pow2 sqrt abs …

  39. ?funm(a,'sqrt') ans = 3.7584 - 0.2071i -0.2271 + 0.4886i 0.3887 + 0.7700i 1.9110 - 1.0514i 0.2745 - 0.0130i 2.3243 + 0.0306i 2.0076 + 0.0483i 1.2246 - 0.0659i 1.3918 - 0.2331i 1.5060 + 0.5498i 1.4884 + 0.8666i 1.4447 - 1.1833i 0.4063 + 0.4533i 2.2277 - 1.0691i 1.9463 - 1.6848i 1.2506 + 2.3006i ?sqrtm(a) ans = 3.7584 - 0.2071i -0.2271 + 0.4886i 0.3887 + 0.7700i 1.9110 - 1.0514i 0.2745 - 0.0130i 2.3243 + 0.0306i 2.0076 + 0.0483i 1.2246 - 0.0659i 1.3918 - 0.2331i 1.5060 + 0.5498i 1.4884 + 0.8666i 1.4447 - 1.1833i 0.4063 + 0.4533i 2.2277 - 1.0691i 1.9463 - 1.6848i 1.2506 + 2.3006i ?sqrt(a) ans = 4.0000 1.4142 1.7321 3.6056 2.2361 3.3166 3.1623 2.8284 3.0000 2.6458 2.4495 3.4641 2.0000 3.7417 3.8730 1.0000

  40. 矩阵分解函数 • 特征值分解 • [V,D]=eig(X) 矩阵的特征值分解:X×V=V×D • [V,D]=eig(X,’nobalance’) 关闭平衡算法的求解方法(平衡算法对于某些问题可以得到更高的精度)。 • [V,D]=eig(A,B) 广义特征值分解:A×V=B×V×D ?a=[-149 -50 -154;537 180 546;-27 -9 -25]; ?[v,d]=eig(a) v = 0.3162 0.4041 0.1391 -0.9487 -0.9091 -0.9740 0.0000 -0.1010 0.1789 d = 1.0000 0 0 0 2.0000 0 0 0 3.0000

  41. ?b=[2 10 2;10 5 -8;2 -8 11]; ?[v,d]=eig(a,b) v = 0.8211 -0.3138 -0.0191 -0.3452 0.9495 -0.9441 -0.4546 -0.0044 0.3290 d = 12.9030 0 0 0 -0.0045 0 0 0 0.0706

  42. 奇异值分解 [U,S,V]=svd(X) 其中X=U×S×V’ ?a=[1;1]; ?[U,S,V]=svd(a) U = 0.7071 -0.7071 0.7071 0.7071 S = 1.4142 0 V = 1

  43. LU分解 [L,U]=lu(A) 又称三角分解,目的是分解成一个下三角阵L和一个上三角阵U的乘积,即A=L×U ?a=[1 2 3;2 4 1;4 6 7]; ?[l,u]=lu(a) l = 0.2500 0.5000 1.0000 0.5000 1.0000 0 1.0000 0 0 u = 4.0000 6.0000 7.0000 0 1.0000 -2.5000 0 0 2.5000 注意:L实际上是一个“心理上”的下三角矩阵,它事实上是一个置换矩阵P的逆矩阵与一个真正下三角矩阵L1(其对角线元素为1)的乘积。

  44. ?[l,u,p]=lu(a) l = 1.0000 0 0 0.5000 1.0000 0 0.2500 0.5000 1.0000 u = 4.0000 6.0000 7.0000 0 1.0000 -2.5000 0 0 2.5000 p = 0 0 1 0 1 0 1 0 0 ?inv(p)*l*u ans = 1 2 3 2 4 1 4 6 7 p为置换矩阵,此时满足A=P-1LU

  45. Chol分解 如果A为n阶对称正定矩阵,则存在一个非奇异下三角实矩阵L,使得A=LLT,当限定L的对角元素为正时,这种分解是唯一的。 ?a=[4 -1 1;-1 4.25 2.75;1 2.75 3.5]; ?chol(a) ans = 2.0000 -0.5000 0.5000 0 2.0000 1.5000 0 0 1.0000

  46. 正交分解 A=QR ?a=[1 1 1;2 -1 -1;2 -4 5]; ?[q,r]=qr(a) q = -0.3333 -0.6667 -0.6667 -0.6667 -0.3333 0.6667 -0.6667 0.6667 -0.3333 r = -3 3 -3 0 -3 3 0 0 -3 将矩阵A做正交化分解,使得Q*R=A,其中Q为正交矩阵(其范数为1,指令norm(Q)=1),R为对角化的上三角矩阵。

  47. 矩阵的特殊操作 • 变维 • reshape(X,M,N) X变为M×N维 • reshape(X,M,N,P,…) X变为M×N×P×… 或reshape(X,[M N P …]) • “:” 操作符 ?c=zeros(4,3); ?c(:)=a(:) c = 1 5 9 2 6 10 3 7 11 4 8 12 ?a=[1:12]; ?b=reshape(a,2,6) b = 1 3 5 7 9 11 2 4 6 8 10 12

  48. 矩阵抽取 • 对角元素抽取 diag(X,k)抽取X的第k条对角线元素,k=0为主对角线,上对角线为正值,下对角线为负值。 diag(X) 抽取主对角线元素 ?a=pascal(4) a = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 ?v=diag(a) v = 1 2 6 20 ?v=diag(a,2) v = 1 4

  49. 三角阵的抽取 tril(X) 提取X的主下三角部分 tril(X,k) 提取X的第k条对角线下面的元素 triu(X) 提取X的主上三角部分 triu(X,k) 提取X的第k条对角线上面的元素 ?al=tril(a,-1) al = 0 0 0 0 1 0 0 0 1 3 0 0 1 4 10 0 ?au=triu(a,-1) au = 1 1 1 1 1 2 3 4 0 3 6 10 0 0 10 20

  50. 稀疏矩阵 用元素的行列号和元素值来存储一个元素。 ?a=speye(100) a = (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 … … (99,99) 1 (100,100) 1 ?b=eye(100); ?whos a b Name Size Bytes Class a 100x100 1604 sparse array b 100x100 80000 double array Grand total is 10100 elements using 81604 bytes

More Related