CH2 基本运算tobemodified.docx_第1页
CH2 基本运算tobemodified.docx_第2页
CH2 基本运算tobemodified.docx_第3页
CH2 基本运算tobemodified.docx_第4页
CH2 基本运算tobemodified.docx_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Matlab_2 基本运算u 变量和数据类型u 整型和浮点型数据u 数组和矩阵运算u 字符串、单元体和结构体u 关系和逻辑运算u 位运算、时间运算 变量命名规则1) 以字母开头,可以包含63个字母、数字和下划线(字母区分大小写)。2) 不能使用Matlab关键字。3) 避免与已经定义的变量或函数同名。相关的函数:namelengthmax % 变量的最大长度 isvarname % 检查命名合法性iskeyword % 查看关键字(熟记!)exist % 检测命名是否已存在which % 查找命名的位置Matlab定义的常用变量:ans, pi, Inf, NaN, i, j, 容易被用作变量的Matlab函数/变量: i, j, size, length, any, all, % 用户可以重置Matlab已定义的变量或函数名pi = 2.718 % 虽然没有必要,但是合法10*pi变量类型根据变量的生存时间和可访问特性,Matlab定义了三种类型的变量:1) local 局部变量(默认)2) global 全局变量3) persistent 永久变量(仅用于函数中)Matlab搜索路径搜索路径指的是Matlab所有文件所在目录的列表。当Matlab读取用户输入的变量名(或M文件名),Matlab按以下顺序查找:1) 是不是Matlab工作区的变量,如果不是,执行下一步。2) 是不是Matlab内置函数,3) 是不是当前目录下的M文件,4) 按Matlab搜索路径顺序查找,5) 没有找到,提示错误信息。更改搜索路径的方法:1) 用户可以通过path组函数调用,对搜索路径内容进行添加、删除、排序等操作。2) 更简便的方法是在Matlab桌面File菜单Set Path选项中进行操作。3) 也可以在Current Folder窗口,按在线提示直接设置。% exist查看命名是否已经存在exist % var, func, mfile% 使用帮助文档是掌握Matlab的必要环节!help exist % 查看返回值的意义doc exist % 查看帮助文档% which查看变量或文件位置which sinwhich -all sinhelp which % 查看更多的用法doc which基本数据类型Matlab定义了15种基本数据类型1) 默认的数据类型为double(双精度浮点型);2) 除了function_handle(函数句柄),所有数据类型均支持数组运算;3) cell(单元体)和struct(结构体)为承载其它数据的容器;4) 函数class和whos查看数据类型。整数型数值数据1) 整型数据必须用相应的函数说明int8, int16, int32, int64uint8, uint16, uint32, uint642) intmax, intmin查看数值范围3) 注意整型数的运算规则% 整型数数据范围intmax(int8) intmin(int8)intmin(uint8) % 整型数的运算a = int8(pi)b = int16(3.5)class(a) % 查看变量类型class(b)whos % 查看当前工作区内所有的变量c = a*b % 不同类型整数不能直接运算d = a*pi % 注意整数和浮点数的运算结果whos浮点型数值数据1) 单、双精度浮点数分别用single、double函数说明2) realmax, realmin查看数值范围3) format改变数据显示格式4) eps显示数据精度% 浮点数据范围realmax singlerealmin singlerealmaxrealmin % 数据显示格式piformat longpi help format% eps:一个浮点数能够取得的最小增量。eps eps(single) eps(double)eps(1)eps(10)eps(1e10) % 浮点数的计算精度sin(pi)tan(pi/2)exp(pi*i)% 大数和小数的运算a = 1 + 1e-16b = 1a = b % 关系运算符=判别两个操作数是否相等% 运算次序format longa = 0.1+0.4-0.3b = 0.1-0.3+0.4if(a=b) disp( okay. ) % disp显示字符串内容else disp( this is a bug! )enda b% 避免用运算后浮点数结果是否相等作为判别条件。% 一般浮点数都不能准确表达。% 整数可以用浮点格式准确表达。% 用format hex查看整数的存储% 浮点数代替整数的运算% flintmax 浮点数能表达的连续整数的最大值253% bitmax 浮点数能表达的最大整数253-1(新版本中已删除)% fix 取整数部分% round 按舍入原则取整% rem 计算余数%format longm = 253n = flintmaxm = na = 1.5, b = 1.4999fix(a)round(a)rem(10, 3)ream(1, 0.3)% 验证Fermat数: F(n) = 2(2n) + 1, n = 0,1,2% F(5)不是质数n = 5N = 2(2n) + 1for i = 2:sqrt(N)if( rem(N, i)=0 ) disp(A factor is found!) break;end;end复数运算复数可以直接用i, j生成,也可以用complex函数常用函数:real, imag, angle, abs, isreal几乎所有的Matlab运算符和数学函数都支持复数运算对复数矩阵,操作符 表示共轭转置运算%a = 1b = 2z = 1 + 2iz = a + b*1j % 写成*1j避免与下标j混淆z = complex(a, b)real(z)imag(z)angle(z)abs(z)isreal(z)isreal(z*z)isreal(z*z.) % 注意操作符.和.的差别isreal( exp(pi*1j) ) % 注意浮点计算精度的影响z22/zz2sqrt(z)exp(z)数组和数组运算矩阵(matrix)是长度为m*n的二维数值数组。向量(vector)是长度为n的一维数组,可看做1*n或n*1的矩阵。标量(scalar)指的是一个数字,可看做1*1的矩阵。向量的创建1) 方括号内直接输入2) 冒号操作符3) linspace和logspace函数% 直接创建a = 1 2 3 b = 1*2 3-4c = 1+i 2-3i% 注意:% 方括号内,表达式最好写成紧凑格式(不留空格)。% 空格号与逗号的功能相同。%下列表达易产生错误d = 1 +2 3- 4 % 加减号可以是一元,也可以是二元操作符e = 1 *i 2/ i% 冒号操作符a = 1:6 % 缺省的步长为1b = 0:0.1:0.5c = -1:3:10% 函数创建d = linspace(1, 6, 6)e = logspace(1, 3, 3) % first:step:end 指定步长step(缺省为step = 1)% linspace(first, end, n) 指点节点数n% logspace(first, end, n) 10first 10end% Matlab数学函数支持向量输入,计算结果也是以向量返回tan(a) log10(e)一维数组寻址% 数组下标用 ( ) 表达a = 1:10a(1), a(3), a(10), a(end)%下标可以是向量a(1:5)a(5:-1:1)a(7:end)a(1 3 5 7)% 下标只能是正整数a(3.14) % xa(0) % x% 下标不能超出end a(12) % x数组方向:行向量与列向量Matlab的冒号操作符和linspace创建的均为行向量创建列向量:1) 分号操作符2) 转置操作符(撇号)%a = 1 2 3b = 1; 2; 3 % 分号的换行功能c = a. % 转置操作% 复数问题a = 1:3c = a + a*1i c % 表示复数共轭转置,对非复数与. 功能相同 c. % . 表示非复数共轭转置 二维数组的创建1) 直接创建2) 由向量或数组合成3) 利用标准数组% 直接创建a = 1 2 3; 4 5 6 % 分号的功能b = 1 2 3; 4 5 6 7 % xa = 1:4b = 2:5c = a; b % 注意数组的方向d = a., b.e = c, 3:6 % 标准数组zeros % 全0数组ones % 全1数组rand % (01)随机数数组randn % 正态分布(0,1)随机数组eye % 单位矩阵diag % 对角矩阵magic % 魔方矩阵% 注:前4个函数可以用于多维数组% Matlab中函数的输入、输出是可变的eye(5)eye(3, 4)eye(3, 4, 2) % x%diag( 1 3 5 7 )diag( 1:2:7 )%magic(3)magic(5)数组运算标量-数组运算 加减乘除幂等运算是对数组中所有元素进行。Matlab通过标量扩展,将标量转换为相应大小的数组。a = magic(3)b = a-3c = (a-3)*2d = 2a数组-数组运算 大小相同的数组可以进行元素-元素的运算: 符号 .* ./ . . 数组-数组运算遵循矩阵运算规则 符号 * / 1./a % 标量扩展a-1 % 求逆阵1/a % x数组操作数组生成后,可以通过特定的下标,完成提取、赋值、重排等多种功能。% 赋值a = ones(3)a(2,2) = 9a(:, 1) = 0 0 0.a(:, 1) = 0 % 标量扩展% 赋值语句中,当下标超出范围时,Matlab将自动扩展,未定义的位置填充0x(2, 3) = 10 % 数组x是未创建的数组x(5, 5) = 100 % 合法的% !不推荐使用此类赋值方法% 提取b = a(1:2, 2:3) % 提取数组元素时,下标超出范围不合法c = a(10, 10) % x%多维数组的单下标寻址(线性索引)d = magic(3)d(1), d(6)d(:) % Matlab多维数组的存储:列优先原则d(3:7)d(10) % x索引号不能超出总元素数d(10) = 0 % x 数组形状不能改变d(end, 1) % 注意end的取值d(end)% 了解函数sub2ind, ind2sub的用法% 查找:函数find的使用a = magic(4)ind = find(a = 5)r, c = find(a=5) % 赋值号左边 的用法% 多个返回值b = magic(4)ind = find(b3)r, c = find(b3)doc find %了解find更多的用法% 排序:函数sort的使用s = randperm(6) % 生成1n随机排列的数组sort(s) % 元素排序,缺省为ascendsort(s, ascend)sort(s,descend)% 矩阵或多维数组t = magic(4)sort(t) % 缺省为列优先、升序sort(t,1)sort(t,2)sort(t, 2, descend)st, index = sort(t, 2, descend) % 熟悉函数sum, mean, max, min的用法% 了解函数reshape和repmat 的用法数组大小函数size, length, numel, ndims%a = 1:4; 5:8size(a) % 返回一个行向量 行数, 列数, 页数 length(a) % 返回数组的最大长度max(size(a) numel(a) % 返回数组的元素总数 ndims(a) % 数组维数length(size(a)向量的乘积-内积、外积、混合积Matlab定义了函数dot和cross分别计算向量的内积和外积向量u, v, w的混合积的定义为u.(v*w)% 注:函数cross只能对长度为3的向量进行运算%u = 1 2 3v = 1 3 5w = 2 1 1% 直接按定义计算dot(u, cross(v, w)% 另一方法det ( u; v; w ) % 函数det计算方阵的行列式det ( u v w )线性方程组-矩阵的乘法和除法线性方程组a*x = b的解为x = ab 或 a-1*b%a = 1 2 3; 4 5 6; 7 8 9b = 1 2 3x = aba*x - bx = inv(a)*b % inv计算逆阵, inv(a)等同于a-1a*x - b% 问题的分析inv(a)*a % 线性方程组有唯一解的条件?rank(a), rank( a,b) % rank计算矩阵的秩%a(3,3) = 0 rank(a), rank(a,b) x = abx = inv(a)*binv(a)*a 多维数组格式:Array(row, column, page, )第三维称为页,更高的维数无统一的名称创建方法、元素运算与二维类似乘除运算无定义%a(:, :,1) = ones(3);a(:,:,2) =eye(3);a % 分页显示% 函数zeros, ones, rand, randn可以创建多维数组randn(2, 3, 4) ones(2, 3, 3, 3) % 多维数组的运算次序:列-行-页b(:,:,1) = diag(1 10 100);b(:,:,2) = magic(3);bsum(b)sum(b, 1) % 1/2/3分别表示对列/行/页进行求和sum(b, 2)sum(b, 3)sum(sum(sum(b)sum( b(:) )稀疏矩阵当矩阵的非0元素小于总元素数的1%,称为稀疏矩阵。存贮大量的0元素消耗内存资源,对0元素的运算也浪费大量机器时间。%a = eye(10)s = sparse(a) % 函数sparse将普通矩阵转换为稀疏矩阵whoss(1,5) = 100 % 稀疏矩阵的操作与普通矩阵相同size(s), length(s), numel(s) c = s(2,2)b = full(s) % 函数full将稀疏矩阵转换为普通矩阵d = full(c) % 以上仅仅是说明sparse用法,创建稀疏矩阵最好用speye, spdiags等函数s = speye(1000);a = eye(1000);whos% 创建稀疏数组必须用Matlab指定的函数aa(1000, 1000) = 1; % 尽管非0元素极少,aa仍然是普通矩阵whosss = sparse(aa)whos字符串字符串是以字符显示显示的ASCII数值型数组。Matlab中,字符串是用单引号括起来的一串字符;每个字符称为一个元素,通常用两个字节存储。%s = Hellow, Matlab.d = double(s)char(d)% 内容提取s(2)s(1:6)s(9:14) % 字符串中还有单引号,必须写成两个单引号It doesnt work unless% 字符串合成a = Hellow, b = Matlab.a, b % 函数disp显示字符串内容,不显示变量名disp(s)disp(Very good)% 汉字和英文字符的处理方法相同h = 汉字处理d = double(h)char(d) whos字符串数组多行字符构成字符串数组,单每行的元素必须相同。字符数少的串后面填充空格。% 直接输入s = one two three four size(s) % 用函数char可以避免输入空格t = char(one, two, three, four) size(t)zh = char( 中国, 安徽省合肥市, 中国科学技术大学, 230026) size(zh)% 内容提取t(2,1)t(1,4)t(:, 3)t(3, 1:3) t(12) % 线性索引% 赋值和替换t(4,1) = F t(1,:) = ONE % x,字符数目必须相等t(:, 3) = C % 标量扩展格式化输入输出和格式转换% 函数disp回显字符串或数组,无返回参数disp(Matlab is matrix language.);disp( magic(3) );% 函数sprintf将数据格式化写入到字符串str = sprintf(Equation:n%d x %.5f = %.2e, 1000, pi, 1000*pi);disp(str);% sscanf从字符串中读取格式化数据% % 函数num2str/str2num数字/字符串转换a = 3.14s = num2str(a)str2num(s)a = s% 函数dec2bin/bin2dec无符号十进制数/二进制数显示的转换a = 14bits = dec2bin(a,8) % 整数显示为二进制8位字符串bin2dec(bits)bin2dec( 000111 ) % 二进制字符串转换为整数% 例:判别一个十进制整数中是否有某个数字a = 31*137s = num2str(a)aa = str2num(s.)find(aa = 3) %单元数组和结构体单元数组(cell array)和结构体(structure)将不同类型的数据集成到一个变量中,方便相关数据的处理。单元数组和结构仅仅是承载其它数据类型的容器,具体的运算主要针对其包含的数据。单元数组和结构体的差别在于标识的方式:cell array通过数字(下标)标识structure通过名称(字段)标识单元数组的创建1) 直接用赋值语句创建2) 函数cell创建% 直接创建的两种格式:% (1)按单元索引,待赋给单元的值必须用a(1,1) = 1:10 ;a(1,2) = 1+i ;a(2,1) = this is a test. ;a(2,2) = magic(3) % (2)按内容索引,将写在等式左边b1,1 = 1:10;b1,2 = 1+i;b2,1 = this is a test.;b2,2 = magic(3) % 两种方法完全等效% 用于访问单元的值,( )用于标识单元% 单元体比较简单时,可一步直接写出c = 1:10, 1+i; this is a test., magic(3) % 比较a, b, c是否等同isequal(a, b, c) % 所有收入参数均相等返回1% 单元的内容很长,可能无法回显a(1,1)a1,1a(1,2)a1,2% 回显单元体全部内容用celldisp函数,或用冒号操作符celldisp(a)a:, :% 函数cellplot图示单元体结构cellplot(a)cell 函数a = cell(3,4) % 生成3x4的空单元组数a(1,1) = this doesnt work % xa(1,1) = this does work 单元数组的处理% % 注意与普通的数值型数组的差异% 和( )的差异a = 1:10, 1+i; this is a test., magic(3) size(a)numel(a) size(a(1,1)size(a1,1) class(a(1,1)class(a1,1) % ()不能用于处理单元的内容% 内容提取b = a(1,1) % b是1x1单元数组c = a1,1 % c是1x10普通数组% 赋值和替换a(1,1) = eye(4) % xa(1,1) = eye(4) a1,1 = eye(4)字符串单元数组c = one; two; three; four s = char(one, two, three, four)whos% 函数cellstr将字符串数组转换为字符串单元数组,其功能与char相反cellstr(s)char(c)isequal( cellstr(s), c )isequal( char(c), s)c1,1 = a long words(1,1) = a long word %结构体的创建结构体用字段(fields)来进行索引,用点号访问字段中的数据。创建方法:1) 直接赋值创建2) 函数struct创建% 创建结构体circlecircle.radius = 2.3;circle.center = 1, 2;circle.linestyle = -% 结构体数组circle(2).linestyle = -.; %circle(2).radius = 32;circle(2).center = 2, 3% 函数structa1 = 2.3, 32 ; % 特定的字段值必须写成单元数组形式a2 = 1, 2, 2, 3 ;a3 = -, -. ;C = struct( radius, a1, center, a2, linestyle, a3 ) % 注意struct函数的输入参数格式% 比较两种创建方法结果是否等同isequal( circle, C) 结构体处理% 添加新字段C(1).color = red C.color % 未定义的内容填充空数组C(2).color = blueC.color% 内容提取r1 = C(1).radiusr2 = C(2).radius% 同时提取不同元素同字段的值 r1, r2 = C.radius % 注意输出格式c1, c2 = C.center 关系和逻辑运算关系和逻辑运算主要用于真/假判断,控制程序执行。运算结果为True/False (1/0),占一个字节。关系和逻辑运算中,所有非0值视为True。% 函数logical将数组转换为逻辑数组a = diag( 1:5 )b = logical(a)%a = eye(3)b = logical(a)whos % 查看a和b的数据类型和存储关系运算符=关系运算主要用来比较两个尺度相等的数组对应元素大小,返回与原数组尺度相同的逻辑数组。对于数组和标量比较,按标量扩展进行。a = rand(3)b = rand(3)a b a 0.5% 关系表达式可以和数学表达式进行混合运算;运算中,逻辑值转换为浮点数。b - (a0.5)% 例:除数为0问题1/0 % 结果为无穷大,Inf0/0 % 结果不确定,非数值,NaN (Not a Number)%x = -2:0.5:2sin(x)./xx = x + (x=0)*epssin(x)./x逻辑数寻址% 按逻辑数组的索引,根据其内容(1/0)完成相应操作。a = magic(3)index = logical( 1 0 1 0 1 ) % 生成逻辑数组b = a(index) % 提取a(index) = 0 % 赋值a = magic(4)ii = logical( eye(3) )a(ii)a(ii) = -1%a = 1, pi, 0, -2.3index = find(a) logical(a)index = find( a=1 )a=1逻辑运算符& 数组间元素与操作| 数组间元素或操作 数据元素反操作& 标量关系表达式的短路式(short-circuiting)与操作| 标量关系表达式的短路式或操作%a = randperm(5)b = randperm(5)c = abd = c% short-circuiting是指当已知逻辑运算结果时,就不再执行后面的表达式。a = 1, b = 2a = 1 | b = 1a = 2 & b =2关系和逻辑函数xor(x, y) 逻辑异或any(x) 判别数组中 是否 含非零元素all(x) 判别数组中 是否 全为非零元素% a = 3 1 0 0 b = 2 0 4 0 xor(a, b)any(a)all(a)% 注意运算次序:列优先原则a = 1 0 0; 2 0 0; 3 4 0any(a) % 缺省:按每列处理any(a, 1) any(a, 2) % 按每行处理% 函数max/min的使用b = magic(3)max( b, 6 ) % 比较矩阵相应元素的大小max( b) % 查找每列元素中的最大值max( b, , 2 ) % 查找每行元素中的最大值mb = max(max(b)i, j = find(b = mb) % b(i, j) % i,j可能不是标量index = find( b = mb ) %b(index)% is-簇函数:% 检验特定条件是否成立,返回逻辑值。isvarname, iskeyword, isequalischar, iscell, isstruct, islogicalisinf, isnan, isemptydoc is* % 查看is-簇函数特殊变量:Inf, NaN, Inf, -Inf 计算结果超出能表达的范围,无穷大。NaN 计算结果不确定,非数值 是指一维或多维的长度为0的数组变量。%a = exp(1000)log(a)a*00/0a = 1 NaN Inf -Inf NaN a.2log(a)% 关系运算检测计算结果是否含NaN或Inf,通常是不可取的a = NaNa = Inf% 正确的方法是采用Matlab函数isnan(a)isinf(a)% 替换NaN为0i = find( isnan(a) )a(i) = zeros( size(i) ) % a( find(isnan(a) ) = 0;% 替换Inf为一个数字i = find( isinf(a) )a(i) = 1e10*ones( size(i) )空数组 运算% 空数组的维数和大小a = ones(3, 0)size(a)length(a) % length和numel不计空数组numel(a)% 空数组直接进行关系运算,结果不确定a = a = a = 1a = 1% 正确的方法是用函数isempty判别isempty(a)% 空数组用途1:函数返回值a = 1:5b = find(a10)isempty(b)% 空数组用途2:数值操作a = 1:7a(3:6) = % 删除指定元素b = magic(4)b(:, 3) = % 删除整列b(1:3, 2) = % x矩阵形状不能改变c = zeros(1, 3)n = 2 % repeat for 0 & -1d = ones(1, n), c % 数组合成运算符和特殊符号help + % 查看Matlab所有符号的功能help precedence % 查看运算符优先权注:1) 同级运算按从左到右次序进行2) 圆括号()可以改变优先权3) 注意&, |, &, |的优先权顺

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论