资源描述
数 学 建 模 与 数 学 实 验山东工商学院数学与信息科学学院 MATLAB入 门 n MATLAB作 为 线 性 系 统 的 一 种 分 析 和 仿 真 工具 , 是 理 工 科 大 学 生 应 该 掌 握 的 技 术 工 具 , 它 作为 一 种 编 程 语 言 和 可 视 化 工 具 , 可 解 决 工 程 、 科学 计 算 和 数 学 学 科 中 许 多 问 题 。 n MATLAB建 立 在 向 量 、 数 组 和 矩 阵 的 基 础上 , 使 用 方 便 , 人 机 界 面 直 观 , 输 出 结 果 可 视化 。n 矩 阵 是 MATLAB的 核 心n MATLAB的 进 入 与 运 行 方 式 ( 命 令 与 M文 件 方 式 ) MATLAB入 门一 、 变 量 与 函 数二 、 数 组三 、 矩 阵四 、 MATLAB编 程五 、 实 验 作 业 1、 变 量 MATLAB中 变 量 的 命 名 规 则 是 :( 1) 变 量 名 必 须 是 不 含 空 格 的 单 个 词 ;( 2) 变 量 名 区 分 大 小 写 ;( 3) 变 量 名 最 多 不 超 过 19个 字 符 ;( 4) 变 量 名 必 须 以 字 母 打 头 , 之 后 可 以 是 任 意 字 母 、 数 字 或 下 划 线 , 变 量 名 中 不 允 许 使 用 标 点 符 号 . 一 、 变 量 与 函 数 特 殊 变 量 取 值 ans 用 于 结 果 的 缺 省 变 量 名 pi 圆 周 率 eps 计 算 机 的 最 小 数 , 当 和 1 相 加 就 产 生 一 个 比1大 的 数 flops 浮 点 运 算 数 inf 无 穷 大 , 如 1/0 NaN 不 定 量 , 如 0/0 i, j i=j= 1 nargin 所 用 函 数 的 输 入 变 量 数 目 nargout 所 用 函 数 的 输 出 变 量 数 目 realmin 最 小 可 用 正 实 数 realmax 最 大 可 用 正 实 数 特 殊 变 量 表 2、 数 学 运 算 符 号 及 标 点 符 号 + 加 法 运 算 , 适 用 于 两 个 数 或 两 个 同 阶 矩 阵 相 加 . 减 法 运 算 * 乘 法 运 算 .* 点 乘 运 算 / 除 法 运 算 ./ 点 除 运 算 乘 幂 运 算 . 点 乘 幂 运 算 反 斜 杠 表 示 左 除 .( 1) MATLAB的 每 条 命 令 后 , 若 为 逗 号 或 无 标 点 符 号 , 则 显 示 命 令 的 结 果 ; 若 命 令 后 为 分 号 , 则 禁 止 显 示 结 果 . ( 2) “ %” 后 面 所 有 文 字 为 注 释 . ( 3) “ .”表 示 续 行 . 3、 数 学 函 数 Matlab常 用 命 令 由 Matlab语 句 构 成 的 程 序 文 件 称 为 M文 件 , 它 可分 为 程 序 文 件 和 函 数 文 件 两 种 。 若 文 件 中 有 全 局 变 量, 应 在 程 序 的 起 始 部 分 声 明 。 其 语 句 为 : global 变 量 名程 序 文 件 在 命 名 时 不 能 以 数 字 开 始 , 不 允 许 用 汉 字 。 MATLAB的 内 部 函 数 是 有 限 的 , 有 时 为 了 研 究 某一 个 函 数 的 各 种 性 态 , 需 要 为 MATLAB定 义 新 函 数 ,为 此 必 须 编 写 函 数 文 件 . 函 数 文 件 是 文 件 名 后 缀 为 M的 文 件 , 这 类 文 件 的 第 一 行 必 须 是 一 特 殊 字 符function开 始 , 格 式 为 : function 因 变 量 名 =函 数 名 ( 自 变 量 名 )函 数 值 的 获 得 必 须 通 过 具 体 的 运 算 实 现 , 并 赋 给 因 变量 . 4、 M文 件 Matlab的 应 用 程 序 也 以 M文 件 保 存 。 M文 件 建 立 方 法 : 1. 在 Matlab中 , 点 :File-New-M-file 2. 在 编 辑 窗 口 中 输 入 程 序 内 容 3. 点 : File-Save, 存 盘 。 注 意 : 函 数 文 件 名 必 须 与 函 数 名 一 致 。 例 : 定 义 函 数 f(x1,x2)=100(x2-x12)2+(1-x1)2function f=fun(x)f=100*(x(2)-x(1)2)2+(1-x(1)21.建 立 M文 件 : fun.m MATLAB(fun)2. 可 以 直 接 使 用 函 数 fun.m例 如 : 计 算 f(1,2), 只 需 在 Matlab命 令 窗 口 键 入 命 令 :x=1 2fun(x) 返 回 x=logspace(first, last, n) 创 建 从 开 始 , 到 结 束 , 有 n个 元 素 的 对 数 分 隔 行 向 量 . 1、 创 建 简 单 的 数 组二 、 数 组 MATLAB(shuzu1)x=a b c d e f 创 建 包 含 指 定 元 素 的 行 向 量x=first: last 创 建 从 first开 始 , 加 1计 数 , 到 last结 束 的 行 向 量x=first: increment: last 创 建 从 first开 始 , 加 increment计 数 , last结 束 的行 向 量x=linspace(first, last, n) 创 建 从 first开 始 , 到 last结 束 , 有 n个 元 素 的 行 向 量 2、 数 组 元 素 的 访 问 MATLAB(shuzu2)( 3) 直 接 使 用 元 素 编 址 序 号 . x(a b c d) 表 示 提 取数 组 x的 第 a、 b、 c、 d个 元 素 构 成 一 个 新 的 数 组x(a) x(b) x(c) x(d). ( 2) 访 问 一 块 元 素 : x(a : b : c)表 示 访 问 数 组 x的 从 第 a个 元 素 开 始 , 以 步 长 为 b到 第 c个 元 素 ( 但 不 超 过 c) , b可以 为 负 数 , b缺 损 时 为 1. ( 1) 访 问 一 个 元 素 : x(i)表 示 访 问 数 组 x的 第 i个 元 素 . 3、 数 组 的 方 向 前 面 例 子 中 的 数 组 都 是 一 行 数 列 , 是 行 方 向 分 布 的 . 称 之 为 行 向 量 . 数 组 也 可 以 是 列 向 量 , 它 的 数 组 操 作 和 运算 与 行 向 量 是 一 样 的 , 唯 一 的 区 别 是 结 果 以 列 形 式 显 示 . 产 生 列 向 量 有 两 种 方 法 : 直 接 产 生 例 c=1; 2; 3; 4 转 置 产 生 例 b=1 2 3 4; c=b 说 明 : 以 空 格 或 逗 号 分 隔 的 元 素 指 定 的 是 不 同 列 的元 素 , 而 以 分 号 分 隔 的 元 素 指 定 了 不 同 行 的 元 素 . 4、 数 组 的 运 算 ( 1) 标 量 -数 组 运 算 数 组 对 标 量 的 加 、 减 、 乘 、 除 、 乘 方 是 数 组 的 每 个元 素 对 该 标 量 施 加 相 应 的 加 、 减 、 乘 、 除 、 乘 方 运 算 . 设 : a=a1,a2,an, c=标 量则 : a+c=a1+c,a2+c,an+c a.*c=a1*c,a2*c,an*c a./c= a 1/c,a2/c,an/c(右 除 ) a.c= c/a1,c/a2,c/an (左 除 ) a.c= a1c,a2c,anc c.a= ca1,ca2,can MATLAB(shuzu3) ( 2) 数 组 -数 组 运 算 当 两 个 数 组 有 相 同 维 数 时 , 加 、 减 、 乘 、 除 、幂 运 算 可 按 元 素 对 元 素 方 式 进 行 的 , 不 同 大 小 或 维数 的 数 组 是 不 能 进 行 运 算 的 . 设 : a=a1,a2,an, b=b1,b2,bn则 : a+b= a1+b1,a2+b2,an+bn a.*b= a1*b1,a2*b2,an*bn a./b= a1/b1,a2/b2,an/bn a.b=b 1/a1,b2/a2,bn/an a.b=a1b1,a2b2,anbn MATLAB(shuzu4) 返 回 三 、 矩 阵 逗 号 或 空 格 用 于 分 隔 某 一 行 的 元 素 , 分 号 用 于 区 分 不同 的 行 . 除 了 分 号 , 在 输 入 矩 阵 时 , 按 Enter键 也 表 示 开 始一 新 行 . 输 入 矩 阵 时 , 严 格 要 求 所 有 行 有 相 同 的 列 . 例 m=1 2 3 4 ; 5 6 7 8; 9 10 11 12 p=1 1 1 1 2 2 2 2 3 3 3 31、 矩 阵 的 建 立 特 殊 矩 阵 的 建 立 : . MATLAB(matrix1)d=eye(m, n) 产 生 一 个 m行 、 n列 的 单 位 矩 阵c=ones(m, n) 产 生 一 个 m行 、 n列 的 元 素 全 为 1的 矩 阵b=zeros(m, n) 产 生 一 个 m行 、 n列 的 零 矩 阵a= 产 生 一 个 空 矩 阵 , 当 对 一 项 操 作 无 结 果 时 , 返 回 空 矩 阵 , 空 矩 阵 的 大 小 为 零 . size(A) 返 回 矩 阵 A的 行 和 列length(A) 返 回 矩 阵 A的 行 和 列 中 最 大 数 2、 矩 阵 中 元 素 的 操 作 MATLAB (matrix2)( 1) 矩 阵 A的 第 r行 : A( r, : )( 2) 矩 阵 A的 第 r列 : A( : , r)( 4) 取 矩 阵 A的 第 i1i2行 、 第 j1j2列 构 成 新 矩 阵 :A(i1:i2, j1:j2)( 5) 以 逆 序 提 取 矩 阵 A的 第 i1i2行 , 构 成 新 矩 阵 :A(i2:-1: i1, : )( 6) 以 逆 序 提 取 矩 阵 A的 第 j1j2列 , 构 成 新 矩 阵 :A(:, j2:-1: j1 )( 7) 删 除 A的 第 i1i2行 , 构 成 新 矩 阵 :A(i1:i2, : )= ( 8) 删 除 A的 第 j1j2列 , 构 成 新 矩 阵 :A(: , j1:j2)= ( 9) 将 矩 阵 A和 B拼 接 成 新 矩 阵 : A B; A; B( 3) 依 次 提 取 矩 阵 A的 每 一 列 , 将 A拉 伸 为 一 个 列 向 量 : A( : ) ( 2) 矩 阵 -矩 阵 运 算 1 元 素 对 元 素 的 运 算 , 同 数 组 -数 组 运 算 。 3、 矩 阵 的 运 算( 1) 标 量 -矩 阵 运 算 同 标 量 -数 组 运 算 。 MATLAB(matrix3) 2 矩 阵 运 算 :矩 阵 加 法 : A+B矩 阵 乘 法 : A*B方 阵 的 行 列 式 : det( A)方 阵 的 逆 : inv( A)方 阵 的 特 征 值 与 特 征 向 量 : V, D=eig( A) 返 回 关 系 与 逻 辑 运 算 1、 关 系 操 作 符 关 系 操 作 符 说 明 小 于 大 于 = 大 于 或 等 于= = 等 于 = 不 等 于 2、 逻 辑 运 算 符 逻 辑 操 作 符 说 明 与 或 非 1、 for循 环 : 允 许 一 组 命 令 以 固 定 的 和 预 定 的 次 数 重 复 for x=array commands end 在 for和 end语 句 之 间 的 命 令 串 commands按 数 组 ( array) 中 的每 一 列 执 行 一 次 . 在 每 一 次 迭 代 中 , x被 指 定 为 数 组 的 下 一 列 , 即 在第 n次 循 环 中 , x=array(: , n)控 制 流MATLAB提 供 三 种 决 策 或 控 制 流 结 构 : for循 环 、 while循 环 、 if-else-end结 构 . 这 些 结 构 经 常 包 含 大 量 的 MATLAB命 令 , 故 经 常 出 现 在MATLAB程 序 中 , 而 不 是 直 接 加 在 MATLAB提 示 符 下 . 例 对 n=1,2,10,求 xn= 的 值10sin n MATLAB(for1) while expression commands end 只 要 在 表 达 式 (expression)里 的 所 有 元 素 为 真 , 就 执 行 while和end语 句 之 间 的 命 令 串 commands. 2、 While循 环 与 for循 环 以 固 定 次 数 求 一 组 命 令 相 反 , while循 环 以 不 定 的 次数 求 一 组 语 句 的 值 . MATLAB(while1) 例 设 银 行 年 利 率 为 11.25%。 将 10000元 钱 存 入 银 行 ,问 多 长 时 间 会 连 本 带 利 翻 一 番 ? 3、 If-Else-End结 构( 1) 有 一 个 选 择 的 一 般 形 式 是 : if expression commands end 如 果 在 表 达 式 (expression)里 的 所 有 元 素 为 真 ,就 执 行 if和 end语 句 之 间 的 命 令 串 commands. MATLAB (fun1)1(),2( ,12 11)( 2 ffxx xxxf 求设例 先 建 立 M文 件 fun1.m定 义 函 数 f( x) , 再 在Matlab命 令 窗 口 输 入 fun1(2),fun1(-1)即 可 。 2) 有 三 个 或 更 多 的 选 择 的 一 般 形 式 是 : if ( expression1) commands1 else if ( expression2) commands2 else if ( expression3) commands3 else if elsecommandsendendend end )1(),5.0(),2( ,0 x 1x02 1x1xf(x) 32 fffxx 求设例 先 建 立 M文 件 fun2.m定 义 函 数 f( x) , 再 在Matlab命 令 窗 口 输 入 fun2(2),fun2(0.5), fun2(-1)即可 。 MATLAB(fun2) 返 回 根 据 数 据 的 组 织 形 式 , Matlab中 的 文 件 可 分 为 ASCII文 件 和 二进 制 文 件 。 ASCII文 件 又 称 文 本 文 件 , 它 的 每 一 个 字 节 存 放一 个 ASCII代 码 , 代 表 一 个 字 符 。 二 进 制 文 件 是 把 内 存 中 的数 据 按 其 在 内 存 中 的 存 储 形 式 原 样 输 出 到 磁 盘 上 存 放 。文 件 操 作函 数 分 类 函 数 名 作 用 打 开 和 关 闭 文 件 fopen 打 开 文 件fclose 关 闭 文 件读 写 二 进 制 文 件 fread 读 二 进 制 文 件fwrite 写 二 进 制 文 件格 式 I/O fscanf 从 文 件 中 读 格 式 数 据fprintf 写 格 式 数 据fgetl 从 文 件 中 读 行 ,不 返 回 行 结 束 符fgets 从 文 件 中 读 行 ,返 回 行 结 束 符读 写 字 符 串 sprintf 把 格 式 数 据 写 入 字 符 串 sscanf 格 式 读 入 字 符 串文 件 定 位 feof 检 验 是 否 为 文 件 结 尾fseek 设 置 文 件 定 位 器ftell 获 取 文 件 定 位 器frewind 返 回 到 文 件 的 开 头 1 文 件 的 打 开 和 关 闭fid=fopen(filename,permission)fid是 文 件 标 识 符 ( file identifier) , fopen指 令 执 行 成 功 后 就 会返 回 一 个 正 的 fid值 , 如 果 fopen指 令 执 行 失 败 , fid就 返 回 -1。filename是 文 件 名 。permission是 文 件 允 许 操 作 的 类 型 , 可 设 为 以 下 几 个 值 : r 只 读 w 只 写 a 只 能 追 加 ( append) r+ 可 读 可 写与 fopen对 应 的 指 令 为 fclose, 它 用 于 关 闭 文 件 , 其 指 令 格 式 为: status=fclose(fid)如 果 成 功 关 闭 文 件 , status返 回 的 值 就 是 0。 fprintf(fid, 数 据 格 式 , 需 要 保 存 的 数 据 矩 阵 )2. fprintf的 指 令 格 式3. save的 指 令 格 式save filename 变 量 1 变 量 2 执 行 该 命 令 把 变 量 1、 变 量 2、 保 存 在 文 件 filename中 。使 用 load filename即 可 把 变 量 1、 变 量 2、 调 出 来 。如 果 要 保 存 为 ASCII码 , 就 要 在 后 面 加 上 -asciisave filename 变 量 1 变 量 2 -ascii对 于 save指 令 , 处 理 大 量 数 据 存 取 有 一 个 技 巧 非 常 有 用, 即 : save(filename, 变 量 1, 变 量 2, )由 于 filename是 用 字 符 串 表 示 的 , 所 以 可 以 使 用 程 序 进 行控 制 , 使 其 每 处 理 完 一 次 就 存 一 个 不 同 的 文 件 名 称 。 load filename.txt就 建 立 了 filename命 名 的 变 量 。4. load 纯 文 本 文 件 对 以 下 问 题 ,编 写 M文 件 :(1)有 一 个 矩 阵 ,编 程 求 出 其 最 大 值 及 其 所 处 的位 置 .(2)编 程 求(3)有 一 函 数 ,写 一 程 序 ,输入 自 变 量 的 值 ,输 出 函 数 值 .54201 !n n yxyxyxf 2sin),( 2 实 验 作 业 返 回 谢 谢 !
展开阅读全文