M ATLAB 8 问 /9 一. 入 门 篇 MATLAB 有 哪 些 主 要 功 能? 初 学 者 应 如 何 利 用 这 一 数 学 软 件 去 解 决 自 己 的 问 题? 要 解 决 这 些 问 题, 应 该 尽 快 熟 悉 一 些 常 用 命 令, 了 解 它 们 的 功 能 和 使 用 格 式.MATLAB 的 特 点 是 什 么? MATLAB 是 Matrix Laboratory 的 缩 写, 是 Mathworks 公 司 于 984 年 推 出 的 一 套 科 学 计 算 软 件, 分 为 总 包 和 若 干 工 具 箱 具 有 强 大 的 矩 阵 计 算 和 数 据 可 视 化 能 力 一 方 面 可 以 实 现 数 值 分 析 优 化 统 计 偏 微 分 方 程 数 值 解 自 动 控 制 信 号 处 理 系 统 仿 真 等 若 干 个 领 域 的 数 学 计 算, 另 一 方 面 可 以 实 现 二 维 三 维 图 形 绘 制 三 维 场 景 创 建 和 渲 染 科 学 计 算 可 视 化 图 像 处 理 虚 拟 现 实 和 地 图 制 作 等 图 形 图 象 方 面 的 处 理 同 时,MATLAB 是 一 种 解 释 式 语 言. 简 单 易 学 代 码 短 小 高 效 计 算 功 能 强 大 图 形 绘 制 和 处 理 容 易 可 扩 展 性 强. 其 优 势 在 于 : 矩 阵 的 数 值 运 算 数 值 分 析 模 拟 数 据 可 视 化 D/3D 的 绘 图 可 以 与 FORTRAN C/C++ 做 数 据 链 接 几 百 个 核 心 内 部 函 数 大 量 可 选 用 的 工 具 箱 目 前 MATLAB 的 最 新 版 本 是 7. 版, 它 包 括 了 MATLAB 的 各 种 工 具 箱, 功 能 强 大, 适 合 于 较 高 配 置 的 计 算 机 ; 同 学 们 在 安 装 MATLAB 的 时 候, 应 该 根 据 自 己 的 机 器 情 况 选 用 不 同 的 版 本
M ATLAB 8 问 /9. 如 何 启 动 MATLAB? 常 用 的 进 入 MATLAB 方 法 是 鼠 标 双 击 Windows 桌 面 上 的 MATLAB 图 标, 以 快 捷 方 式 进 入 ( 如 果 没 有 图 标, 可 在 桌 面 上 新 建 快 捷 方 式, 将 MATLAB 图 标 置 于 桌 面 ) 下 图 展 示 了 进 入 MATLAB 后 的 工 作 桌 面 ( 窗 口 ), 例 如, 用 键 盘 输 入 正 弦 函 数 符 号 及 其 四 个 不 同 的 自 变 量 π /6,π /5,π /4,π /3, 图 -3 从 开 始 菜 单 进 入 MATLAB 可 计 算 出 对 应 的 函 数 值 第 二 种 进 入 方 法 是 鼠 标 点 击 Windows 桌 面 左 下 角 的 开 始 按 钮, 选 择 程 序, 然 后 在 第 二 级 菜 单 中 选 择 MATLAB, 最 后 再 从 第 三 级 菜 单 中 选 择 MATLAB6.5 进 入 了 MATLAB 系 统, 如 下 图 所 示
M ATLAB 8 问 3/9 在 MATLAB 的 环 境 中, 键 入 quit( 或 exit) 并 回 车, 将 退 出 MATLAB, 返 回 到 Windows 桌 面 也 可 以 用 鼠 标 单 击 MATLAB 命 令 窗 口 右 上 方 的 关 闭 按 钮 退 出 MATLAB 如 果 想 用 计 算 机 做 另 外 的 工 作 而 不 退 出 MATLAB, 这 时 可 以 单 击 MATLAB 命 令 窗 口 右 上 方 的 极 小 化 按 钮, 暂 时 退 出 ( 并 没 有 真 正 退 出 )MATLAB 并 保 留 了 工 作 现 场, 随 时 可 以 单 击 Windows 任 务 栏 ( 屏 幕 下 方 ) 中 的 MATLAB 标 记 以 恢 复 命 令 窗 口 继 续 工 作 3. 如 何 用 MATLAB 计 算 三 角 函 数 值 在 MATLAB 环 境 下, 计 算 三 角 函 数 的 一 个 值 或 一 组 值 非 常 方 便, 只 要 给 定 自 变 量 的 数 据 并 知 道 函 数 名 就 可 以 计 算 出 对 应 函 数 值 常 用 的 三 角 函 数 和 反 三 角 函 数 见 表 - 表 - 常 用 三 角 函 数 函 数 名 称 函 数 名 称 sin(x) 正 弦 函 数 asin(x) 反 正 弦 函 数 cos(x) 余 弦 函 数 acos(x) 反 余 弦 函 数 tan(x) 正 切 函 数 atan(x) 反 正 切 函 数 通 常 MATLAB 自 变 量 采 用 弧 度 制, 例 如 计 算 正 弦 函 数 在 45 ( 即 π / 4 ) 处 的 值, 只 须 在 MATLAB 环 境 下 键 入 sin(pi/4), 计 算 机 屏 幕 将 显 示 出 计 算 结 果 ans =.77 如 果 需 计 算 出 正 弦 函 数 sin 3, sin 45, sin 6 的 值, 可 键 入 x=[pi/6,pi/4,pi/3];sin(x) 计 算 机 屏 幕 将 显 示 计 算 结 果 ans =.5.77.866 这 说 明 MATLAB 可 以 同 时 计 算 出 某 一 函 数 在 多 个 点 处 的 值, 而 且 所 用 的 格 式 与 数 学 书 写 格 式 几 乎 是 完 全 一 致 的 4. MATLAB 有 哪 些 基 本 数 学 函 数? 除 了 三 角 函 数 和 反 三 角 函 数 以 外,MATLAB 的 内 部 函 数 还 包 括 基 本 初 等 函 数 在 内 的 一 些 函 数 这 些 函 数 的 使 用 如 同 正 弦 函 数 一 样, 需 要 给 定 自 变 量 数 据, 然 后 键 入 函 数 名 括 号 自 变 量 名 并 回 车, 便 可 得 对 应 的 函 数 值 数 据 表 -
M ATLAB 8 问 4/9 中 列 出 了 部 分 数 学 函 数 表 - 常 用 基 本 函 数 函 数 名 称 函 数 名 称 abs(x) 绝 对 值 max(x) 最 大 值 min(x) 最 小 值 sum(x) 元 素 的 总 和 sqrt(x) 开 平 方 exp(x) 以 e 为 底 的 指 数 log(x) 自 然 对 数 log(x) 以 为 底 的 对 数 sign(x) 符 号 函 数 fix(x) 取 整 如 果 想 进 一 步 了 解 MATLAB 有 哪 些 函 数, 请 键 入 help matlab\elfun ( 回 车 ) 计 算 机 屏 幕 将 显 示 出 更 多 的 细 节, 其 中 还 有 双 曲 函 数 和 反 双 曲 函 数 等 注 意, 计 算 函 数 值 时 必 须 首 先 确 定 自 变 量 的 数 据 ( 一 个 或 一 组 ) 例 如, 随 机 抽 取 名 大 学 生 的 高 等 数 学 课 程 考 试 成 绩, 并 统 计 他 们 中 的 最 高 分 最 低 分 以 及 这 人 的 平 均 分 可 以 利 用 表 - 中 的 函 数 max min sum 来 实 现 首 先 在 MATLAB 环 境 下 输 入 个 分 数 值 并 赋 值 给 f f=[88,84,73,69,78,8,9,96,86,77] 然 后 分 别 计 算 这 个 数 据 的 最 大 值 最 小 值 平 均 值 : h=max(f) l=min(f) m=sum(f)/ 计 算 机 屏 幕 显 示 最 高 分 h = 96; 最 低 分 l = 69; 平 均 分 m = 8. 虽 然 MATLAB 的 内 部 函 数 已 经 相 当 多, 但 是 还 是 不 能 完 全 满 足 人 们 的 需 求 如 果 需 要 计 算 一 个 复 杂 的 函 数 值, 我 们 必 须 利 用 字 处 理 软 件 编 写 一 个 新 的 函 数 文 件 ( 参 考 下 一 部 分 基 础 篇 ), 才 能 实 现 对 函 数 值 的 计 算 5. 如 何 用 plot 命 令 绘 平 面 图 形? plot 是 MATLAB 的 最 基 本 的 绘 制 二 维 图 形 指 令 其 主 要 功 能 是 根 据 函 数 表 X x x x n Y y y y n 绘 制 出 函 数 的 图 形 用 plot 命 令 绘 图 必 须 要 输 入 自 变 量 的 一 组 值, 并 计 算 出 对 应 的 函 数 值, 其 基 本 调 用 格 式 有 下 面 几 种 : () plot(x,y) 绘 制 出 以 X = [x x x n ] 为 横 坐 标, 以 Y =[y y y n ] 为 纵 坐 标 的 平 面 上 点 的 连 线 图 ;
M ATLAB 8 问 5/9 ()plot(y) 绘 出 以 Y =[y y y n ] 为 纵 坐 标, X =[ n] 为 横 坐 标 的 二 维 图 形 ; (3) plot(x,y,x,y) 同 时 绘 出 两 个 函 数 表 (X, Y) 及 (X, Y) 所 描 述 的 函 数 ; (4) plot(x,y, s ) 中 的 选 项 s 可 以 控 制 图 形 的 颜 色 及 图 形 的 线 方 式 ( 或 点 方 式 ) 表 -3 图 形 控 制 选 项 列 表 线 方 式 点 方 式 颜 色 实 线 - 点. 红 r 虚 线 -- 加 号 + 绿 g 冒 号 : 星 号 * 兰 b 横 点 -. 圆 o 白 w 叉 x 例 如, 要 绘 制 正 弦 函 数 在, ] [ π 内 变 化 的 曲 线, 可 以 先 确 定 出 到 π 之 间, 间 隔 为. 的 一 组 自 变 量 数 据, 然 后 计 算 正 弦 函 数 在 这 些 点 处 的 函 数 值, 最 后 根 据 所 得 数 据 绘 制 出 函 数 图 形 x=:.:*pi;y=sin(x);plot(x,y) 图 - 5 正 弦 函 数 图 形 6. 如 何 在 MATLAB 中 创 建 矩 阵?
M ATLAB 8 问 6/9 计 算 函 数 值 须 输 入 自 变 量 数 据, 计 算 机 程 序 也 必 须 在 数 据 集 合 上 才 能 运 行, 所 以 初 始 数 据 的 输 入 十 分 必 要 在 计 算 机 程 序 设 计 中 人 们 习 惯 将 矩 阵 称 为 二 维 数 组, 将 向 量 称 为 一 维 数 组 向 量 本 质 上 是 一 类 特 殊 的 矩 阵, 矩 阵 可 以 分 解 为 一 系 列 行 向 量 或 列 向 量, 有 限 个 同 维 行 ( 列 ) 向 量 也 可 以 构 成 一 个 矩 阵 MATLAB 以 矩 阵 为 数 据 单 元, 数 据 的 输 入 实 际 上 是 创 建 矩 阵 () 对 于 小 型 矩 阵 的 创 建 可 以 用 方 括 号 方 法 如 : A=[ 3;4 5 6;7 8 9 ]; 就 创 建 了 一 个 3 3 的 矩 阵 注 意 : 矩 阵 中 同 一 行 的 元 素 用 空 隔 或, 隔 开, 行 与 行 之 间 用 分 号 ; 隔 开 也 可 以 用 回 车 换 行 来 代 替 分 号 如 A=[ 3 4 5 6 7 8 9 ]; 仍 然 可 以 创 建 同 样 的 3 3 矩 阵 () 利 用 矩 阵 的 剪 裁 和 拼 装 创 建 新 的 矩 阵 例 如 在 MATLAB 中 键 入 命 令 a=[ 3;4 5 6;7 8 9];b=[;;]; 得 到 矩 阵 和 向 量 3 a = 4 5 6, b = 7 8 9 命 令 A=[a b ], 将 矩 阵 a 和 向 量 b 拼 装 成 新 的 矩 阵 3 A = 4 5 6 7 8 9 而 命 令 a = a(:,:3) 将 得 到 新 的 阶 矩 阵 a = 5 3 6 (3) 对 于 大 型 矩 阵 的 创 建 可 以 用 数 据 文 件 的 方 法 首 先, 用 编 辑 器 编 辑 一 个 数 据 文 件, 在 这 个 文 件 中 逐 行 录 入 矩 阵 的 所 有 数 据 ; 然 后, 在 MATLAB 环 境 下 用 load 指 令 将 这 一 矩 阵 调 入 工 作 空 间 ( 计 算 机 内 存 ) 使 用 这 种 方 法 时 须 注 意, 文 件 名 即 是 变 量 名 例 如, 某 地 区 有 个 气 象 观 测 站, 记 录 了 年 以 来 所 测 得 的 每 年 的 年 降 雨 量 数 据 每 一 个 站 点 的 十 个 数 据 构 成 了 矩 阵 的 一 个 行 向 量, 个 站 点 的 数 据 就 构 成 了 一 个 的 矩 阵 用 编 辑 器 如 记 事 本 编 辑 器 编 辑 这 个 具 有 个 数 据 的 文
M ATLAB 8 问 7/9 件 名 为 a.dat 的 数 据 文 件 的 步 骤 如 下 : 第 一 步 : 在 MATLAB 环 境 中 键 入 edit a.dat ( 回 车 ) 进 入 编 辑 环 境 ; 第 二 步 : 逐 行 录 入 矩 阵 的 所 有 数 据 76. 5.6 9.7 46. 9.7 466.5 58.6 453.4 58.5 34.8; 34.5 87.3 436. 3.4 3. 58.9 37.4 365.5 7. 46.5; 58.6 349.5 89.9 43.7 5.4 3.5 43. 357.6 4. 35.7; 4.5 97.4 366.3 37.5 54. 45. 43.9 58. 344. 88.8; 9.8 7.8 466. 46. 45.6 5.4 56.6 78.8 5. 9.6; 58.4 453.6 39. 58.9 34.8 3. 8.9 467. 36.7 84.9; 334. 3.5 357.4 98.7 4. 35.4 389.7 355. 396.4 9.5; 33. 45. 9.7 34.5 66.5 37.4 43. 8.5 79.4 343.7; 9.9 466. 45.7 56.6 5.3 46.6 466.5 453.6 59. 83.4; 43. 37.5 4. 37. 89.9 77.5 99.3 35.6 34.4 8.; 59.7 4. 357. 96.5 55.4 34. 8. 456.3 33. 43.7; 33. 455. 353. 43. 36. 4.7 387.6 47. 377.7 4. 将 文 件 存 盘 后 退 出 EDIT 环 境, 回 到 MATLAB 环 境 中 第 三 步 : 键 入 load a.dat ( 回 车 ) 便 将 数 据 调 入 内 存 键 入 a ( 回 车 ) 计 算 机 屏 幕 将 显 示 矩 阵 a 的 的 全 部 数 据 7. 创 建 向 量 有 哪 些 方 法? 向 量 在 计 算 机 中 称 为 一 维 数 组, 在 计 算 某 一 函 数 的 一 组 值 时, 需 要 给 定 一 组 自 变 量 的 值, 即 创 建 向 量 () 创 建 向 量 的 通 用 方 法 是 冒 号 法 使 用 格 式 为 x = 初 值 : 步 长 : 终 值 注 意 : 当 初 值 小 于 终 值 时, 步 长 必 须 为 正 数 ; 当 初 值 大 于 终 值 时, 步 长 必 须 为 负 数 当 步 长 为 时, 可 以 省 略 不 写 如 果 初 值 为, 步 长 为, 终 值 为 则 可 以 键 入 x=: 则 创 建 了 向 量 x=[ 3 4 5 6 7 8 9 ] 如 果 初 值 为, 步 长 为.5, 终 值 为 则 可 以 键 入 x=:.5: 则 创 建 具 了 向 量 x=[.5.5 3 8 8.5 9 9.5 ] () 利 用 linspace 和 logspace 指 令 创 建 向 量 命 令 linspace(x,x) 将 产 生 一 个 具 有 个 元 素 的 行 向 量, 这 个 行 向 量 的 元 素 是 介 于
M ATLAB 8 问 8/9 x 和 x 之 间 的 有 限 等 差 数 列, 即 行 向 量 的 第 一 个 元 素 为 x, 最 后 一 个 元 素 是 x 命 令 linspace(x, x, N) 将 产 生 介 于 x 和 x 之 间 的 N 个 点 形 成 的 行 向 量, 向 量 的 第 一 个 元 素 为 x 最 后 一 个 元 素 为 x, 仍 是 等 差 数 列 例 如 x=linspace(,6,8) 将 得 到 介 于 到 6 之 间 的 八 个 元 素 的 行 向 量 x =[..743.486 3.49 3.857 4.574 5.857 6.] logspace(d, d) 将 产 生 具 有 5 个 对 数 等 距 点 的 行 向 量, 其 中 向 量 的 元 素 介 于 d 和 d 之 间 logspace(d, d, N) 将 产 生 N 个 对 数 等 距 点 的 行 向 量 (3) 利 用 已 有 的 矩 阵 剪 裁 方 法 创 建 向 量 例 如, 在 MATLAB 中 用 下 面 的 命 令 A=[ 3;4 5 6;7 8 9 ]; 创 建 了 矩 阵 3 A = 4 5 6 7 8 9 键 入 p = A(,: ), 可 得 行 向 量 p = [ 3] 这 是 矩 阵 A 的 第 一 行 行 向 量 键 入 p = A( :, ), 可 得 列 向 量 p = [ 4 7] T 这 是 矩 阵 A 的 第 一 列 列 向 量 同 理, A(,:) A(3,:) 分 别 得 到 矩 阵 A 的 第 二 行 和 第 三 行 两 个 行 向 量 ; A(:,) A(:,3) 分 别 得 到 矩 阵 A 的 第 二 列 和 第 三 列 两 个 列 向 量 8. 特 殊 符 号 ; 和 : 有 何 用 处? 在 MATLAB 中, 分 号 ; 的 用 处 通 常 有 两 个, 一 是 是 用 于 矩 阵 数 据 输 入 时 将 相 邻 两 行 数 据 分 隔 开 ; 二 是 将 它 用 于 一 条 MATLAB 命 令 之 后, 使 该 命 令 被 执 行 后 所 产 生 的 数 据 结 果 ( 如 果 有 数 据 结 果 ) 不 显 示 在 计 算 机 屏 幕 上 ( 因 为 计 算 机 CPU 运 行 速 度 远 高 于 屏 幕 显 示 速 度, 在 程 序 运 行 时 不 显 示 一 些 中 间 数 据 将 节 约 不 少 时 间 ) 例 如, 在 MATLAB 中 键 入 y=sin(pi/5); 计 算 机 将 计 算 出 正 弦 函 数 在 π / 5 处 的 函 数 值, 并 把 计 算 所 得 的 值 赋 值 给 y, 但 是 计 算 机 屏 幕 上 却 不 显 示 出 任 何 数 据 如 果 想 知 道 y 的 值 是 多 少, 只 须 键 入 y 并 回 车, 屏 幕 上 将 显 示 出 y 的 数 据 在 MATLAB 中 冒 号 : 的 用 处 通 常 也 有 两 个, 一 是 用 于 循 环, 二 是 用 于 矩 阵 的 裁 剪
M ATLAB 8 问 9/9 如, 语 句 x=:6 将 产 生 一 个 具 有 六 个 元 素 的 向 量 x = [ 3 4 5 6] x=:-5: 将 产 生 一 个 具 有 十 九 个 元 素 的 向 量 对 于 矩 阵 x = [ 95 9 5 ] A = 4 7 A(,: ) 表 示 矩 阵 A 的 第 一 行 之 所 有 元 素 形 成 的 行 向 量 3 A( :, ) 则 表 示 矩 阵 A 的 第 一 列 所 有 的 元 素 4 7 形 成 的 列 向 量 而 A(:, :) 则 表 示 矩 阵 A 的 前 两 行 和 前 两 列 的 元 素 形 成 的 阶 矩 阵 4 5 8 5 3 6 9. 如 何 求 解 一 元 n 次 方 程 求 一 元 n 次 方 程 的 根 用 命 令 roots 我 们 都 知 道, 一 元 二 次 方 程 ax + bx + c = 的 求 根 公 式 为 x, = b ± b 4ac a 例 如 对 于 方 程 式 x + 5x + 8 =, 首 先 输 入 系 数, 然 后 按 公 式 计 算 两 个 根 的 值, 在 MATLAB 中 键 入 a=;b=5;c=8; p=sqrt(b^-4*a*c); x=(-b-p)/(*a) x=(-b+p)/(*a) 计 算 机 屏 幕 将 显 示 此 方 程 的 两 个 根 : x = -.5 -.56i x = -.5 +.56i 对 于 高 次 方 程, 比 如 5 次 以 上 的 方 程, 我 们 无 法 用 求 根 公 式 求 解 但 是 用 MATLAB 的 求 多 项 式 零 点 的 命 令 可 以 求 出 高 次 方 程 的 全 部 根 以 上 面 的 例 子 为 例, 只 须 键 入 roots([,5,8]) 并 回 车, 计 算 机 将 显 示 ans =
M ATLAB 8 问 /9 -.5 +.56i -.5 -.56i 这 与 前 面 计 算 结 果 相 同, 由 此 可 知 命 令 roots([,5,8]) 求 出 了 一 元 二 次 方 程 x + 5x + 8 = 的 全 部 根 所 以 对 于 一 个 高 次 代 数 方 程 a L n n x + ax + + an x + an = 用 命 令 roots([a a a n ]) 可 以 求 出 该 n 次 方 程 的 全 部 根. 如 何 求 解 线 性 方 程 组? 当 一 个 方 程 组 Ax=b 有 唯 一 解 时 可 用 指 令 A\b 直 接 求 解, 其 中,A 是 线 性 方 程 组 的 系 数 矩 阵,b 是 方 程 组 的 右 端 向 量 例 如 给 定 线 性 方 程 组 5 3 3 3 x x 5 x 3 x 3 4 4 7 = 可 以 先 输 入 系 数 矩 阵 和 右 端 向 量, 然 后 直 接 求 解, 在 MATLAB 中 键 入 A=[ -; 5 3 -;- - 3 5; 3 3]; b=[4;7;-;]; x=a\b 计 算 机 执 行 后, 将 显 示 数 据 结 果 x= - - 由 此 得 知 方 程 组 的 解 为 x =,x = -,x 3 =,x 4 = - 上 面 这 一 种 方 法 非 常 适 用 于 方 程 组 有 唯 一 解 的 情 形, 在 处 理 实 际 问 题 时, 有 些 方 程 组 有 无 穷 多 组 解, 这 时 可 用 另 一 条 指 令 rref([a b]) 化 简 方 程 组 的 增 广 矩 阵, 然 后 利 用 线 性 代 数 的 方 法 得 出 方 程 组 的 通 解 当 方 程 组 有 唯 一 解 时, 仍 然 可 以 用 这 一 指 令, 例 如 求 解 上 面 例 子 在 MATLAB 中 键 入 A=[ -; 5 3 -;- - 3 5; 3 3]; b=[4;7;-;]; rref([a b])
M ATLAB 8 问 /9 计 算 机 执 行 后, 屏 幕 将 显 示 数 据 结 果 ans = - - 这 一 矩 阵 与 增 广 矩 阵 等 价 (4 个 非 零 行 5 列 ), 由 此 写 出 与 原 方 程 等 价 的 方 程 组, 即 x =,x = -,x 3 =,x 4 = - 如 果 用 rref([a b]) 命 令 得 到 最 后 的 矩 阵 中 非 零 行 数 小 于 列 数 减, 则 可 求 出 线 性 方 程 组 的 通 解 有 关 线 性 方 程 组 的 通 解 和 基 础 解 系 的 概 念 请 参 考 线 性 代 数 教 材. 如 何 求 解 矩 阵 方 程? 在 一 个 矩 阵 方 程 中, 未 知 元 素 是 一 个 矩 阵 线 性 代 数 中 的 矩 阵 方 程 总 可 以 写 成 如 下 两 种 形 式 中 的 一 种 AX = B 或 XA = B 这 里,X 是 未 知 矩 阵, 而 A B 则 是 已 知 的 矩 阵 这 两 种 类 型 的 矩 阵 方 程 的 解 分 别 为 X = A - B 或 X = BA - 在 MATLAB 环 境 中, 可 以 分 别 用 下 面 两 条 命 令 求 解 这 两 类 方 程 X = A\B 或 X = B/A 注 意,A 左 除 B( 用 反 斜 杠 ) 相 当 于 用 A 的 逆 矩 阵 左 乘 矩 阵 B;A 右 除 B( 用 斜 杠 ) 相 当 于 用 A 的 逆 矩 阵 右 乘 矩 阵 B 例 如 求 矩 阵 方 程 可 用 如 下 命 令 A = [ -; ; - ]; B = [ -; ; ]; X = A\B 计 算 机 运 行 后, 显 示 数 据 结 果 X =.8333.5 X =
M ATLAB 8 问 /9 -.667 -.5.6667. 这 就 是 矩 阵 方 程 的 解 显 然,X 是 一 个 3 阶 的 矩 阵 再 例 如, 求 矩 阵 方 程 X = 可 用 如 下 命 令 A = [ -; ; - ]; B = [ - ; ]; X = B/A 计 算 机 运 行 后, 显 示 数 据 结 果 X = -.3333.3333.3333.6667.3333.3333 显 然, 这 一 矩 阵 方 程 的 解 是 一 个 3 的 矩 阵. 如 何 求 一 个 n 阶 行 列 式 的 值? 如 果 已 经 输 入 了 一 个 方 阵 A 的 全 部 数 据, 那 么 只 须 用 命 令 det(a) 就 能 求 出 A 的 行 列 式 的 值 对 于 一 个 特 殊 的 n 阶 行 列 式 的 计 算 必 须 先 分 析 行 列 式 中 数 据 分 布 的 规 律, 用 算 法 产 生 对 应 的 矩 阵 A, 然 后 用 命 令 det(a) 计 算 出 具 体 的 行 列 式 的 值 例 如 对 于 n 阶 行 列 式 3 L L L L L L L L L n 分 析 数 据 分 布 的 规 律 可 知, 对 应 的 矩 阵 主 对 角 元 素 是 3 n, 而 其 余 的 元 素 均 为 另 外, 当 行 列 式 的 阶 数 不 同 时 数 据 结 果 也 不 一 样, 所 以 n 扮 演 参 数 的 角 色 请 参 考 下 面 的 程 序 段 计 算 行 列 式 的 值 n=input('input n=?');
M ATLAB 8 问 3/9 A=*ones(n,n); for k=:n A(k,k)=k; end det(a) 这 里, 第 一 条 语 句 是 要 求 从 键 盘 上 输 入 一 个 n 的 值, 第 二 条 语 句 是 创 建 全 部 元 素 为 的 n 阶 方 阵, 接 下 来 用 for end 语 句 将 方 阵 的 主 对 角 元 修 改 为 3 n, 最 后 用 求 行 列 式 命 令 计 算 并 显 示 出 该 行 列 式 的 值 如 果 将 n 的 值 输 入 为 5, 计 算 结 果 为 -; 如 果 将 n 的 值 输 入 为 6, 则 计 算 结 果 为 -48;, 从 多 次 试 验 的 数 据 结 果 可 以 猜 测 出 本 题 答 案 为 -(n-)! 但 是, 这 样 多 次 使 用 这 段 程 序 计 算 必 须 将 程 序 作 为 一 个 方 件 保 存 在 磁 盘 上, 关 于 MATLAB 的 文 件 操 作 请 参 考 问 题 3. 如 何 使 用 MATLAB 的 在 线 帮 助? MATLAB 的 命 令 非 常 多, 即 使 是 经 常 使 用 这 一 软 件 的 人, 也 会 忘 记 常 用 的 MATLAB 命 令 对 于 记 住 的 一 些 命 令, 在 使 用 时 又 可 能 忘 记 了 格 式 这 时, 可 以 向 MATLAB 系 统 寻 求 帮 助 获 取 MATLAB 指 令 的 帮 助 信 息 有 多 种 方 法, 这 里 介 绍 常 用 的 三 种 () 知 道 命 令 名 称, 不 熟 悉 使 用 格 式, 可 以 用 help 的 命 令 获 得 帮 助, 格 式 如 下 help <MATLAB 的 具 体 指 令 > ( 回 车 ) 例 如 : 键 入 help magic ( 回 车 ) 屏 幕 将 显 示 怎 样 使 用 magic 命 令 求 n 阶 幻 方 MAGIC(N) is an N-by-N matrix constructed from the integers through N^ with equal row and column sums. 根 据 帮 助 信 息, 在 MATLAB 环 境 下 键 入 magic(3) ( 回 车 ), 屏 幕 上 会 出 现 3 阶 幻 方 矩 阵 : 8 6 3 5 7 4 9 这 一 矩 阵 的 每 一 行 元 素 之 和 均 为 5, 每 一 列 元 素 之 和 也 均 为 5 由 此 可 以 体 会 到 magic 这 条 指 令 的 使 用 方 法 以 及 它 的 具 体 功 能 () 知 道 命 令 名 称 的 第 一 个 英 文 字 母, 可 用 鼠 标 选 择 MATLAB 命 令 窗 口 上 方 菜 单 栏 中 的 help 选 项, 再 从 下 拉 菜 单 中 选 择 Index 这 时, 屏 幕 上 将 出 现 MATLAB 的 帮 助 窗 口, 窗 口 首 先 出 现 MATLAB 全 部 命 令 名 称 的 索 引, 索 引 的 命 令 名 按 英 文 字 母 顺 序 排 列 找 到 你 所 需 要 的 命 令 名, 用 鼠 标 单 击 它, 将 会 得 到 该 命 令 的 英 文 帮 助 信 息
M ATLAB 8 问 4/9 (3) 如 果 忘 记 了 所 要 使 用 的 命 令 的 名 称, 可 以 根 据 命 令 的 功 能 属 于 哪 一 类 来 进 行 分 类 的 查 找 MATLAB 的 所 有 命 令 和 语 句 被 划 分 为 3 类 在 MATLAB 环 境 下 键 入 指 令 help ( 回 车 ) 屏 幕 将 显 示 出 关 于 MATLAB 的 3 个 类 的 名 称 toolbox\local 本 地 函 数 库 ( 启 动 MATLAB 时 所 需 的 文 件 ) matlab\datafun 数 据 分 析 和 付 里 叶 变 换 ( 统 计 计 算 离 散 卷 积 快 速 付 里 叶 变 换 ) matlab\elfun 基 本 数 学 函 数 ( 三 角 函 数 双 曲 函 数 指 数 函 数 对 数 函 数 等 ) matlab\elmat 基 本 矩 阵 和 矩 阵 操 作 ( 常 用 矩 阵 特 殊 变 量 和 常 数 时 钟 函 数 ) matlab\funfun 函 数 操 作 非 线 性 数 值 方 法 ( 数 值 积 分 常 微 分 方 程 求 解 等 ) matlab\general 常 用 操 作 命 令 ( 用 于 日 常 管 理 窗 口 控 制 的 命 令 和 变 量 ) matlab\color 色 彩 控 制 和 灯 光 效 果 ( 关 于 图 形 的 色 彩 和 灯 光 效 果 控 制 命 令 ) matlab\graphics 图 形 窗 口 控 制 及 一 般 绘 图 命 令 ( 清 除 保 持 图 形 做 动 画 等 ) matlab\iofun 低 级 文 件 输 入 / 输 出 命 令 ( 打 开 关 闭 文 件, 读 写 二 进 制 文 件 等 ) matlab\lang 语 言 结 构 和 调 试 (MATLAB 编 程 常 用 的 一 些 命 令 和 语 句 ) matlab\matfun 矩 阵 函 数 和 数 值 线 性 代 数 ( 矩 阵 变 换 矩 阵 分 解 特 征 值 等 ) matlab\ops 运 算 符 和 特 殊 符 号 ( 算 术 运 算 逻 辑 运 算 以 及 特 殊 符 号 ) matlab\plotxy 二 维 图 形 绘 图 命 令 ( 绘 制 平 面 图 形 的 各 种 命 令 ) matlab\plotxyz 三 维 图 形 绘 图 命 令 ( 绘 制 空 间 图 形 的 各 种 命 令 ) matlab\polyfun 多 项 式 函 数 与 插 值 函 数 ( 有 关 多 项 式 运 算 以 及 代 数 插 值 样 条 ) matlab\sounds 声 音 处 理 函 数 ( 声 音 的 读 写 变 换 等 ) matlab\sparfun 稀 疏 矩 阵 函 数 ( 稀 疏 矩 阵 的 创 建 图 论 中 的 图 的 绘 制 等 命 令 ) matlab\specfun 特 殊 数 学 函 数 ( 贝 塞 尔 函 数 误 差 函 数 椭 圆 积 分 等 ) matlab\specmat 特 殊 矩 阵 ( 希 尔 伯 特 矩 阵 幻 方 矩 阵 多 项 式 的 伴 随 友 阵 等 ) matlab\strfun 字 符 串 函 数 ( 关 于 字 符 串 的 操 作, 字 符 比 较 字 符 变 换 等 ) matlab\dde 动 态 数 据 交 换 工 具 箱 matlab\demos MATLAB 自 动 演 示 系 统 所 用 的 主 程 序 和 全 部 M 文 件 根 据 分 类 的 信 息, 可 以 再 次 用 help 命 令 例 如 键 入 help elfun 将 获 得 MATLAB 中 全 部 基 本 数 学 函 数 的 清 单 最 后 可 以 用 help 命 令 获 取 具 体 命 令 的 帮 助 信 息 4. MATLAB 有 哪 些 运 算 符 号 及 特 殊 字 符? MATLAB 具 有 其 它 计 算 机 高 级 语 言 ( 如 BASIC FORTRAN C) 所 具 有 的 内 部 函 数 和 用 于 算 术 运 算 和 逻 辑 运 算 的 运 算 符 号 和 关 系 符 号
M ATLAB 8 问 5/9 早 期 的 MATLAB 主 要 是 针 对 矩 阵 进 行 运 算 (MATLAB 的 名 称 来 源 于 矩 阵 实 验 室 ), 所 以 它 还 具 有 一 些 特 殊 的 运 算 符 号 如 点 乘 点 除 点 方 幂 等, 正 是 这 些 特 殊 的 功 能 使 得 这 一 软 件 具 有 高 效 的 编 程 环 境 无 论 是 在 MATLAB 的 交 互 式 环 境 下 使 用 各 种 指 令, 还 是 利 用 批 处 理 进 行 编 程, 这 些 运 算 符 号 和 特 殊 字 符 都 是 使 用 者 所 必 须 熟 悉 的 + 加 法 运 算 适 用 于 两 个 数 相 加 或 两 个 同 阶 矩 阵 相 加 - 减 法 运 算 * 乘 法 运 算 适 用 于 两 个 数 相 乘 或 两 个 矩 阵 相 乘.* 点 乘 运 算 适 用 于 两 个 同 阶 矩 阵 对 应 元 素 相 乘 例 如 : [ 3].*[ ] 其 结 果 为 :[ 4 6]./ 点 除 运 算 例 如 : [ 3]./[ ] 其 结 果 为 :[.5] ^ 乘 幂 运 算 \ 反 斜 杠 表 示 左 除 如, x = A \ B 可 以 得 到 矩 阵 方 程 Ax = B 的 解 pi 数 学 常 数 π 即,3.4596535897...! 惊 叹 号 用 于 后 接 DOS 操 作 命 令 ( 不 退 出 MATLAB 执 行 DOS 命 令 ) 如, 使 用 DOS 的 编 辑 器 EDIT.EXE 编 写 MATLAB 程 序, 可 以 键 入!EDIT <LAB.M> ( 回 车 ) 就 进 入 编 辑 环 境, 编 写 文 件 名 为 LAB.M 的 MATLAB 程 序 == 双 等 号 表 示 相 等 关 系 符 号 另 外, < 和 > 分 别 表 示 小 于 和 大 于 关 系 符 号 % 用 于 注 释 行 开 始 在 程 序 中 某 行 的 第 一 列 加 上 %, 将 不 执 行 这 一 行 & 逻 辑 与 运 算 符 号 另 外, 和 ~ 分 别 表 示 逻 辑 或 和 逻 辑 非 运 算 符 号 ( 注 意 : ~ 这 个 符 号 在 计 算 机 键 盘 左 上 角, 与 ` 在 同 一 键 上 ) 5.WHO 和 CLEAR 有 什 么 用 处? 这 两 条 指 令 主 要 用 于 管 理 MATLAB 的 工 作 空 间 计 算 机 内 存 是 非 常 宝 贵 的 资 源, 如 果 连 续 使 用 MATLAB 的 时 间 较 长, 已 经 创 建 或 产 的 很 多 变 量, 就 会 占 用 相 当 多 的 空 间 而 一 些 过 时 无 用 的 变 量 长 时 间 滞 留 于 内 存, 对 另 外 的 一 些 数 据 产 生 干 扰 这 时, 应 当 清 理 工 作 空 间, 删 除 一 些 过 时 不 用 的 变 量 以 释 放 计 算 机 内 存 这 样 就 可 以 保 持 一 个 正 常 良 好 的 工 作 环 境, 使 工 作 可 以 不 间 断 地 进 行 下 去 指 令 WHO 用 于 显 示 出 当 前 工 作 空 间 中 存 在 的 所 有 变 量 列 表, 而 另 一 指 令 CLEAR 则 可 以 用 于 清 除 多 余 的 变 量 CLEAR x 仅 仅 清 除 变 量 x CLEAR x y z 将 清 除 变 量 x y z 注 意 : 单 独 使 用 CLEAR 将 清 除 掉 所 有 工 作 空 间 的 变 量, 这 样 等 同 于 退 出 MATLAB 再 重 新 进 入 另 外, 指 令 WHOS 不 仅 列 出 当 前 工 作 空 间 中 的 所 有 变 量, 还 将 每 一 变 量 所 占 用 的 空 间 大 小 列 表 显 示 出 来 从 所 显 示 出 的 信 息 还 可 以 得 知 这 些 变 量 中 哪 些
M ATLAB 8 问 6/9 是 矩 阵, 哪 些 是 向 量, 哪 些 是 单 个 的 数 据 6. 如 何 用 MATLAB 绘 制 标 志 的 图 形? MATLAB 软 件 系 统 的 图 标 的 雏 形 是 二 元 函 数 ( x y ) f ( x, y) = e +. 3 x 8., 5. y 5. 所 对 应 曲 面 图 形 这 一 曲 面 图 形 和 MATLAB 的 系 统 图 标 有 一 些 微 小 的 差 别 在 MATLAB 环 境 中 键 入 如 下 指 令 x= -.3:.:.8;y=x+.8; % 确 定 离 散 点 横 坐 标 和 纵 坐 标 [x,y] = meshgrid(x,y); % 产 生 二 元 函 数 自 变 量 域 的 离 散 点 z=exp(-(x.^+y.^)); % 计 算 各 离 散 点 处 函 数 值 z(:3,:4)=zeros(3,4); % 修 改 部 分 函 数 值 为 零 mesh(z) % 根 据 离 散 点 处 函 数 值 绘 图 这 五 行 指 令 被 计 算 机 执 行 后, 屏 幕 上 将 显 图 -6 中 的 图 形 Mesh 是 绘 制 曲 面 的 命 令, 具 体 使 用 格 式 请 参 考 问 题 47 图 -6 系 统 标 志 图 形
M ATLAB 8 问 7/9 7. 如 何 保 存 计 算 所 得 的 数 据 结 果? 保 存 数 据 结 果 是 非 常 有 用 的, 例 如 第 6 问 题 中 通 过 计 算 获 得 了 图 -6 中 曲 面 上 各 点 处 的 高 度 值, 这 些 数 据 以 变 量 z 的 名 义 保 存 在 计 算 机 内 存 中, 一 旦 退 出 MATLAB, 变 量 z 所 含 的 数 据 就 会 丢 失 在 这 种 情 况 下 可 用 命 令 save date z 将 变 量 z 的 数 据 保 存 在 磁 盘 上, 下 一 次 使 用 MATLAB 时 用 命 令 load date 将 所 保 存 的 数 据 从 磁 盘 上 调 入 内 存, 可 以 再 次 使 用 这 里,date 是 数 据 文 件 名 Save 命 令 的 具 体 使 用 格 式 如 下 save 文 件 名 变 量 名 变 量 名 变 量 名 n ( 回 车 ) 如 果 将 文 件 名 取 为 date, 则 MATLAB 将 在 磁 盘 上 产 生 一 个 文 件, 文 件 名 为 date.mat, 这 一 文 件 保 存 了 变 量 变 量 变 量 n 这 n 个 变 量 的 数 据 使 用 这 一 命 令 时 缺 省 了 变 量 名, 即 只 用 命 令 save date, 则 MATLAB 会 将 当 前 工 作 空 间 中 所 有 的 变 量 ( 数 据 ) 保 存 在 文 件 date.mat 中 将 数 据 恢 复 ( 即 从 磁 盘 上 将 数 据 读 入 内 存 ) 所 用 命 令 的 格 式 如 下 load 文 件 名 ( 回 车 ) 如 果 执 行 命 令 load date,matlab 会 将 date.mat 文 件 中 所 含 变 量 ( 数 据 ) 调 入 工 作 空 间 8. 如 何 观 看 MATLAB 的 入 门 演 示?
M ATLAB 8 问 8/9 在 MATLAB 的 命 令 窗 口 中 键 入 demos 并 回 车, 将 进 入 下 图 所 示 的 help 窗 口 初 学 者 在 观 看 入 门 演 示 中 将 获 得 MATLAB 的 基 础 知 识 用 鼠 标 点 击 窗 口 左 栏 选 项 ( 如 Graphics), 将 展 开 可 选 的 演 示 项 ( 见 上 图 ). 再 用 鼠 标 点 击 需 要 了 解 的 内 容, 再 右 栏 点 击 run this demo, 将 进 入 示 例 演 示 程 序, 同 时 matlab 的 基 本 命 令 及 使 用 方 法 将 显 示 在 迷 你 命 令
M ATLAB 8 问 9/9 窗 口 里 下 面, 我 们 以 3-D Plots 为 例 演 示 操 作 步 骤. 从 这 些 基 本 指 令 的 介 绍 中, 你 可 以 看 到 MATLAB 用 于 数 值 计 算 和 图 形 绘 制 的 强 大 功 能 和 易 学 易 用 的 特 点 Demo 中 每 一 步 的 观 看 可 用 鼠 标 操 作, 初 学 者 可 以 多 做 一 些 尝 试 以 获 得 对 数 学 软 件 MATLAB 的 初 步 印 象, 点 击 close 会 关 闭 演 示. 9. 如 何 将 MATLAB 计 算 结 果 保 存 到 WORD 文 稿 中? WORD 是 微 软 公 司 出 品 的 一 个 优 秀 文 字 处 理 软 件, 除 了 可 以 方 便 输 入 中 英 文 文 字 和 编 辑 排 版 外, 它 的 另 一 优 点 就 是 能 快 速 编 辑 数 学 公 式 目 前 世 界 上 很 多 科 技 工 作 者 都 用 这 一 软 件 写 作 论 文 为 了 保 证 数 据 结 果 的 正 确 性, 在 MATLAB 与 WORD 之 间 进 行 数 据 传 送 是 很 重 要 的 数 据 传 送 应 该 是 双 向 进 行, 传 送 的 意 义 包 括 两 方 面 一 是 将 MATLAB 工 作 环 境 中 计 算 获 得 的 数 据 结 果 快 速 而 且 准 确 无 误 地 保 存 到 WORD 文 稿 中 二 是 检 验 WORD 文 稿 中 某
M ATLAB 8 问 /9 一 数 据 结 果, 如 积 分 值 方 程 的 根 等 是 否 正 确 这 两 种 传 送 都 可 以 利 用 Windows98 中 剪 贴 板 的 粘 贴 功 能 实 现 通 常 用 得 较 多 的 是 第 一 种 数 据 传 送, 即 由 MATLAB 到 WORD 的 数 据 单 向 传 送 数 据 结 果 可 以 是 单 独 一 个 的 数 据, 也 可 以 是 多 个 数 据 ( 向 量 或 矩 阵 ), 具 体 的 操 作 如 下 () 在 MATLAB 命 令 窗 口 中, 将 数 据 结 果 选 定 ; () 在 MATLAB 命 令 窗 口 上 方 菜 单 栏 中, 用 鼠 标 单 击 EDIT, 在 下 拉 菜 单 中 选 择 COPY ; (3) 切 换 到 WORD 文 稿 的 窗 口, 将 光 标 移 到 数 据 应 该 出 现 的 位 置 ; (4) 用 鼠 标 单 击 WORD 工 具 栏 上 的 粘 贴 按 钮 例 如, 计 算 定 积 分 π sin x dx 的 值 在 MATLAB 窗 口 中 键 入 quat( sin,,pi), 并 回 车, 得 ans = 据 的 单 向 传 送. 按 上 面 四 步 操 作 将 数 据 结 果 粘 贴 到 WORD 文 稿 中, 这 是 单 个 数 我 们 可 以 利 用 WORD 所 带 的 公 式 编 缉 器 输 入 符 号 π sin xdx =, 然 后 将 积 分 的 数 据 结 果 从 MATLAB 命 令 窗 口 中 粘 贴 到 等 号 后 面 得 图 -7 选 定 MATLAB 命 令 窗 口 中 的 数 据 π sin xdx =. 也 可 以 按 上 面 介 绍 的 操 作 步 骤, 将 MATLAB 计 算 所 得 的 多 个 数 据 结 果 粘 贴 至 WORD 文 稿 中 的 合 适 位 置, 然 后 用 WORD 的 编 辑 功 能 将 数 据 转 换 为 表 格 在 WORD 工 作 窗 口 中, 用 鼠 标 将 粘 贴 而 来 的 多 个 数 据 选 定, 然 后 选 择 表 格 菜 单 中 的 将 文 字 转 换 成 表 格 即 可 完 成 这 项 工 作 例 如 计 算 下 列 函 数 值
M ATLAB 8 问 /9 f ( x ) = j x j exp( π t ) dt,( x =,x =,x 3 =3 ) 可 以 用 MATLAB 计 算 出 三 个 函 数 值 并 粘 贴 后, 在 WORD 文 稿 中 创 建 下 面 表 格 表 -5 x 3 f (x).343.477.4987 表 格 的 具 体 操 作 请 参 考 WORD 的 有 关 书 籍, 如 表 格 居 中 表 格 内 各 单 元 的 文 字 符 号 居 中 表 格 中 各 单 元 的 高 度 和 宽 度 设 置 值 的 调 整 结 合 这 些 命 令 可 以 制 做 出 美 观 大 方 的 数 据 表 格. 如 何 将 MATLAB 所 绘 图 形 置 入 WORD 文 稿 文 字 处 理 软 件 WORD 的 另 一 个 突 出 的 优 点 就 是 图 文 混 排, 我 们 可 以 在 WORD 文 稿 中 置 入 图 形 图 片, 使 得 WORD 所 编 辑 的 文 稿 丰 富 多 彩 而 MATLAB 的 绘 制 图 形 功 能 可 以 很 方 便 地 绘 出 函 数 的 图 形, 或 由 数 据 结 果 绘 出 所 需 要 的 空 间 曲 线 图 形 统 计 直 方 图 复 杂 的 二 维 曲 面 图 等 等 这 些 图 形 都 显 示 在 MATLAB 的 图 形 窗 口 中, 我 们 可 以 通 过 Windows98 的 剪 贴 板 功 能 将 图 形 直 接 粘 贴 到 WORD 文 稿 中 例 如 已 知 曲 线 的 方 程 为 y = e.5x sin 5x 现 绘 制 对 应 的 曲 线 图 形 在 MATLAB 命 令 窗 口 中 键 入 x=:.:8; y=exp(-.5*x).* sin(5*x); plot(x,y) MATLAB 的 图 形 窗 口 中 将 绘 出 衰 减 振 荡 曲 线 为 了 将 图 形 置 入 WORD 文 稿 中, 可 以 按 如 下 操 作 进 行 () 在 MATLAB 的 图 形 窗 口 中 用 鼠 标 单 击 菜 单 栏 中 的 Edit, 在 下 拉 菜 单 中 选 择 Copy ; () 切 换 到 WORD 文 稿 的 编 辑 窗 口, 用 鼠 标 单 击 菜 单 栏 中 的 插 入 菜 单, 在 下 拉 菜 单 中 选 择 文 本 框, 横 排 ; (3) 将 鼠 标 光 标 ( 十 字 架 ) 移 到 文 稿 中 适 当 的 位 置 处, 按 住 鼠 标 左 键 向 右 下 方 拖 动, 出 现 文 本 框 ;
M ATLAB 8 问 /9 (4) 用 鼠 标 单 击 WORD 工 具 栏 上 的 粘 贴 按 钮 此 时,MATLAB 绘 制 出 的 图 形 就 被 置 入 WORD 文 稿 的 文 本 框 中 注 意 :MATLAB 图 形 窗 口 背 景 是 黑 色, 如 果 事 先 将 曲 线 颜 色 设 置 为 白 色, 图 片 粘 贴 到 WORD 文 稿 后 自 动 反 色, 将 得 到 白 色 背 景 的 黑 色 曲 线 图 形 图 -8 在 MATLAB 图 形 窗 口 中 选 择 图 形 拷 贝 将 图 形 粘 贴 到 WORD 文 稿 的 文 本 框 内 后, 可 以 设 置 文 本 框 格 式, 如 文 本 框 边 框 的 颜 色 文 本 框 的 环 绕 方 式 等, 有 关 操 作 请 参 考 有 关 WORD 的 书 籍.8.6.4. -. -.4 -.6 图 -9 粘 贴 到 WORD 文 稿 中 的 图 形
M ATLAB 8 问 3/9 二. 基 础 篇 用 MATLAB 解 决 一 般 的 数 学 问 题 时 应 熟 悉 最 基 本 的 命 令, 如 求 积 分 求 函 数 极 值 求 解 常 微 分 方 程 初 值 问 题 以 及 绘 制 函 数 图 形 等 等 有 时, 为 了 研 究 函 数 需 要 编 辑 函 数 文 件, 为 了 提 高 解 决 问 题 的 效 率 需 要 编 写 程 序, 这 些 正 是 本 篇 要 介 绍 的. 什 么 是 MATLAB 的 命 令 操 作 方 式? 所 谓 命 令 操 作 方 式 就 是 常 用 的 简 单 操 作 方 式 为 了 完 成 一 个 作 业, 用 户 在 MATLAB 的 命 令 窗 口 中 键 入 一 条 ( 或 几 条 ) 命 令, 计 算 机 执 行 后 显 示 出 计 算 结 果 用 户 观 察 结 果 后, 修 改 或 重 新 输 入 命 令, 计 算 机 再 次 执 行, 再 次 输 出 数 据 结 果 这 种 操 作 方 式 也 称 为 交 互 式 操 作 方 式 或 人 机 对 话 方 式 它 的 特 点 是 () 计 算 机 处 理 及 时 当 用 户 输 入 数 据 或 键 入 MATLAB 指 令 时, 计 算 机 将 即 时 接 受 及 时 处 理, 给 出 计 算 结 果, 并 等 待 人 工 的 下 一 步 操 作 () 人 工 干 预 性 强 完 成 作 业 过 程 中 的 每 一 步 都 需 人 工 键 入 命 令, 即 使 数 据 有 误 或 某 一 指 令 输 入 有 错, 也 可 以 重 新 调 出 前 次 或 再 前 次 的 操 作 指 令 进 行 修 改 后 重 新 执 行 例 如 用 海 伦 公 式 计 算 三 角 形 面 积 已 知 ΔABC 的 三 条 边 长 分 别 为 a = 3, b = 5, c = 7 由 海 伦 公 式, 三 角 形 面 积 为 S = p( p a)( p b)( p c) 其 中,p=(a + b + c)/ 为 三 角 形 半 周 长 在 MATLAB 命 令 窗 口 中 键 入 a=3, b=5, c=7 p=(a + b + c)/ % 输 入 三 条 边 的 长 度 % 计 算 三 角 形 半 周 长 s=sqrt(p*(p-a)*(p-b)*(p-c)) % 计 算 三 角 形 面 积 每 键 入 一 行 命 令, 计 算 机 都 会 显 示 出 计 算 结 果 p = 7.5,s = 6.495 这 说 明, 边 长 为 a = 3, b = 5, c = 7 的 三 角 形 的 半 周 长 为 7.5, 面 积 为 6.495 MATLAB 的 命 令 窗 口 中 命 令 的 输 入 是 行 编 辑 方 式, 可 以 在 一 个 命 令 行 上 输 入 一 条 命 令, 也 可 以 在 一 个 命 令 行 上 输 入 几 条 命 令 当 用 户 输 入 一 条 命 令 后 再
M ATLAB 8 问 4/9 击 回 车 键,MATLAB 将 执 行 这 条 命 令, 当 命 令 正 确 无 误 将 显 示 正 确 的 结 果, 当 命 令 有 误 将 给 出 错 误 信 息 如 果 在 一 个 命 令 行 上 同 时 输 入 两 条 以 上 的 命 令, 则 应 在 指 令 和 指 令 之 间 用 逗 号, ( 或 分 号 ; ) 隔 开, 输 入 完 最 后 一 条 命 令 后 击 回 车 键,MATALAB 将 按 先 后 顺 序 逐 条 执 行 这 一 命 令 行 上 的 每 一 命 令 注 意, 如 果 在 某 一 条 指 令 结 束 处 用 了 分 号, 则 MATLAB 执 行 该 指 令 后 计 算 所 得 的 数 据 结 果 将 不 会 在 屏 幕 上 显 示 出 来 表 - 列 出 了 MATLAB 命 令 窗 口 中 常 用 的 一 些 热 键, 使 用 这 些 热 键, 可 在 MATLAB 的 环 境 中 充 分 发 挥 行 编 辑 功 能, 提 高 解 决 问 题 的 效 率 表 - 热 键 功 能 热 键 功 能 重 调 出 前 一 命 令 Home 光 标 移 行 首 重 调 出 下 一 命 令 End 光 标 移 行 尾 光 标 左 移 一 个 字 符 Esc 擦 掉 当 前 行 光 标 右 移 一 个 字 符 Ins 在 光 标 处 插 入 ^ 右 移 一 个 字 Del 删 除 光 标 处 字 符 ^ 左 移 一 个 字 Backspace 删 除 光 标 左 字 符. 什 么 是 MATLAB 的 文 件 操 作 方 式? 文 件 操 作 方 式 主 要 是 指 编 写 MATLAB 程 序, 然 后 在 MATLAB 环 境 中 执 行 程 序, 如 果 程 序 正 确, 最 后 可 获 得 计 算 的 数 据 结 果 程 序 是 静 态 实 体, 以 文 件 方 式 存 入 在 磁 盘 上 在 MATLAB 桌 面 上 点 击 File 按 钮, 在 下 拉 菜 单 中 选 择 new, 从 而 新 建 m 文 件, 进 入 Editor 进 行 文 件 操 作 ; 也 可 以 利 用 文 字 处 理 软 件 如 DOS 系 统 中 的 屏 幕 编 辑 软 件 EDIT.EXE 或 Windows 中 的 记 事 本 NOTEPAD, 在 字 处 理 软 件 的 编 辑 窗 口 编 写 程 序 ( 输 入 MATLAB 的 命 令 ), 当 程 序 编 写 好 之 后 将 其 保 存 在 MATLAB 的 工 作 目 录 下 ( 程 序 的 文 件 名 以.m 为 后 缀 ); 然 后 切 换 到 MATLAB 的 命 令 窗 口 执 行 程 序 让 MATLAB 执 行 程 序 时, 只 须 键 入 该 程 序 的 文 件 名 即 可 这 种 文 件 操 作 方 式 又 称 为 批 处 理 操 作 方 式, 其 特 点 有 : () 自 动 性 在 顺 利 的 情 况 下 ( 机 器 运 行 正 常 程 序 编 写 无 误 ), 程 序 中 的 一 批 指 令 能 自 动 地 逐 个 被 执 行, 无 须 人 工 干 预
M ATLAB 8 问 5/9 () 顺 序 性 程 序 中 的 各 条 指 令 是 按 先 后 顺 序 被 MATLAB 所 执 行, 各 条 指 令 执 行 的 顺 序 与 它 们 在 程 序 中 的 顺 序 是 完 全 相 同 的 例 如 用 海 伦 公 式 计 算 三 角 形 面 积 的 作 业 可 以 编 写 MATLAB 的 程 序 来 完 成 在 MATLAB 的 命 令 窗 口 中 键 入 : edit herno.m ( 回 车 ) 此 时 将 进 入 文 字 编 辑 环 境, 在 这 一 环 境 中 输 入 以 下 几 行 命 令 a=input('put a='); b=input('put b='); c=input('put c='); p=(a+b+c)/; s=sqrt(p*(p-a)*(p-b)*(p-c)) 输 入 完 成 后, 将 这 一 文 件 ( 文 件 名 为 herno.m) 保 存 在 当 前 目 录 下, 退 出 文 字 编 辑 环 境 回 到 MATLAB 的 命 令 窗 口, 只 须 键 入 文 件 名 herno( 不 须 后 缀 m) 并 回 车,MATLAB 将 自 动 执 行 上 面 的 五 行 命 令 前 三 行 命 令 是 从 键 盘 输 入 三 角 形 的 三 条 边 长 数 据, 最 后 一 条 命 令 是 用 边 长 和 半 周 长 计 算 三 角 形 面 积 并 将 计 算 结 果 显 示 在 计 算 机 的 屏 幕 上 根 据 屏 幕 出 现 提 示 信 息, 依 次 输 入 三 个 数 据 : 3( 回 车 ) 4( 回 车 ) 5( 回 车 ) 计 算 机 运 行 后, 显 示 所 求 三 角 形 面 积 :s = 6. MATLAB 的 程 序 实 际 上 是 一 个 有 序 的 指 令 集 合, 所 以 这 种 操 作 方 式 又 称 为 批 处 理 方 式 批 处 理 方 式 实 际 上 是 从 第 一 条 指 令 开 始, 按 顺 序 连 续 执 行 指 令 集 合 中 的 各 条 指 令, 直 到 最 后 一 条 指 令 执 行 完 毕 如 果 程 序 中 某 一 条 指 令 有 错, 将 输 出 出 错 信 息, 并 停 止 程 序 的 执 行 如 果 一 个 程 序 中 有 n 条 指 令,MATLAB 批 处 理 操 作 方 式 的 工 作 流 程 将 如 图 - 所 示 b C a A c B 图 -
M ATLAB 8 问 6/9 k k k+ 置 第 k 条 指 令 为 当 前 指 N 当 前 指 令 正 确 Y 执 行 当 前 指 k=n Y 结 束 N 输 出 错 误 信 息, 退 出 图 - 批 处 理 方 式 的 工 作 流 程 图 3. 如 何 编 缉 MATLAB 的 函 数 文 件 由 于 MATLAB 内 部 函 数 有 限, 为 了 研 究 某 一 个 函 数 的 各 种 性 态 ( 极 大 极 小 值 积 分 值 等 ) 需 要 为 MATLAB 定 义 新 函 数, 为 此 必 须 编 写 函 数 文 件 函 数 文 件 的 文 件 名 也 是 以.m 为 后 缀, 这 类 文 件 的 第 一 行 必 须 以 字 符 function 开 始, 格 式 如 下 function 因 变 量 名 = 函 数 名 ( 自 变 量 名 ) 函 数 体 MATLAB 函 数 文 件 第 一 行 特 殊 字 符 及 格 式 决 定 了 它 与 一 般 MATLAB 程 序 的 区 别, 函 数 体 主 要 是 根 据 函 数 结 构 由 形 式 自 变 量 计 算 所 得 结 果 赋 值 给 因 变 量 为 了 区 别,MATLAB 的 程 序 一 般 又 称 为 非 函 数 文 件, 尽 管 函 数 文 件 和 非 函 数 文 件 都 是 以. m 为 文 件 名 的 后 缀, 但 两 种 文 件 不 能 混 在 一 起, 函 数 和 程 序 不 能 编 写 在 一 个 文 件 中 可 以 在 命 令 窗 口 中 或 程 序 中 调 用 已 编 辑 好 的 函 数 例 如 为 了 研 究 函 数 f ( x) = ( x ) + + ( x ) +
M ATLAB 8 问 7/9 的 极 值 点, 首 先 要 编 写 MATLAB 能 识 别 的 函 数 文 件 在 Matlab 环 境 下 用 鼠 标 点 击 菜 单 栏 上 的 File, 并 在 下 拉 菜 单 中 选 择 new M-file 将 进 入 Matlab 的 EDITOR 环 境, 在 其 中 录 入 下 列 两 行 : function yy=f(x) yy=sqrt((x-).^+^)+sqrt((x- 65 ).^+^); 注 意, 函 数 名 和 文 件 名 相 同, 6 均 是 f 另 外,x 是 函 数 中 的 自 变 55 量, 而 yy 是 函 数 因 变 量 函 数 定 义 中 实 际 上 是 将 自 变 量 数 据 经 过 5 计 算 并 赋 值 给 因 变 量 因 为 自 变 量 45 数 据 一 般 是 数 组, 故 涉 及 自 变 量 的 乘 法 和 方 幂 均 应 该 用 点 乘 和 点 方 幂 录 入 完 毕 后, 将 文 件 存 盘 并 退 出 EDIT, 然 后 重 新 回 到 MATLAB 环 境 下 这 时, 可 用 指 令 x=:;y=f(x); 4 4 6 8 plot(x,y) 图 -3 确 定 自 变 量 值 并 计 算 对 应 的 函 数 值 数 据, 最 后 再 绘 出 函 数 的 图 形 ( 图 -3), 从 图 形 可 以 得 知, 该 函 数 有 一 个 极 小 值 点 大 约 在 x = 65 处 也 可 以 用 指 令 x=6:7;y=f(x) 计 算 出 当 自 变 量 取 6,6,6,,7 时, 对 应 的 函 数 值 数 据 为 : 4.8674 4.7985 4.7436 4.77 4.6756 4.663 4.663 4.6774 4.757 4.7477 4.834 显 然, 第 六 个 数 据 4.663 最 小 这 正 是 该 函 数 在 x = 65 处 的 函 数 值 如 果 函 数 的 结 构 比 较 简 单, 可 以 使 用 inline 函 数 在 内 存 中 定 义 一 个 临 时 函 数. 例 如, 我 们 计 算 一 个 半 径 为 R 的 圆 内 正 n 边 形 面 积. 取 α = π / n ( 见 图 -4), 根 据 面 积 公 式 有 π π S ( n ) = R n sin cos n n 令 R=, 在 Matlab 的 命 令 窗 口 中 键 入 S=inline( n*sin(pi/n)*cos(pi/n), n ) [s(3),s(6),s(),s(),s(),s(5),s()]
M ATLAB 8 问 8/9 可 得 下 面 一 系 列 数 据.99.598 3. 3.395 3.4 3.45 3.46 由 此 可 见, 多 边 形 面 积 逐 步 逼 近 圆 面 积, 即 有 lim S( n) = πr n 图 -4 4. 什 么 是 MATLAB 中 的. 运 算 为 了 使 两 个 同 维 的 矩 阵 ( 或 向 量 ) 的 每 一 对 元 素 同 时 作 相 同 的 运 算, 可 以 用 这 种. 运 算, 又 称 为 按 元 素 运 算 在 编 写 MATLAB 的 函 数 文 件 时, 为 了 同 时 计 算 出 函 数 在 一 组 自 变 量 数 据 处 的 值, 一 般 都 要 用 到 这 种. 运 算 如 果 在 一 个 函 数 文 件 中, 只 用 一 般 的 乘 除 乘 幂 运 算 而 不 用 点 运 算, 这 样 的 函 数 一 次 只 能 计 算 单 个 自 变 量 数 据 的 值 例 如, 下 面 两 个 矩 阵 3 A = 4 5 6, B = 7 8 9 做 点 运 算, 可 以 分 别 考 虑 点 乘 点 除 和 点 乘 幂 三 种 运 算 () 点 乘. * ( 按 元 素 乘 ) 运 算 A.*B 实 际 所 做 运 算 为 计 算 结 果 为 4 7 3 5 8 3 3 3 6 9 3 ans = 3 8 4 7 () 点 除. / 或. \ ( 按 元 素 右 除 或 按 元 素 左 除 ) 运 算 A. /B 或 A.\B 计 算 结 果 为 ans = ans = 3 3
M ATLAB 8 问 9/9.. 3...5.3333..5 3..5.4.3333.3333.6667 3..486.375.3333 (3) 点 乘 幂. ^ ( 按 元 素 乘 幂 ) 运 算 A.^B 计 算 结 果 为 ans = 3 6 5 36 343 5 79 如 果 欲 求 B 矩 阵 的 每 个 元 素 的 倒 数 形 成 的 同 型 矩 阵, 应 该 用 命 令. /B 而 不 能 用 / B. / B 的 计 算 结 果 为 ans = / / / /3 /3 /3 5. 如 何 建 立 和 使 用 自 己 的 工 作 目 录? MATLAB 安 装 成 功 以 后, 在 硬 盘 上 将 形 成 一 个 MATLAB 目 录 ( 从 WINDOWS 桌 面 我 的 电 脑 进 入 C 盘 可 看 到 一 个 MATLAB 文 件 夹 ), 在 这 一 目 录 中 包 含 了 四 个 子 目 录, 其 中 子 目 录 \work 非 常 重 要, 它 包 含 了 MATLAB 系 统 运 行 文 件 帮 助 文 件 以 及 一 些 必 要 的 二 进 制 文 件 当 我 们 进 入 MATLAB 后,C:\MATLAB\WORK 将 自 动 成 为 当 前 目 录 用 户 如 果 不 加 修 改, 那 么 我 们 在 MATLAB 工 作 环 境 下 所 创 建 的 所 有 函 数 程 序 以 及 产 生 的 数 据 文 件 等 等, 都 将 保 存 在 这 一 当 前 目 录 下 为 了 管 理 好 自 己 的 M 文 件 和 其 它 文 件, 用 户 应 该 建 立 和 使 用 自 己 的 工 作 目 录 例 如 在 C 盘 上 建 立 一 个 名 为 USER 的 目 录, 将 用 户 自 己 的 文 件 都 存 放 在 这
M ATLAB 8 问 3/9 一 目 录 中 将 会 大 有 好 处 具 体 操 作 如 下 : () 从 Windows 桌 面 我 的 电 脑 进 入 C 盘 ; () 用 鼠 标 选 择 屏 幕 上 方 文 件 菜 单 中 的 新 建 文 件 夹,C 盘 上 将 出 现 一 个 名 为 新 建 文 件 夹 的 文 件 夹 ; (3) 将 新 建 文 件 夹 改 名 为 USER 这 时 用 户 在 C 盘 上 有 了 自 己 的 工 作 目 录 :USER 为 了 使 用 自 己 的 工 作 目 录, 在 进 入 MATLAB 后, 在 MATLAB 环 境 下 键 入 以 下 命 令 : CD C:\USER ( 回 车 ) 就 将 用 户 目 录 指 定 为 MATLAB 当 前 工 作 目 录 系 统 的 当 前 目 录 不 再 是 C: \MATLAB\BIN 而 是 C:\USER 以 后 用 户 在 MATLAB 环 境 下 工 作 时 所 创 建 的 所 有 函 数 程 序, 保 存 的 变 量 ( 数 据 ) 也 都 将 存 放 在 这 一 目 录 下 6. 如 何 绘 制 函 数 sin x y( x) = 的 图 形? x sin x 考 察 微 积 分 中 重 要 的 函 数 极 限 之 一, 即 y( x) = 当 x 趋 于 零 时 的 极 限 x 绘 制 该 函 数 图 形 的 困 难 之 处 在 于 当 x= 时, 分 母 为 零 由 于 该 函 数 在 零 点 的 极 限 值 为, 故 当 x 接 近 于 时, 有 y ( x) 可 补 充 定 义 函 数 如 下 sin x / x, f ( x) =, x x = 为 了 避 免 分 母 为 零, 可 作 如 下 特 殊 处 理, 在 操 作 时 将 x = 处 理 为 非 常 接 近 于 零 的 数, 使 其 误 差 可 忽 略 不 计 为 了 达 到 这 一 效 果 可 以 借 用 MATLAB 中 的 一 个 特 殊 常 数 eps = 6 ( 浮 点 数 的 相 对 误 差 ), 将 所 有 自 变 量 的 离 散 数 据 统 一 都 加 上 eps 这 样 既 使 得 x 在 零 点 处 的 值 只 是 机 器 数 零, 又 使 得 x 在 其 它 点 处 的 值 不 会 与 正 确 值 有 较 大 的 误 差 可 以 用 如 下 程 序 段 绘 图 x=-:.5:;x=x+eps; % 取 x 的 离 散 值 并 做 特 殊 处 理 y=sin(x)./x; % 计 算 对 应 的 函 数 值 plot(x,y) % 根 据 函 数 的 离 散 数 据 绘 图 计 算 机 运 行 后,MATLAB 的 图 形 窗 口 将 出 现 图 -4 中 的 曲 线 图 形
M ATLAB 8 问 3/9 图 -4 函 数 y=sin x / x 的 图 形 x 7. 如 何 绘 制 函 数 y ( x) = ( + ) 的 图 形? x x 另 一 个 重 要 的 函 数 极 限 是 y ( x) = ( + ) 当 x 趋 于 无 穷 大 时 的 极 限, 即 x x lim ( + ) = e.7884695643 x x 由 于 y () =.7884695643, 故 这 一 数 据 可 以 用 作 该 极 限 的 近 似 值 表 - 给 出 了 五 个 点 处 的 函 数 值 数 据, 显 然 当 x 在 以 内 时, 函 数 值 变 化 很 大 ; 而 当 x 在 到 范 围 内 时, 函 数 值 变 化 较 小 所 以 在 取 有 限 个 自 变 量 数 据 时 应 选 取 自 变 量 点 的 间 隔 为 对 数 步 长, 即 当 x 的 值 越 大 时 离 散 点 的 间 隔 越 大 表 - x y.5937.748.769.78.783 为 了 用 有 限 个 点 的 函 数 值 绘 出 较 为 光 滑 的 函 数 曲 线 图 形, 可 利 用 MATLAB 中 的 对 数 步 长 命 令 产 生 自 变 量 的 离 散 数 据 用 下 面 程 序 段 绘 图 x=logspace(,3); % 取 到 之 间 有 限 个 对 数 步 长 的 自 变 量 值 y=(+ones(size(x))./x).^x; % 计 算 对 应 的 函 数 值 数 据 plot(x,y) % 绘 图
M ATLAB 8 问 3/9 计 算 机 运 行 后,MATLAB 的 图 形 窗 口 将 出 现 图 -5 中 的 图 形 x 图 -5 函 数 y = ( + / x) 的 图 形 8. 如 何 计 算 定 积 分 b a f ( x) dx 的 值? MATLAB 中 求 定 积 分 的 指 令 为 quad, 具 体 使 用 这 一 命 令 的 格 式 为 quad( 函 数 名, a, b) 使 用 中, 要 用 到 被 积 函 数 的 调 用, 也 要 注 意 给 定 积 分 上 下 限 例 如 求 定 积 分 I = π sin x dx 的 值, 在 MATLAB 环 境 下 直 接 键 入 下 面 指 令 quad('sin',,pi) 计 算 机 运 行 后, 屏 幕 将 显 示 ans =. 这 表 明 用 指 令 quad 直 接 计 算 出 积 分 I = π sin x dx = 在 上 面 的 计 算 中 由 于 正 弦 函 数 是 MATLAB 的 一 个 内 部 函 数, 所 以 可 以 直 接 调 用, 而 对 于 任 意 一 个 连 续 函 数 的 定 积 分 计 算, 就 必 须 先 定 义 被 积 函 数 才 能 用 quad 指 令 求 积 分 值 例 如 求 定 积 分
M ATLAB 8 问 33/9 π + 的 值, 必 须 先 编 辑 被 积 函 数 的 文 件 ( 函 数 文 件 名 :ff3.m) 如 下 : function y=ff3(x) y=exp(-x.^/)/sqrt(*pi); 将 这 一 函 数 文 件 保 存 在 当 前 工 作 目 录 下 后, 可 以 直 接 调 用 函 数 ff3(x), 在 MATLAB 环 境 下 用 有 穷 积 分 来 求 该 积 分 的 近 似 值, 选 取 积 分 限 为 -4 到 +4 积 分 : quad('ff3',-4,4) MATLAB 计 算 出 积 分 的 近 似 值 为 ans =.9999 这 实 际 上 是 用 有 限 定 积 分 e x dx π 代 替 原 来 的 无 穷 区 间 上 积 分 的 值 + 4 4 e x dx 9. 如 何 求 椭 圆 周 长? 如 果 已 知 椭 圆 长 半 轴 a 和 短 半 轴 b, 则 该 椭 圆 的 参 数 方 程 为 x = a cost y = bsin t 根 据 求 曲 线 弧 长 的 定 积 分 公 式, 椭 圆 周 长 为 在 上 面 的 定 积 分 中 被 积 函 数 为 π S = a sin t + b cos t dt f ( t) = a sin t + b 例 如, 求 长 半 轴 为, 短 半 轴 为 的 椭 圆 周 长 首 先 编 辑 如 下 函 数 文 件 : function y=f3(t) y=*sqrt((*sin(t)).^+(*cos(t)).^); 将 这 一 函 数 文 件 录 入 后 存 放 在 工 作 目 录 下, 回 到 MATLAB 环 境 中 可 以 进 接 调 用 这 一 被 积 函 数 做 定 积 分, 键 入 如 下 命 令 : quad('f3',,pi) 计 算 机 屏 幕 将 显 示 ans = 96.8853 cos t
M ATLAB 8 问 34/9 这 说 明, 所 求 的 椭 圆 周 长 为 96.8853 3. 怎 样 用 fplot 画 一 元 函 数 的 图 形? 在 MATLAB 中 绘 制 一 元 函 数 的 图 形 ( 即 平 面 曲 线 图 形 ) 除 了 用 plot 命 令 绘 画 外, 还 可 以 用 fplot 直 接 画 一 元 函 数 图 形 使 用 fplot 这 一 指 令 绘 图 的 最 大 特 点 是 不 用 确 定 自 变 量 的 离 散 数 据 并 计 算 对 应 的 函 数 值 计 算 机 在 执 行 这 一 条 指 令 时, 将 根 据 所 给 自 变 量 取 值 区 间 来 自 动 选 取 自 变 量 结 点 ( 离 散 数 据 ), 并 计 算 出 对 应 的 函 数 值 数 据, 然 后 绘 图 这 对 于 一 般 用 户 来 讲, 更 有 利 于 提 高 工 作 效 率 使 用 这 一 指 令 时, 需 要 先 定 义 函 数, 同 时 还 要 在 指 令 中 使 用 方 括 号, 在 方 括 号 内 给 定 四 个 数 据 作 为 自 变 量 取 值 区 间 和 函 数 值 显 示 范 围 例 如 绘 制 正 切 函 数 的 部 分 图 形 ( 图 -6), 可 直 接 用 下 面 指 令 形 fplot('tan',[-*pi *pi -*pi *pi]) 由 于 正 切 函 数 是 MATLAB 的 内 部 函 数, 所 以 不 需 要 编 缉 函 数 文 件 定 义 函 数 而 可 以 直 接 调 用 ; 方 括 号 中 的 四 个 数 据 分 别 表 明 所 绘 图 形 在 X 和 Y 两 个 方 向 上 均 是 由 π 到 π 之 间 如 果 要 直 接 绘 制 出 任 意 的 一 个 函 数 图 形, 则 必 须 事 先 编 辑 函 数 文 件, 然 后 再 使 用 直 接 绘 图 命 令 fplot 命 令 使 用 格 式 为 fplot( 函 数 名,[Xmin Xmax Ymin Ymax]) 或 fplot( 函 数 名,[xmim xmax]) 例 如, 绘 制 函 数 f x) = ( x.3) 图 -6 正 切 函 数 图 + +. ( x.9) ( +.4 6
M ATLAB 8 问 35/9 在 区 间 [,] 内 的 图 形 首 先 编 辑 函 数 文 件 ( 文 件 名 为 hh.m) function y=hh(x) y =./ ((x-.3).^ +.) +./ ((x-.9).^ +.4) - 6; 将 这 一 文 件 保 存 在 当 前 目 录 下, 在 MATLAB 环 境 中 用 命 令 fplot('hh',[,]); 将 绘 出 该 函 数 的 图 形 如 图 所 示 如 果 用 如 下 命 令 [x y] = fplot('hh',[,]); 图 形 窗 口 中 将 不 绘 出 该 函 数 的 图 形, 而 只 是 自 动 选 取 有 限 个 自 变 量 的 离 散 点 的 值 并 计 算 出 该 函 数 在 对 应 自 变 量 离 散 点 处 的 函 数 值 8 6 4 -.5.5 图 -7 3. 如 何 求 一 元 函 数 的 极 小 值? 求 一 元 函 数 极 小 值 用 命 令 fmin 这 一 命 令 的 使 用 格 式 为 fmin(' 文 件 名 ',x,x) 通 常, 要 事 先 编 写 好 函 数 文 件 用 以 定 义 所 研 究 的 函 数 F, 同 时 在 使 用 这 一 命 令 时 要 给 定 极 小 值 点 存 在 的 区 间 [x,x ] 计 算 机 执 行 这 一 指 令 后, 将 求 出 函 数 F(x) 在 区 间 (x, x) 内 的 局 部 极 小 值 点 其 中,F 是 所 考 虑 的 函 数 的 函 数 文 件 名 例 如, 键 入 : fmin('cos',3,4) ( 回 车 ) 计 算 机 将 计 算 出 余 弦 函 数 在 区 间 (3, 4) 内 的 局 部 极 小 值 点 ans = 3.46 一 般 情 况 下, 对 所 考 虑 的 函 数 必 须 要 事 先 编 缉 该 函 数 的 函 数 文 件, 然 后 再 使 用 求 函 数 极 小 值 点 的 指 令 而 极 小 值 点 存 在 的 范 围 也 要 人 为 给 定, 在 对 该 函 数
M ATLAB 8 问 36/9 不 太 了 解 时 不 能 给 出 合 适 的 极 值 点 范 围, 这 时 可 以 结 合 fplot 指 令 直 接 绘 出 该 函 数 的 局 部 图 形, 通 过 观 察 函 数 曲 线 的 变 化 情 况, 估 计 出 极 小 值 点 的 范 围 ( 极 小 值 点 存 在 的 区 间 ) 如 果 要 求 一 个 函 数 在 某 一 区 间 内 的 极 大 值, 只 须 在 编 写 函 数 文 件 时, 人 为 地 将 函 数 值 取 反 号 在 MATLAB 命 令 窗 口 仍 可 以 用 fmin 命 令 求 极 大 值 3. 如 何 求 一 元 函 数 的 零 点? 求 一 元 函 数 零 点 用 指 令 fzero, 但 是 必 须 要 事 先 给 出 一 个 初 值 x ( 零 点 的 初 始 近 似 值 ) 具 体 使 用 格 式 为 fzero( f name, x ) 由 此 可 计 算 出 函 数 名 为 fname.m 的 函 数 在 点 x 点 附 近 的 零 点. 例 如, 在 MATLAB 环 境 下 输 入 fzero('sin',3) 计 算 机 运 行 后 可 计 算 出 ans = 3.45965358979 这 一 零 点 的 值 实 际 上 是 π 的 值 注 意 : 在 一 般 情 况 下, 要 首 先 编 辑 函 数 文 件 以 定 义 函 数, 并 且 大 概 估 计 出 所 研 究 的 函 数 的 零 点 的 位 置 ( 初 始 点 近 似 值 ), 最 后 再 使 用 fzero 指 令 求 函 数 的 零 点 本 问 题 中 正 弦 函 数 是 MATLAB 中 的 内 部 函 数, 所 以 不 用 编 写 函 数 文 件 33. 如 何 求 一 阶 常 微 分 方 程 初 值 问 题 的 数 值 解? 常 微 分 方 程 初 值 问 题 的 数 学 描 述 如 下 : dy = f ( x, y) dx y( x ) = y 这 里, f ( x, y) 为 常 微 分 方 程 的 右 端 函 数, 而 y 为 所 求 未 知 函 数 的 初 始 值 求 解 常 微 分 方 程 初 值 问 题 用 指 令 ode3 或 ode45 使 用 这 两 条 命 令 中 的 任 何 一 条 都 必 须 事 先 编 写 好 函 数 文 件 并 保 存 在 工 作 目 录 下 ( 如 取 文 件 名 为 yprime.m) 命 令 的 具 体 使 用 格 式 为 [x,y] = ode3('yprime', x, x n, y ) 其 中,yprime 为 描 述 常 微 分 方 程 右 端 函 数 的 函 数 文 件 名, 而 x 和 x n 分 别 为 自 变 量 的 初 始 点 和 终 值 点,y 为 未 知 函 数 的 初 值
M ATLAB 8 问 37/9 例 如 求 一 阶 常 微 分 方 程 dy = x y +, dx y() = x > 在 (,) 区 间 内 的 数 值 解, 并 与 该 初 值 问 题 的 解 析 解 y( x) = x + e 进 行 比 较 首 先 编 缉 两 个 函 数 文 件, 第 一 个 用 于 描 述 微 分 方 程 右 端 函 数 ( 文 件 名 :ff.m): function z=ff(x,y) z=x-y+; 另 一 个 用 于 描 述 微 分 方 程 的 解 析 解 ( 文 件 名 :ff.m): function y=ff(x) y=x+exp(-x); 将 这 两 个 函 数 文 件 保 存 在 工 作 目 录 下, 然 后 求 出 初 值 问 题 的 数 值 解 以 及 微 分 方 程 解 析 解 在 对 应 自 变 量 的 离 散 点 处 的 函 数 值, 最 后 同 时 绘 出 两 个 函 数 的 图 形 加 以 比 较 在 MATLAB 环 境 中 键 入 下 列 指 令 : [x,y]=ode3('ff',,,); y=ff(x); plot(x,y, o,x,y) 计 算 机 屏 将 显 示 出 数 值 解 ( 用 小 圆 o 表 示 ) 和 解 析 解 的 图 形 如 图 -8 x 图 -8 数 值 解 与 解 析 解 的 比 较
M ATLAB 8 问 38/9 34. 如 何 求 高 阶 常 微 分 方 程 初 值 问 题 的 数 值 解? 根 据 常 微 分 方 程 求 解 理 论, 高 阶 常 微 分 方 程 初 值 问 题 可 以 化 为 与 之 等 价 的 一 阶 常 微 分 方 程 组 初 值 问 题 来 求 解 所 以 仍 然 可 以 用 ode3 指 令 求 解 高 阶 常 微 分 方 程 初 值 问 题 例 如, 著 名 的 追 赶 曲 线 问 题 : 有 动 点 Q 从 点 Q (, ) 出 发, 以 米 / 秒 的 速 度 平 行 于 Y 轴 的 正 向 方 向 运 动, 另 一 动 点 P 从 原 点 O(, ) 出 发, 以 米 / 秒 的 速 度 追 赶 Q 点,P 在 运 动 过 程 中 方 向 总 是 指 向 Q 点 已 求 得 P 点 的 轨 迹 满 足 的 微 分 方 程 为 求 解 该 方 程 并 画 出 追 赶 曲 线 + y y = x (, ) ( x) y =, y =. x= x= 首 先, 将 问 题 转 化 为 一 阶 常 微 分 方 程 组 的 初 值 问 题 dy dx dy dx = y, y ( ) = + y = y = ( x), ( ) 为 了 求 解 上 面 的 一 阶 常 微 分 方 程 初 值 问 题, 首 先 编 辑 描 述 常 微 分 方 程 右 端 函 数 的 函 数 文 件 ( 文 件 名 :rab.m) function z=rab(x,y) z()=y(); z()=sqrt(+y().^)./(*(-x)); 将 这 一 函 数 文 件 保 存 在 工 作 目 录 下, 并 在 MATLAB 环 境 中 键 入 下 面 指 令 : y=[ ]; [x,y]=ode3('rab',,99.99,y); plot(x,y(:,),'o')
M ATLAB 8 问 39/9 计 算 机 屏 幕 将 显 示 出 追 赶 曲 线 的 图 形 如 图 -9 图 -9 追 赶 曲 线 图 形 35.MATLAB 的 局 部 变 量 和 全 局 变 量 有 何 区 别? MATLAB 的 函 数 文 件 中 除 了 自 变 量 因 变 量 以 外, 在 计 算 过 程 中 如 果 用 到 了 中 间 变 量 或 其 它 的 变 量, 这 些 都 将 是 局 部 变 量 局 部 变 量 只 在 这 一 函 数 中 有 效, 在 其 它 函 数 或 程 序 中 无 效 例 如, 将 三 角 形 面 积 S 视 为 三 条 边 长 a,b,c 的 函 数, 则 可 以 编 缉 一 个 函 数 文 件 ( 文 件 名 为 :heron.m) 来 实 现 海 伦 公 式 的 计 算 : function s=heron(a, b, c) p=(a+b+c)/; s=sqrt(p*(p-a)*(p-b)*(p-c)); 将 这 一 函 数 文 件 保 存 在 工 作 目 录 下, 在 MATLAB 环 境 中, 键 入 如 下 指 令 heron(3, 4, 5) 计 算 机 执 行 后, 将 显 示 出 计 算 结 果 :ans= 6 在 这 一 函 数 文 件 中, 三 角 形 的 半 周 长 p 就 是 一 个 局 部 变 量 调 用 这 一 函 数 时, 计 算 机 用 实 际 的 数 据 3 4 5 代 替 形 式 变 量 a b c 计 算 出 变 量 p 的 值, 然 后 再 计 算 出 s 的 值, 最 后 将 数 据 结 果 输 出 到 屏 幕 上 但 是 只 要 计 算 出 函 数 值, 则 自 变 量 的 实 际 数 据 和 中 间 变 量 都 将 被 自 动 删 除, 计 算 机 内 存 中 只 保 留 了 函 数 值 变 量 ( 缺 省 变 量 名 为 ans)
M ATLAB 8 问 4/9 如 果 想 保 留 中 间 变 量 p 的 值, 就 必 须 将 它 定 义 为 全 局 变 量 定 义 p 为 全 局 变 量 用 命 令 global p 注 意 : 这 一 命 令 必 须 出 现 在 两 个 地 方, 一 是 函 数 文 件 中 第 一 次 使 用 变 量 p 之 前 ; 二 是 在 命 令 窗 口 第 一 次 调 用 这 一 函 数 文 件 之 前 当 一 个 作 业 的 初 始 数 据 较 多 或 算 法 比 较 复 杂 时, 用 函 数 文 件 的 方 法 来 完 成 作 业 不 太 方 便, 这 时 常 用 非 函 数 文 件 ( 即 程 序 ) 来 实 现 算 法, 这 不 但 方 便, 更 利 于 调 试 36. 多 项 式 运 算 有 哪 些 命 令? 数 常 用 多 项 式 运 算 命 令 有 多 项 式 的 创 建 和 多 项 式 求 值 等 一 个 n 次 多 项 式 函 n n Px ( ) = ax + ax + L + a x+ a 的 各 项 系 数 确 定 了 一 个 (n+) 维 向 量 n p = [ a a a L a n ] 反 之, 如 果 给 定 了 一 个 (n+) 维 向 量 p = [ a a a L a n ], 则 可 以 将 各 元 素 作 为 多 项 式 的 系 数 按 降 幂 形 式 写 出 一 个 多 项 式 () 用 创 建 向 量 的 方 法 创 建 一 个 n 次 多 项 式 例 如 创 建 一 个 8 次 多 项 式 p(x)= x 8-36x 7 +546x 6-4536x 5 +449x 4-6784x 3 +84x - 9584x+43 可 以 用 命 令 p=[ -36 546-4536 449-6784 84-9584 43] () 用 命 令 p=poly(r) 创 建 多 项 式 如 果 知 道 一 个 n 次 多 项 式 的 全 部 根 r r r n 则 可 以 用 向 量 R = [ r r L r n ], 结 合 命 令 p=poly(r) 创 建 n 次 多 项 式 即 产 生 出 该 多 项 式 的 系 数 p(x) = x n + a x n- + a x n- + + a n- x + a n n
M ATLAB 8 问 4/9 p = [ a a L a n ] 显 然, 有 n n n ( x r )( x r ) L( x r ) = x + a x + a x + L + a x+ a n 若 R 是 n 阶 方 阵, 则 p=poly(r) 将 获 得 R 的 特 征 多 项 式 (3) 求 一 个 多 项 式 的 全 部 零 点 多 项 式 的 零 点 ( 高 次 代 数 方 程 的 根 ) 用 命 令 roots(p) 例 如 求 8 次 代 数 方 程 x 8-36x 7 +546x 6-4536x 5 +449x 4-6784x 3 +84x -9584x+43 = 的 根, 可 以 用 MATLAB 语 句 p=[ -36 546-4536 449-6784 84-9584 43]; roots(p) 得 8 个 根 分 别 为 :8 7 6 5 4 3 如 果 修 改 7 次 幂 的 系 数 -36 为 -37 再 求 新 的 8 次 方 程 的 根, 可 用 下 面 的 命 令 p()=-37; roots(p) 得 新 的 8 次 方 程 的 根 如 下 ans = 6.9 5.35 + 5.497i 5.35-5.497i.8 +.78i.8 -.78i.844 +.494i.844 -.494i.9998 比 较 两 次 求 根 结 果, 发 现 多 项 式 系 数 的 微 小 变 动 会 引 起 多 项 式 的 根 的 显 著 变 化 (4) 计 算 一 个 多 项 式 在 x = s 处 的 值 用 命 令 :polyval(p, s) 这 里,s 可 以 是 自 变 量 的 某 一 个 确 定 的 数 据,s 也 可 以 是 自 变 量 的 一 组 确 定 的 数 据 n n 37. 如 何 求 多 元 函 数 的 极 小 值? 求 多 元 函 数 的 极 小 值 用 指 令 fzeros, 使 用 的 具 体 格 式 为 fzeros( fname,x ) 使 用 这 一 指 令 时, 必 须 事 先 编 缉 文 件 名 为 fname.m 的 函 数 文 件 ( 文 件 名 可 由 操 作 者 自 己 选 定 ), 用 以 描 述 所 研 究 的 多 元 函 数 ; 同 时 还 要 给 出 极 小 值 点 的 近 似
M ATLAB 8 问 4/9 值 ( 初 始 值 )x, 对 于 多 元 函 数 而 言,x 是 一 个 常 向 量 考 虑 三 村 短 路 问 题 (Steiner 问 题 ): 已 知 A B C 三 地,AB=5( 公 里 ),BC=6( 公 里 ),AC=7( 公 里 ) 现 要 找 一 地 H, 使 AH+BH+CH 为 最 短, 并 求 出 AH+BH+CH 的 最 小 值 以 A 为 原 点 建 立 平 面 直 角 坐 标 系, 让 X 轴 通 过 AC 连 线 ( 如 图 所 示 ) 设 H 点 的 坐 标 为 ( x, y ), 则 A(,),C(7,),B(x,y ),(B 点 坐 标 可 以 通 过 计 算 获 得 ) 于 是 问 题 转 化 为 求 二 元 函 数 的 最 小 值 问 题 S( x, y) = x + y + ( x ) + y 7 + ( x x ) + ( y y ) 由 于 AB=5,BC=6, 于 是 B 点 坐 标 ( x, y ) 满 面 足 方 程 组 求 解, 得 x + y = 5 ( x 7 ) + y = 36 x =.743, y =4.99 首 先 定 义 目 标 函 数 S(x), 注 意, 这 时 自 变 量 x 是 含 有 两 个 元 素 的 向 量 建 立 文 件 名 为 s.m 的 函 数 文 件 如 下 : function w=s(x) x=[.743 4.99];x=[7 ]; A O 图 - C x w=sqrt(x*x')+sqrt((x-x)*(x-x)')+sqrt((x-x)*(x-x)'); 将 上 述 函 数 文 件 存 放 于 工 作 目 录 下 然 后 取 初 始 点 为 B 点 的 坐 标, 编 缉 如 下 文 件 名 为 steiner.m 的 程 序 如 下 : x=[.743 4.99];x=[7 ]; % 输 入 B 点 和 C 点 的 坐 标 h=fmins('s',x) % 求 目 标 函 数 的 最 小 值 点 并 输 出 结 果 d()=sqrt(h*h'); d()=sqrt((h-x)*(h-x)'); d(3)=sqrt((h-x)*(h-x)'); d % 输 出 AH,BH,CH 的 ( 距 离 ) 数 据 s=sum(d) % 求 目 标 函 数 最 小 值 并 输 出 数 据 结 果 B H
M ATLAB 8 问 43/9 在 MATLAB 环 境 下 运 行 程 序 steiner.m,( 即 直 接 键 入 文 件 名 steiner 并 回 车 ) 屏 幕 将 显 示 计 算 结 果 如 下 : h=.8847.9736 % H 点 的 坐 标 d=3.495.3 4.564 % AH,BH,CH 的 数 据 s=.93 % AH+BH+CH 的 值 38. MATLAB 有 哪 些 数 据 输 出 格 式? 在 MATLAB 工 作 环 境 中, 所 有 参 加 运 算 的 数 据 都 是 以 双 精 度 存 贮 方 式 进 行, 即 具 有 十 进 制 的 十 五 位 有 效 数 但 是, 如 果 没 有 特 殊 的 要 求, 数 据 只 以 五 位 十 进 制 数 被 显 示 出 来 例 如, 在 MATLAB 环 境 中 键 入 pi 并 回 车, 屏 幕 将 显 示 出 数 学 常 数 π 的 值 3.46 如 果 键 入 exp() 并 回 车, 屏 幕 将 显 示 出 数 学 常 数 e 的 值.783 这 两 个 数 都 是 精 度 不 太 高 的 近 似 值, 它 们 的 位 数 只 有 五 位, 这 种 显 示 方 法 被 称 为 短 格 式 方 式 如 果 我 们 要 想 看 到 π 的 更 精 确 的 数 据 值, 可 以 利 用 数 据 显 示 的 长 格 式 方 式 键 入 指 令 format long, 再 键 入 pi, 屏 幕 将 显 示 出 数 据 3.45965358979, 这 是 具 有 十 五 位 的 数 据 如 果 再 键 入 format, 以 后 的 数 据 显 示 方 式 将 以 短 格 式 的 方 式 进 行 选 择 数 据 输 出 格 式 的 方 法 有 两 种 : 一 是 用 键 盘 命 令, 二 是 用 菜 单 选 择 () MATLAB 可 以 用 键 盘 命 令 format 加 不 同 的 开 关 使 数 据 具 有 不 同 的 输 出 格 式 表 -3 改 变 数 据 输 出 格 式 命 令 命 令 开 关 功 能 format 缺 省 时 为 默 认 短 格 式 方 式 与 format short 相 同 format short 短 格 式 方 式, 显 示 5 位 定 点 十 进 制 数 format long 长 格 式 方 式, 显 示 5 位 定 点 十 进 制 数 format hex 十 六 进 制 格 式 方 式 format bank 银 行 格 式 按 元 角 分 ( 小 数 点 后 具 有 两 位 ) 的 固 定 格 式 format + + 格 式, 以 +, 和 空 格 分 别 表 示 中 的 正 数, 负 数 和 零 元 素 format short e 短 格 式 e 方 式, 显 示 5 位 浮 点 十 进 制 数 format long e 长 格 式 e 方 式, 显 示 5 位 浮 点 十 进 制 数 format rat 分 数 格 式 形 式 用 有 理 数 逼 近 显 示 数 据 如 pi 显 示 为
M ATLAB 8 问 44/9 355/3 format loose 松 散 格 式 数 据 之 间 有 空 行 format compact 紧 凑 格 式 数 据 之 间 无 空 行 () 在 MATLAB 命 令 窗 口 中 也 可 以 用 鼠 标 选 择 菜 单 Options 如 图 - 所 示 图 - 数 据 输 出 格 式 的 菜 单 选 择 在 下 拉 菜 单 中 选 择 第 一 条 Numeric Format, 会 出 现 十 种 数 据 输 出 格 式 的 选 择 菜 单 再 用 鼠 标 单 击 即 可 39. 在 M ATLAB 中 如 何 使 用 特 殊 矩 阵? MATLAB 中 的 特 殊 矩 阵 比 较 多, 常 用 的 有 下 面 几 类 : () 单 位 矩 阵 产 生 n 阶 单 位 矩 阵 用 命 令 eye(n) 例 如,eye(4) 将 产 生 4 阶 单 位 矩 阵 () 全 矩 阵 产 生 m n 阶 全 矩 阵 用 命 令 ones(m,n) 例 如,ones(3,4) 将 产 生 3 4 阶 的 全 矩 阵
M ATLAB 8 问 45/9 (3) 全 零 矩 阵 产 生 m n 阶 全 矩 阵 用 命 令 zeros(m,n) 例 如,zeros(3,4) 将 产 生 3 4 阶 的 全 矩 阵 (4) 对 角 矩 阵 产 生 n 阶 对 角 矩 阵 用 命 令 diag([a a a n ]) 例 如,diag([ 3 4]) 将 产 生 4 阶 对 角 矩 阵 3 4 如 果 要 提 取 一 个 矩 阵 A 的 主 对 角 元 素, 可 以 用 命 令 diag(a) 例 如, 在 MATLAB 工 作 环 境 中 已 经 创 建 了 一 个 3 阶 矩 阵 3 A = 4 5 6 7 8 9 则 命 令 diag(a) 将 提 取 出 矩 阵 A 的 主 对 角 元 素 并 形 成 一 个 列 向 量 ans = [ 5 9 ] T (5) 范 德 蒙 矩 阵 命 令 vander([ 3]) 将 产 生 一 个 3 阶 范 德 蒙 矩 阵 4 9 3 (6) 幻 方 矩 阵 命 令 magic(3) 将 产 生 一 个 3 阶 幻 方 矩 阵 ( 纵 横 相 加 得 数 均 相 等 ) 8 6 3 5 7
M ATLAB 8 问 46/9 4 9 (7) 希 尔 伯 特 矩 阵 命 令 hilb(3) 将 产 生 一 个 3 阶 希 尔 伯 特 矩 阵 / /3 / /3 /4 /3 /4 /5 ( 这 种 输 出 格 式 是 分 数 形 式, 在 产 生 矩 阵 之 前 用 了 命 令 format rat ) 4. 如 何 求 一 个 方 阵 的 特 征 值 与 特 征 向 量? 求 一 个 方 阵 A 的 特 征 值 用 命 令 eig(a), 求 特 征 向 量 也 用 同 一 命 令 即 取 如 下 格 式 例 如, 求 矩 阵 [v d] = eig(a) A = 4 的 特 征 值 和 特 征 向 量, 可 以 用 命 令 [v d] = eig(a) MATLAB 执 行 这 条 命 令 后, 屏 幕 将 显 示 出 特 征 值 和 特 征 向 量 v =.48 -.48.865 -.865. -.48.48 d = 这 里, 对 角 矩 阵 d 中 的 三 个 对 角 元 是 A 矩 阵 的 三 个 特 征 值, 即 而 矩 阵 v 的 三 个 列 向 量 3 λ =, λ =, λ 3 =
M ATLAB 8 问 47/9.48.48 α =, α =.865, α =.865.48.48 分 别 对 应 于 上 面 三 个 特 征 值, 即 α 是 λ = 的 特 征 向 量, α 是 λ = 的 特 征 向 量, α 3 是 λ 3 = 的 特 征 向 量 ( 这 种 数 据 输 出 格 式 是 默 认 的 定 点 数 短 格 式 ) 4. 如 何 用 正 交 变 换 将 一 个 二 次 型 化 为 标 准 形 式? 利 用 正 交 变 换 化 二 次 型 为 标 准 型, 应 首 先 写 出 二 次 型 所 对 应 的 对 称 矩 阵, 然 后 用 正 交 变 换 将 这 一 对 称 矩 阵 化 为 对 角 矩 阵 在 MATLAB 中 用 schur 分 解 的 指 令 可 以 求 出 所 需 对 角 矩 阵 和 所 用 的 正 交 矩 阵, 从 而 完 成 这 一 任 务 例 如, 有 下 面 的 二 次 型 3 3 f( x, x, x ) = x + x + 3x + 4x x 4x x 为 了 将 其 化 为 标 准 形, 首 先 写 出 二 次 型 所 对 应 的 矩 阵 3 A = 3 现 在 对 A 作 schur 分 解, 可 以 获 得 二 次 型 标 准 型 所 对 应 的 对 角 阵 以 及 用 于 正 交 变 换 的 正 交 矩 阵 为 了 适 应 于 一 般 的 线 性 代 数 习 题, 还 需 要 将 数 据 格 式 转 换 为 有 理 数 ( 分 数 ) 形 式 A=[ ; -; - 3];format rat [u, t]=schur(a) 上 面 三 行 指 令 运 行 后, 可 由 矩 阵 A 分 解 出 正 交 矩 阵 u 和 对 角 矩 阵 t 所 得 数 据 结 果 为 3 3 3 u = 3 3 3 3 3 3, t = 5
M ATLAB 8 问 48/9 矩 阵 u 正 是 用 于 将 矩 阵 A 正 交 对 角 化 的 正 交 矩 阵 三 个 矩 阵 A,u,t 满 足 如 下 关 系 A = u*t*u' 和 u'*u = I 如 果 令 [ y y y3 ] = [ x x x3 ] u, 则 有 [x x x 3 ] = [y y y 3 ] u - 而 u T = u, 由 此 可 知, 所 用 正 交 变 换 及 所 求 标 准 二 次 型 分 别 为 : x x x 3 3 3 3 = 3 3 3 3 3 3 y y y 3, f( x, x, x3) = y + y + 5y 3 4. 如 何 计 算 出 3 个 概 率 积 分 值? 设 随 机 变 量 X 服 从 标 准 正 态 分 布, 即 X ~ N(, ) 现 分 别 取 为 了 计 算 出 3 个 概 率 积 分 值 P { X u α =.,.,.3,,.9,3. > u α } = x + uα e π dx 4 uα e π 可 以 选 取 定 积 分 中 的 不 同 积 分 下 限 值, 用 MATLAB 的 求 积 分 指 令 quad 配 合 循 环 语 句 来 达 到 所 求 的 数 据 首 先 编 辑 描 述 被 积 函 数 的 函 数 文 件, 取 文 件 名 为 fai.m function y=fai(x) y=exp(-x.^/)/sqrt(*pi); 将 这 一 文 件 保 存 在 工 作 目 录 下, 然 后 再 编 辑 一 个 文 件 名 为 prop.m 的 程 序 如 下 : a=;h=.; for k=:3 a=a+h; p(k)=quad('fai',a,4); end 将 这 一 文 件 保 存 在 工 作 目 录 下, 回 到 MATLAB 环 境 下, 运 行 名 为 prop.m 的 程 序, 只 需 要 键 入 x dx
M ATLAB 8 问 49/9 prop 并 回 车, 就 可 以 计 算 出 3 个 概 率 积 分 值 ( 保 存 在 数 组 变 量 p 中 ) 在 MATLAB 环 境 中 直 接 键 入 p 并 回 车, 屏 幕 将 显 示 出 所 计 算 出 的 数 据 结 果 如 表 -4 所 示 表 -4 编 号 积 分 值 编 号 积 分 值 编 号 积 分 值.46.356.78.47.5.39 3.38 3.968 3.7 4.3445 4.87 4.8 5.385 5.668 5.6 6.74 6.548 6.46 7.49 7.445 7.34 8.8 8.359 8.5 9.84 9.87 9.8.586.7 3.3 43. 如 何 产 生 两 类 常 用 的 随 机 数? 在 MATLAB 中 有 专 用 的 随 机 数 发 生 器, 可 以 产 生 均 匀 分 布 的 随 机 数 以 及 标 准 正 态 分 布 的 随 机 数 这 两 个 命 令 分 别 为 rand 和 randn rand(m,n) 将 产 生 出 一 个 m n 阶 的 矩 阵, 矩 阵 的 每 个 元 素 均 为 区 间 (, ) 中 的 数 即 rand 产 生 服 从 均 匀 分 布 U(,) 的 随 机 变 量 X 的 伪 随 机 数 ( 由 计 算 机 模 拟 ) 若 为 了 模 拟 某 一 随 机 事 件, 需 要 八 个 均 匀 随 机 数, 用 如 下 命 令 x = rand(,) 将 得 到 八 个 元 素 的 行 向 量, 例 如 x = [.569.9.6539.46.7.93.76.65 ] 如 果 用 这 八 个 随 机 数 模 拟 八 次 掷 硬 币 的 结 果, 并 规 定 掷 出 硬 币 为 正 面 的 结 果 用 随 机 数 大 于.5 表 示 则 上 面 的 随 机 数 依 次 代 表 了 掷 硬 币 结 果 为 正 反 正 反 正 正 正 反 同 理, 命 令 randn(m,n) 将 产 生 出 一 个 m n 阶 的 随 机 数 矩 阵, 矩 阵 的 每 个 元 素 均 为 区 间 (-3,3) 中 的 数 由 于 标 准 正 态 随 机 变 量 其 均 值 μ =, 方 差 σ =, 根 据 概 率 论 中 著 名 的 3σ 原 则, randn 产 生 服 从 标 准 正 态 分 布 N(,) 的 随 机 变 量 X 的 伪 随 机 数 例 如, 为 了 模 拟 某 一 学 生 班 3 个 同 学 的 高 等 数 学 期 末 考 试 成 绩, 已 知
M ATLAB 8 问 5/9 最 高 分 数 不 超 过 分, 最 低 分 数 不 低 于 4 分, 平 均 分 数 为 7 分, 为 了 模 拟 这 一 随 机 事 件, 可 用 如 下 命 令 f = randn(3,)* + 7 产 生 3 个 随 机 数 的 列 向 量, 例 如 表 -5 表 -5 f k 分 数 f k 分 数 f k 分 数 f 74.387 f 6.43 f 6.9797 f 57.566 f 63.58 f 49.4674 f 3 73.467 f 3 58.83 f 3 7.899 f 4 73.97 f 4 9.393 f 4 9.87 f 5 65.9486 f 5 79.6848 f 5 73.65 f 6 7.93 f 6 76.79 f 6 78.46 f 7 95.659 f 7 74.5 f 7 68.546 f 8 65.48 f 8 4.75 f 8 8.37 f 9 53.897 f 9 86.8587 f 9 54.738 f 43.348 f 7.79 f 3 79.6494 由 表 -5 中 数 据 可 知, 最 高 分 为 学 号 第 7 号 的 同 学, 分 数 为 95.659, 最 低 分 为 学 号 为 8 号 的 同 学, 分 数 为 4.75 经 计 算 可 得, 这 3 个 同 学 的 平 均 分 数 为 69.5545 44. 如 何 绘 制 极 坐 标 所 描 述 的 曲 线 图 形? 有 时 人 们 须 用 极 坐 标 来 描 述 平 面 曲 线,MATLAB 可 以 通 过 曲 线 的 极 坐 标 方 程 的 两 个 变 量 来 绘 制 对 应 的 曲 线 图 形, 这 时 可 以 用 polar 指 令 具 体 使 用 格 式 为 : polar(theta, RHO) 这 里, THETA 为 角 度 变 量, 而 RHO 为 极 径 变 量 例 如 用 极 坐 标 绘 图 指 令 绘 制 四 叶 玟 瑰 线 的 图 形, 其 极 坐 标 方 程 为 r = cos θ, ( θ π ) 在 MATLAB 环 境 中 键 入 下 面 指 令 : theta=:.:*pi;
M ATLAB 8 问 5/9 r=cos(*theta); polar(theta,r) 运 行 上 面 三 条 语 句, 可 得 图 - 所 示 图 形 图 - 四 叶 玟 瑰 线 图 形 45. 如 何 绘 制 统 计 直 方 图? 统 计 直 方 图 是 人 们 根 据 已 经 得 到 的 数 据, 将 数 据 按 不 同 的 小 区 间 分 类, 统 计 各 小 区 间 内 数 据 出 现 的 频 率 由 频 率 值 画 出 的 一 种 条 形 图 画 直 方 图 指 令 用 hist 已 知 某 班 36 个 大 学 生 的 单 科 成 绩, 根 据 这 些 分 数 的 数 据 画 统 计 直 方 图 X=[84 8 6 75 66 9 9 8 86 89 85 84 89 9 95 78 85 8 85 9 83 8 87 7 9 8 63 88 88 88 9 93 98 84 84]; hist(x) 上 面 第 一 条 语 句 是 给 变 量 X 赋 值,X 代 表 36 名 大 学 生 的 成 绩 分 数 数 据 ; 第 二 条 指 令 是 用 绘 直 方 图 指 令 hist 绘 制 出 十 等 分 直 方 图 如 果 将 hist(x) 改 为 指 令 hist(x,4) 则 绘 出 的 是 4 等 分 直 方 图, 如 图 -3 所 示,4 等 分 直 方 图 表 示 6~69,7~79,8~89,9~ 图 -3 四 等 分 直 方 四 个 分 数 段 内 的 分 数 出 现 的 频 率 大 小 由 图 此 可 知, 绘 直 方 图 指 令 中 第 一 个 参 数 代 表 数 据 集 合, 第 二 个 参 数 控 制 直 方 图 中 的 等 分 数, 其 默 认 值 为, 要 改 变 默 认 值 就 必 须 给 出 具 体 的 数 据 46. 如 何 绘 制 空 间 曲 线 的 图 形? 在 MATLAB 中 绘 制 一 条 或 多 条 空 间 曲 线 用 命 令 plot3 它 的 使 用 方 法 类 似 于 绘 制 平 面 曲 线 命 令 plot 设 空 间 曲 线 L 的 表 达 式 为 x = x( t) y = y( t) α t β z = z( t) 首 先 确 定 出 曲 线 中 参 数 t 的 离 散 点 数 据, 然 后 根 据 t 的 数 据 计 算 出 曲 线 上 坐 标 x,y,z 的 值 ( 所 得 x,y,z 是 同 维 数 的 向 量 ), 最 后 按 如 下 命 令 格 式 绘 图
M ATLAB 8 问 5/9 plot3(x,y,z) 其 中,x,y,z 为 空 间 空 间 曲 线 上 点 的 坐 标 例 如, 用 下 面 程 序 段 t = :pi /5:5* pi; x =.* t.* sin(t);y =.* t.* cos(t);z = t; plot3(x,y,z) 可 以 绘 出 曲 线 x =. t sin t y =. t cos t t 5π z = t 5 4 3 5 5-5 -5 的 图 形 如 下 所 示 图 -4 空 间 曲 线 图 形 如 果 x,y,z 是 三 个 同 型 矩 阵, 则 命 令 plot3(x,y,z) 将 同 时 绘 出 以 三 个 矩 阵 的 列 向 量 为 坐 标 的 几 条 空 间 曲 线 图 形 另 外, 与 二 维 曲 线 绘 图 命 令 一 样, 对 曲 线 的 颜 色 与 画 线 方 式 也 可 以 作 不 同 选 择 下 面 命 令 中 plot3(x,y,z, s ) s 是 一 个 或 两 个 选 择 参 数 对 于 不 同 的 颜 色 选 取 和 画 线 方 式 选 取 可 以 参 考 二 维 绘 图 命 令 plot 中 的 参 数 列 表 47. 如 何 用 MATLAB 绘 制 曲 面 的 图 形?
M ATLAB 8 问 53/9 MATLAB 绘 制 三 维 曲 面 的 网 面 图 形 指 令 用 mesh, 在 使 用 这 一 指 令 之 前 必 须 给 出 曲 面 在 X-Y 平 面 内 的 规 则 离 散 点 所 对 应 的 函 数 值 ( 曲 面 高 度 ) 数 据 例 如, 绘 制 二 元 函 数 sin x + y z = x + y 的 三 维 网 面 图 这 一 函 数 的 图 形 很 类 似 一 顶 巴 拿 马 草 帽, 如 图 -6 所 示 下 面 的 程 序 体 现 的 主 要 算 法 是, 先 产 生 34 个 介 于 -8 到 +8 之 间 的 X 坐 标 数 据, 以 行 向 量 x 表 示 ; 再 产 生 同 样 多 的 Y 坐 标 数 据 以 y 表 示 ; 然 后 用 命 令 meshgrid 将 这 两 个 向 量 分 别 扩 展 为 矩 阵 ( 第 一 个 矩 阵 x 每 一 列 元 素 相 同, 图 -5 巴 拿 马 草 帽 第 二 个 矩 阵 y 的 每 一 行 元 素 相 同 ) 图 形 这 两 个 矩 阵 分 别 代 表 了 X-Y 平 面 上 十 分 规 则 的 网 格 结 点 的 坐 标, 任 取 两 个 矩 阵 在 某 一 位 置 的 对 应 元 素 形 成 的 数 据 对 代 表 了 平 面 上 某 个 点 处 的 坐 标 根 据 坐 标 数 据 计 算 出 对 应 的 二 元 函 值 数 据, 最 后 绘 出 图 -5 中 图 形 程 序 如 下 : x=-8:.5:8;y=x; [x, y]=meshgrid(x,y); r=sqrt(x,^+y.^)+eps; z=sin(r)./r; mesh(z) 运 行 上 面 程 序,MATLAB 的 图 形 窗 口 将 出 现 图 -5 所 显 示 的 图 形 48. 如 何 绘 制 圆 域 上 的 曲 面 图 形? 图 -7 中 的 空 间 曲 面 图 形 是 由 二 元 函 数 f(x,y) = 3( x + y ) - x 3 在 圆 域 D = { (x,y) x + y 4 } 上 绘 出 的 图 形
M ATLAB 8 问 54/9 图 -6 圆 域 上 的 曲 面 图 形 绘 制 这 一 曲 面 需 要 用 到 MATLAB 的 命 令 mesh(x,y,z), 使 用 这 一 命 令 时 要 求 x,y,z 是 同 型 的 矩 阵 为 了 达 到 要 求, 可 以 作 如 下 变 换, 令 x = r cosθ r 4, θ π y = r sinθ 由 于 (r,θ ) 的 变 化 范 围 是 规 则 的 矩 形 区 域 G = [,4] [,π ], 可 以 将 [, 4] 分 为 等 分, 将 [,π ] 分 为 7 等 分 于 是, 由 G 上 的 离 散 点 坐 标 所 算 出 的 x 离 散 值 和 y 的 离 散 值 就 形 成 了 同 型 矩 阵, 由 这 两 个 同 型 矩 阵 按. 运 算 计 算 出 z = f(x,y) 函 数 值 也 是 同 型 的 矩 阵 用 如 下 程 序 段 绘 出 曲 面 图 形 r=(:)/5;tha=(:7)*pi/36; x=r'*cos(tha);y=r'*sin(tha); z=3*(x.^+y.^)-x.^3; mesh(x,y,z) 为 了 从 另 一 个 角 度 来 观 察 该 图 形, 再 加 上 命 令 view(5,5) 可 得 到 上 面 所 示 的 图 形 49. 如 何 用 从 不 同 角 度 观 察 一 个 三 维 曲 面 图 形?
M ATLAB 8 问 55/9 MATLAB 允 许 用 户 从 各 种 不 同 的 角 度 去 观 察 一 个 已 存 在 的 三 维 图 形 从 用 户 自 己 定 义 的 视 角 观 察 三 维 图 用 命 令 view, 这 一 命 令 的 使 用 格 式 为 view(az,el) 命 令 中 的 两 个 参 数,az 和 el 分 别 表 示 方 位 角 和 俯 视 角 方 位 角 相 当 于 球 坐 标 z 中 的 经 度, 俯 视 角 相 当 于 球 坐 标 中 的 纬 度, 这 两 个 角 度 的 基 准 面 和 方 向 如 图 el -7 所 示 一 般 用 三 维 曲 面 绘 图 命 令 mesh 所 O y 绘 出 的 曲 面 图 形 默 认 视 角 为 az az = -37.5 x el = 3 一 般 用 二 维 绘 图 命 令 例 如 plot 所 绘 出 的 图 形 ( 在 y-z 平 面 上 ) 默 认 视 角 为 图 -7 方 位 角 和 俯 视 角 az = el = 9 例 如,48 问 题 中 的 圆 域 上 的 曲 面 ( 形 如 座 椅 ), 用 命 令 view(3,5) 可 得 如 下 图 形 图 -8 自 选 角 度 观 看 曲 面 图 形
M ATLAB 8 问 56/9 5. 如 何 绘 制 填 充 图 形? 绘 填 充 图 形 用 命 令 fill 例 如, 用 红 色 填 充 一 个 三 角 形, 这 个 三 角 形 的 三 个 顶 点 坐 标 分 别 为 P (,) P (,) P 3 (,) 于 是 三 角 形 顶 点 的 横 坐 标 和 纵 坐 标 可 以 用 两 个 行 向 量 分 别 表 示 横 坐 标 数 据 : [ ] 纵 坐 标 数 据 : [ ] 利 用 fill 命 令 结 合 三 角 形 顶 点 的 横 坐 标 向 量 纵 坐 标 向 量, 以 及 填 充 颜 色 可 以 绘 出 填 充 三 角 形 如 下 命 令 fill([ ],[ ], r ) 可 绘 出 图 -9 中 图 形 再 例 如, 为 了 绘 制 出 正 弦 函 数 sin x 在 区 间 [.5,.5] 上 的 曲 边 梯 形 的 填 充 图 形, 先 令 a =.5,b =.5, 然 后 选 取 有 限 个 自 变 量 的 离 散 点 数 据 x = [a a+. a+. b] 并 计 算 出 对 应 的 正 弦 函 数 值 的 离 散 数 据 y = [sin a sin (a+.) sin b] 为 了 绘 填 充 图 形, 必 须 由 正 弦 曲 线 上 的 离 散 点 加 上 x 坐 标 轴 上 的 点 (a,) 和 (b, ) 形 成 封 闭 的 曲 线, 封 闭 曲 线 的 离 散 点 横 坐 标 和 纵 坐 标 分 别 为 a a a+. b b 和 sin a sin (a+.) sin b 利 用 这 两 组 数 据 就 可 以 绘 曲 边 梯 形 的 填 充 图 了 为 了 使 图 形 清 楚, 还 可 以 事 先 画 出 正 弦 函 数 在 一 个 包 括 [a,b] 的 大 区 间 上 的 曲 线 图 用 下 面 程 序 段 可 绘 出 图 - 中 图 形 x=:.:3.;y = sin(x); plot(x,y),hold a =.5;b =.5; x = a:.:b;y = sin(x); fill([a,x,b],[,y,], r )
M ATLAB 8 问 57/9.8.6.4.5..5 图 -9 三 角 形 填 充 3 4 图 - 曲 边 梯 形 填 充 三. 提 高 篇 用 MATLAB 解 决 数 学 问 题 时, 可 用 交 互 式 ( 人 机 对 话 形 式 ) 的 操 作 方 式 解 决 较 简 单 的 问 题 以 完 成 作 业, 在 解 决 一 般 的 问 题 时, 大 多 数 情 况 下 都 需 要 设 计 程 序, 运 行 调 试 程 序 设 计 MATLAB 的 程 序 时, 需 要 熟 悉 一 些 常 用 的 MATLAB 语 句, 了 解 它 们 的 使 用 方 法 和 技 巧 程 序 绝 不 是 语 句 命 令 的 简 单 组 合 运 行 MATLAB 程 序 时, 如 果 出 现 错 误 信 息, 则 需 要 对 程 序 ( 文 件 ) 进 行 改 写, 如 此 反 复 多 次 才 可 能 编 写 出 优 秀 的 MATLAB 程 序 5. 如 何 使 用 if 条 件 语 句? 在 MATLAB 中, 可 以 利 用 条 件 语 句 来 实 现 分 支 算 法, 最 简 单 的 条 件 语 句 是 if 语 句 当 条 件 满 足 时, 执 行 条 件 后 的 指 令 ; 当 条 件 不 满 足 时, 则 不 执 行 条 件 后 的 指 令 其 具 体 格 式 为 : if < 条 件 > LLLL LLLL 语 句 块 end
M ATLAB 8 问 58/9 在 if 语 句 的 < 条 件 > 选 项 中 至 少 应 有 一 个 关 系 ( 或 逻 辑 ) 表 达 式, 当 表 达 式 的 逻 辑 值 为 真 时, 则 执 行 < 条 件 > 后 面 的 语 句 块 包 含 的 指 令 ; 当 < 条 件 > 中 的 表 达 式 的 逻 辑 值 为 假 时, 则 不 执 行 < 条 件 > 后 面 的 语 句 块 表 达 式 通 常 由 变 量 数 据 关 系 运 算 符 和 逻 辑 运 算 符 组 成, 如 当 a=,b=3 时, 表 达 式 a + b > 为 假 ( 不 成 立 ) 在 建 立 表 达 式 时, 常 用 的 一 些 符 号 列 出 如 下 ( 表 3-) 表 3- 常 用 关 系 符 符 号 名 称 意 义 = = 双 等 号 等 于 < 小 于 号 小 于 > 大 于 号 大 于 <= 小 于 与 等 于 号 小 于 等 于 >= 大 于 与 等 于 号 大 于 等 于 ~= 上 波 号 与 等 号 不 等 于 & 与 号 逻 辑 与 竖 杠 逻 辑 或 ~ 上 波 号 逻 辑 非 sin x 例 如, 计 算 函 数 f( x) = 的 值 当 自 变 量 x 时, 按 函 数 的 表 达 式 计 x 算 函 数 值 ; 当 x = 时, 定 义 函 数 值 为 求 该 函 数 值 的 程 序 用 到 了 分 支 算 法 用 于 分 支 算 法 的 if 语 句, 其 格 式 为 : if < 条 件 > LLLL LLLL 语 句 块 else LLLL LLLL 语 句 块 end 程 序 x=input( input x: ); if x = = y=; else y=sin(x)/x; end
M ATLAB 8 问 59/9 上 面 语 句 的 算 法 结 构 是 : 当 条 件 满 足 时, 执 行 语 句 块 ; 当 条 件 不 满 足 时, 则 执 行 语 句 块 当 条 件 较 多 时 必 须 用 多 分 支 算 法 用 于 多 分 支 算 法 的 if 语 句, 其 格 式 为 : if < 条 件 > LLLL LLLL 语 句 块 elseif < 条 件 > LLLL LLLL 语 句 块 else LLLL LLLL 语 句 块 3- end 5. 如 何 使 用 for 循 环 语 句? 循 环 算 法 的 实 现 有 两 种 形 式 : 一 是 数 控 制 的 循 环, 另 一 种 是 条 件 控 制 的 循 环 前 一 种 形 式 严 格 规 定 循 环 应 进 行 的 次 数, 达 到 循 环 次 数 后 则 终 止 循 环 ; 后 一 种 规 定 了 循 环 应 满 足 的 条 件, 满 足 条 件 则 进 入 循 环, 不 满 足 条 件 则 不 进 入 循 环 MATLAB 中 的 for 循 环 语 句 用 于 数 控 制 的 循 环 的 实 现, 通 过 规 定 循 环 变 量 的 初 值 和 终 值 以 及 步 长 的 设 定 来 达 到 控 制 循 环 次 数 的 目 的 从 循 环 初 值 开 始, 重 复 执 行 某 些 操 作, 直 至 循 环 变 量 达 到 终 值 为 止 具 体 格 式 为 : for < 循 环 变 量 >=< 初 值 >:[ 步 长 :]< 终 值 > LLLL LLLL LLLL 循 环 体 end for 循 环 语 句 中, 当 初 值 小 于 终 值 时, 步 长 为 正 数 ; 当 初 值 大 于 终 值 时, 步
M ATLAB 8 问 6/9 长 应 为 负 数 当 步 长 被 省 略 时,MATLAB 默 认 值 为 例 如, 著 名 的 裴 波 拉 奇 数 列 的 递 推 公 式 为 f n = f n- + f n-, ( n = 3, 4, L ) 它 的 第 一 项 和 第 二 项 的 值 都 是, 即 f =,f = 我 们 可 以 通 过 数 列 的 前 两 项 初 值, 利 用 递 推 公 式 计 算 出 裴 波 拉 奇 数 列 第 三 项 到 第 十 项 中 各 项 的 值 注 意 MATLAB 不 允 许 数 组 的 下 标 为 零 或 负 值, 所 以 数 组 或 矩 阵 的 下 标 只 能 用 正 整 数 递 推 公 式 的 计 算 用 for 循 环 语 句 来 实 现 比 较 方 便 程 序 如 下 f()=;f()=; for k=3: f(k)=f(k-)+f(k-); end f 计 算 机 运 行 后, 屏 幕 显 示 f = 3 5 8 3 34 55 这 表 明 计 算 机 计 算 出 裴 波 拉 奇 数 列 第 三 项 到 第 十 项 的 值 分 别 为 f 3 = f = 4 3 f 5 f 55 5 = = 53. 如 何 说 明 方 波 是 奇 谐 波 的 叠 加 如 下 定 义 的 分 段 函 数, f ( t) =, t [, π ] t [, π ] 图 y 3- 方 波 的 图 形 被 称 为 方 波, 如 右 图 所 示 考 虑 奇 次 谐 波 的 叠 加, 令 O 3.4 x y ( t) = sin t, y ( t) = sin t + sin 3t, 3 y3 ( t) = sin t + sin 3t + sin 5t 3 5 y4 ( t) = sin t + sin 3t + sin 5t + sin 7t, 3 5 7 y5 ( t) = sin t + sin 3t + sin 5t + sin 7t + sin 9t 3 5 7 9 用 如 下 程 序 段 绘 出 y (x) y (x) y 3 (x) y 4 (x) y 5 (x) 的 图 形 t=:.:3.4;x=zeros(size(t)); for k = :5
M ATLAB 8 问 6/9 j = *k-; x = x + sin(j*t)/j; end plot(t,y) y (k,:) = x;.8.6.4..5.5.5 3 3.5 图 3- 方 波 是 奇 次 谐 波 的 叠 加 从 图 3- 中 五 条 曲 线 可 见, 随 着 奇 次 谐 波 叠 加 的 项 数 增 多, 图 形 越 来 越 逼 近 于 方 波 的 图 形 54. 如 何 使 用 while 循 环 语 句? 由 条 件 控 制 的 循 环 算 法 的 实 现 可 以 分 为 两 种 : 一 种 是 将 条 件 的 判 定 放 于 循 环 体 开 始 之 前, 满 足 条 件 则 进 入 循 环, 条 件 不 满 足 时 则 不 进 入 循 环 ; 另 一 种 是 将 条 件 的 判 定 放 于 循 环 体 后 面, 当 条 件 满 足 则 退 出 循 环, 条 件 不 满 足 则 继 续 循 环 while 循 环 语 句 适 用 于 由 条 件 控 制 的 循 环 算 法 的 前 一 种 的 实 现 反 复 执 行 某 些 操 作, 直 至 条 件 不 满 足 为 止 其 具 体 格 式 为 : while < 条 件 >, LLLL LLLL 循 环 体 LLLL end
M ATLAB 8 问 6/9 例 如 产 生 裴 波 拉 奇 数 列 的 有 限 项, 要 求 数 列 中 最 后 一 个 数 不 超 过 数 列 满 足 的 递 推 公 式 为 :f k+ = f k + f k+ (k=,, ), f =,f = 程 序 3.4 f=[ ];i=; while f(i)+f(i+)<, f(i+)=f(i)+f(i+); i=i+; end MATLAB 中 的 for 循 环 语 句 主 要 用 于 实 现 数 控 制 的 循 环 算 法, 而 while 循 环 语 句 则 用 于 条 件 控 制 的 循 环 算 法 在 数 值 计 算 中 for 循 环 语 句 用 得 较 多, 这 是 因 为 很 多 数 值 计 算 问 题 的 递 推 公 式 是 可 以 用 数 进 行 控 制 的 而 while 循 环 语 句 由 于 用 条 件 控 制, 比 较 灵 活, 对 于 编 程 者 来 说 如 果 对 问 题 的 条 件 理 解 不 够, 则 可 能 将 条 件 语 句 设 置 不 好, 使 得 在 程 序 运 行 时 出 现 死 循 环 ( 即 循 环 一 直 进 行 下 去 不 能 自 动 终 止 ) 这 两 种 循 环 语 句 有 时 可 以 相 互 替 代, 在 解 决 问 题 时 常 常 将 两 种 语 句 结 合 起 来 应 用 55. 如 何 实 现 十 进 制 数 与 二 进 制 数 的 相 互 转 换 十 进 制 数 是 人 们 最 熟 悉 且 常 用 的 数, 二 进 制 数 则 是 比 较 陌 生 的 一 类 数 在 用 计 算 机 解 决 实 际 问 题 时, 常 用 到 二 进 制 数 以 及 二 进 制 数 与 十 进 制 数 的 相 互 转 换 如 求 解 规 划 问 题, 用 遗 传 算 法 解 优 化 问 题 等 一 个 二 进 制 数 中 每 一 个 位 都 是 或, 故 可 用 以 或 为 元 素 组 成 的 n 维 向 量 表 示 二 进 制 数, 在 MATLAB 中 实 现 二 进 制 数 到 十 进 制 数 的 转 换 非 常 容 易 例 如, 用 向 量 x= [ ] 表 示 一 个 三 位 二 进 制 数 (), 与 之 对 应 的 十 进 制 数 是 7 按 公 式 () = + + 计 算, 便 得 十 进 制 数 7 实 现 这 一 转 换 可 用 MATLAB 中 多 项 式 求 值 命 令 polyval(x,) 得 到 再 例 如, 为 了 将 五 位 二 进 制 数 () 转 换 为 十 进 制 数, 用 命 令 y=[ ];polyval(y,) ans = 5
M ATLAB 8 问 63/9 这 说 明,() 对 应 于 十 进 制 数 5 如 果 要 将 一 个 十 进 制 数 转 换 为 二 进 制 数, 可 以 用 算 法 来 实 现 由 5 = 4 + 3 + + + = ( ( ( + ) + ) + ) + 知, 如 果 用 连 续 除 这 个 十 进 制 数, 直 到 除 数 为 为 止, 会 依 次 得 余 数,,,, 再 这 5 个 数 颠 倒 秩 序, 便 得 到 对 应 的 二 进 制 数 (), 按 这 一 方 法 编 写 下 面 程 序 段 x=input('input x= '); n=fix(log(x)/log())+; k=n+; while x> k=k-; b(k)=rem(x,); x=fix(x/); end b 如 果 将 这 段 程 序 写 入 一 个 文 件 名 为 bio.m 的 文 件, 运 行 这 段 程 序 时, 在 MATLAB 命 令 窗 口 中 键 入 文 件 名 bio 并 回 车, 输 入 十 进 制 数 5, 将 得 到 b = 56. 如 何 用 break 语 句 中 断 循 环? 为 了 使 循 环 算 法 更 灵 活, 在 实 现 循 环 算 法 时 常 用 到 控 制 转 移 语 句, 以 达 到 在 循 环 计 算 时 中 断 循 环 的 目 的 MATLAB 中 的 转 移 语 句 break 的 使 用 格 式 为 if < 条 件 > break, end 例 计 算 无 穷 级 数 ( ) n= n n! 的 近 似 值 要 求 误 差 不 超 过 由 于 究 竟 应 该 计 算 多 少 项, 在 程 序 开 始 之 前 无 法 确 定, 故 不 能 用 数 控 制 的 循 环 来 实 现 算 法 可 以 考 虑 用 条 件 控 制 的 循 环 算 法 来 实 现 这 一 问 题 的 计 算, 在 计 算 过 程 中 当 误 差 达 到 要 求 时 则 跳 出 循 环, 并 输 出 数 据 结 果 用 while 语 句 编 程 如 下 an=;s=;f=;n=; while n>
M ATLAB 8 问 64/9 an=an/n; if an<e-,break,end f = -f; s = s + f*an; n=n+; end 这 段 程 序 执 行 的 结 果, s =.63, 误 差 界 限 不 超 过 an =.47e- ( 即 47. ) 如 果 没 有 转 移 语 句, 程 序 将 按 照 公 式 求 和, 并 一 直 进 行 下 去 永 不 休 止, 形 成 死 循 环 操 作 者 可 以 考 虑 用 数 控 制 的 循 环 实 现, 计 算 上 面 的 无 穷 级 数 到 项 并 将 数 据 结 果 与 上 面 的 结 果 作 比 较 57. 怎 样 求 解 水 手 猴 子 和 椰 子 问 题? 问 题 如 下 : 有 五 个 水 手 带 了 一 只 猴 子 来 到 南 太 平 洋 的 一 个 荒 岛 上, 发 现 那 里 有 一 大 堆 椰 子 由 于 旅 途 的 颠 簸, 大 家 都 很 疲 倦, 很 快 就 入 睡 了 第 一 个 水 手 醒 来 后, 把 椰 子 平 分 成 五 堆, 并 将 多 余 的 一 个 椰 子 给 了 猴 子, 他 私 藏 了 一 堆 后 便 又 去 睡 了 第 二 第 三 第 四 第 五 个 水 手 也 陆 续 起 来, 和 第 个 水 手 一 样, 把 椰 子 平 分 成 五 堆 后, 将 恰 好 多 的 一 个 也 给 猴 子, 并 私 藏 了 一 堆, 再 去 入 睡 天 亮 以 后, 大 家 把 余 下 的 椰 子 重 新 等 分 成 五 堆, 每 人 分 一 堆, 正 好 余 一 个 再 给 猴 子 试 问 原 先 共 有 几 个 椰 子? 求 解 这 一 问 题 可 以 用 递 推 算 法 首 先 分 析 椰 子 数 目 的 变 化 规 律, 设 最 初 的 椰 子 数 为 p, 即 第 一 个 水 手 所 处 理 之 前 的 椰 子 数, 用 p p p 3 p 4 p 5 分 别 表 示 五 个 水 手 对 椰 子 动 了 手 脚 以 后 剩 余 的 椰 子 数 目, 则 根 据 问 题 有 4 pk + = ( pk ), ( k =,,, 3, 4) 5 再 用 x 表 示 最 后 每 个 水 手 平 分 得 到 的 椰 子 数, 于 是 有 x = ( p 5 ) 5 所 以 p 5 = 5x + 利 用 逆 向 递 推 的 方 法, 有 5 pk = pk + +, ( k = 4, 3,,, ) 4
M ATLAB 8 问 65/9 有 了 逆 向 递 推 关 系 式, 求 解 这 一 问 题 似 乎 很 简 单, 但 由 于 椰 子 数 为 一 正 整 数, 用 任 意 的 x 作 为 初 值 递 推 出 的 p 数 据 不 一 定 是 合 适 的 这 里 用 for 循 环 语 句 结 合 break 语 句 来 寻 找 合 适 的 x 和 p, 对 任 意 的 x 递 推 计 算 出 p, 当 计 算 结 果 为 正 整 数 时, 结 果 正 确, 否 则 选 取 另 外 的 x 再 次 重 新 递 推 计 算, 直 到 计 算 出 的 结 果 p 为 正 整 数 为 止 程 序 如 下 n=input( input n: ); for x=:n p=5*x+; for k=:5 p=5*p/4+; end if p= =fix(p),break,end end disp([x,p]) 运 行 这 段 程 序 后, 屏 幕 出 现 要 求 从 键 盘 输 入 x 数 据 的 信 息 input n, 输 入 后,MATLAB 计 算 出 合 适 的 x 和 p 的 值 为 3 56 为 了 验 证 结 论 的 正 确 性, 可 从 理 论 上 来 作 一 番 分 析 由 于 所 以 p 5 5 5 5 5 5 = p + = ( ( ( ( (5x + ) + ) + ) + ) + ) + 4 4 4 4 4 4 6 6 6 5 5 5 5 3 5 4 5 5 5 5 = x + + + ( ) + ( ) + ( ) + ( ) = x + 5 5 5 4 4 4 4 4 4 4 4 6 5 p = ( x + ) 4 5 4 要 使 得 最 初 的 椰 子 数 p 为 整 数, 必 须 取 (x +) 为 4 5 ( =4) 的 倍 数, 一 种 简 单 的 处 理 可 取 x = 3 4 58. 如 何 绘 出 多 条 抛 射 曲 线 以 及 它 们 的 包 络 线? 抛 射 物 体 的 运 动 可 描 述 为 平 面 上 一 个 动 点 的 轨 迹, 即 抛 射 曲 线, 其 参 数 方 程 为
M ATLAB 8 问 66/9 x = v y = v cosα t sinα t 其 中 g 是 重 力 加 速 度, 动 点 初 始 速 度 为 v, 发 射 角 度 为 α 当 发 射 角 度 在 区 间 [, π / ] 内 变 化 时, 不 同 发 射 角 便 形 成 不 同 曲 线 由 v sinα t gt 解 之, 得 弹 落 点 所 对 应 的 参 数 值 gt = t = v sinα g 所 以, 对 发 射 角 α, 参 数 t 的 变 化 范 围 为 [,t ] 为 了 简 化 问 题, 取 v = 下 面 程 序 段 可 绘 制 曲 线 簇 中 的 n- 条 曲 线 n=input( input n: ); 数 alpha=(:n-)*pi/(*n); for k=:n- 数 据 a=alpha(k); v=cos(a);v=sin(a); t=v/4.9; t=(:6)*t/6; 输 入 数 据 n, 确 定 所 绘 曲 线 簇 曲 线 确 定 不 同 曲 线 所 对 应 的 发 射 角 开 始 计 算 n- 条 曲 线 上 的 离 散 点 选 取 α 的 值 计 算 初 始 速 度 分 量 确 定 参 数 值 x(k,:)=v*t;y(k,:)=v*t-4.9*t.^; 确 定 曲 线 上 离 散 点 坐 标 数 据 end plot(x',y') 同 时 绘 出 曲 线 簇 中 n- 条 曲 线 运 行 上 面 程 序, 输 入 n = 则 可 以 绘 出 图 3-3 中 的 8 条 曲 线
M ATLAB 8 问 67/9.6.5.4.3.. -...4.6.8.. 不 同 发 射 角 所 形 成 的 抛 射 线 构 成 一 曲 线 簇, 如 果 存 在 一 条 曲 线 L, 曲 线 簇 中 每 一 曲 线 都 与 L 相 切, 则 称 L 为 该 曲 线 簇 的 包 络 对 于 参 数 方 程, 曲 线 族 的 包 络 曲 线 由 x y y x x = x( t, α), y = y( t, α), = t α t α 消 去 参 变 量 λ 而 得 到 在 上 面 抛 射 线 族 的 包 络 曲 线 中 x x = v cosα, = v sinα t t α y y = v sinα gt, = v cosα t t α 由 x y y x = 图 3-3 不 同 发 射 角 形 成 的 抛 射 t α t α 线 簇 即 sin α t[sinα gt] cosα cosα t = 求 解 得 sin α = gt 代 入 曲 线 族 的 参 数 方 程, 便 得 包 络 曲 线 的 参 数 方 程 为
M ATLAB 8 问 68/9 x = y = t g g gt t g 下 面 程 序 段 将 绘 制 出 曲 线 簇 的 包 络 曲 线 ( 又 称 为 安 全 抛 物 线 ) g=9.8; t=/g:.:sqrt()/g; x=sqrt(t.^-/g^); y=/g-.5*g*t.^; plot(x,y) g.6.5.4.3.. -...4.6.8.. 图 3-4 曲 线 簇 及 其 包 络 59. 如 何 输 入 大 型 稀 疏 矩 阵 的 数 据? 当 一 个 矩 阵 中 只 含 一 部 分 非 零 元 素, 而 其 余 均 为 元 素 时, 我 们 称 这 一 类 矩 阵 为 稀 疏 矩 阵 在 实 际 问 题 中, 相 当 一 部 分 的 线 性 方 程 组 的 系 数 矩 阵 是 大 型 稀 疏 矩 阵, 而 且 非 零 元 素 在 矩 阵 中 的 位 置 表 现 得 很 有 规 律 为 了 提 高 工 作 效 率,MATLAB 提 供 了 稀 疏 矩 阵 的 创 建 命 令 和 稀 疏 矩 阵 的 存 储 方 式 创 建 一 个 稀 疏 矩 阵 常 用 命 令 为 sparse 使 用 格 式 如 下 A = sparse( I,J,S,m,n,nzmax ) 其 中,S 是 稀 疏 矩 阵 中 所 有 非 零 元 素 组 成 的 列 向 量 ;I,J 分 别 为 非 零 元 素 的 行
M ATLAB 8 问 69/9 下 标 和 列 下 标 构 成 的 列 向 量 ;m,n 表 明 A 是 m n 阶 矩 阵 ( 可 省 略 );nzmax 用 于 指 定 A 中 非 零 元 素 所 用 存 储 空 间 大 小 ( 可 省 略 ) 最 简 单 的 使 用 方 式 是 只 输 入 非 零 元 的 数 据 以 及 各 非 零 元 的 行 指 标 和 列 指 标 例 如, 创 建 一 个 只 有 三 个 非 零 元 的 4 5 阶 矩 阵 可 用 下 面 命 令 6 A = 7 8 i=[ 4];j=[ 3 5];s = [6 7 8]; A = sparse(i,j,s) MATLAB 执 行 后, 将 显 示 出 A = (,) 6 (,3) 7 (4,5) 8 这 是 特 殊 的 稀 疏 矩 阵 存 储 方 式, 它 的 特 点 是 所 占 内 存 少, 运 算 速 度 快 如 果 想 得 到 矩 阵 的 全 元 素 存 储 方 式, 可 用 下 面 命 令 B = full(a) 计 算 机 运 行 后, 将 显 示 出 B = 6 7 8 另 一 个 创 建 稀 疏 矩 阵 命 令 是 spdiags 它 主 要 用 于 创 建 非 零 元 素 位 于 矩 阵 的 对 角 线 上 的 情 况 例 如, 创 建 一 个 三 对 角 的 矩 阵 4 4 A = O O O 4 4 可 用 下 面 命 令
M ATLAB 8 问 7/9 e = ones (,); A = spdiags ([ e,4*e,e ],[-,,],,); B = full (A) 这 里,A 是 稀 疏 矩 阵 存 储 的 方 式,B 是 全 元 素 存 储 的 方 式 B = 4 4 4 4 4 4 4 4 4 4 6. 如 何 绘 制 出 图 论 中 的 图 形? 绘 制 一 个 图 论 中 的 图 形 用 命 令 gplot 在 图 论 中, 一 个 图 G 是 指 一 个 点 的 集 合 及 其 连 线 的 集 合 所 组 成 的 图 形 点 的 集 合 中, 点 的 编 号 为,,,n; 点 之 间 的 连 结 情 况 可 以 用 一 个 称 为 邻 接 矩 阵 的 n 阶 矩 阵 A 来 描 述,A 中 的 元 素 a i j 不 为 零 时 表 示 点 i 和 点 j 是 相 连 的 而 点 的 集 合 可 以 用 一 个 坐 标 数 组 xy 来 描 述, 这 个 数 组 的 第 i 行 两 个 元 素 表 明 第 i 个 点 的 坐 标, 即 xy(i,:)=[x i,y i ], ( i =,,,n ) 绘 制 图 论 图 形 命 令 的 使 用 格 式 为 gplot (A,xy) 这 里,A 是 邻 接 矩 阵,xy 则 是 点 的 坐 标 数 组 例 如, 为 了 绘 出 一 个 邻 接 矩 阵 为 A = 的 图, 图 中 四 个 点 的 坐 标 分 别 为 :P (,) P (,) P 3 (,) P 4 (,) 用
M ATLAB 8 问 7/9 如 下 的 程 序 可 绘 出 图 3-5 中 图 形 A = [ ; ; ; ]; xy =[ ; ; ; ]; gplot(a,xy); axis('off') 如 果 加 上 下 面 命 令 可 得 有 点 编 号 的 图 3-6 中 的 图 形 x=xy(:,);y=xy(:,); for i = :4,text(x(i),y(i),intstr(i));end 3 4 图 3-5 图 3-6 6. 如 何 求 多 项 式 拟 合 函 数? 如 果 已 经 获 得 如 下 的 一 组 实 验 数 据 X x x x m Y y y y m 可 以 用 多 项 式 曲 线 拟 合 函 数 命 令 polyfit, 来 获 得 一 个 反 映 数 据 规 律 的 多 项 式 函 数 这 一 命 令 的 使 用 格 式 为 P ( x) L x + a n n n = a x + ax + + an polyfit(x,y,n) 其 中,n 是 所 求 拟 合 多 项 式 的 阶 数, 可 以 人 为 确 定 拟 合 多 项 式 在 拟 合 点 处 的 函 数 值 与 被 拟 合 的 数 据 值 之 间 满 足 p(x i ) y i, 这 是 最 小 二 乘 意 义 下 的 多 项 式 拟 合 例 如, 炼 钢 厂 出 钢 时 所 用 的 盛 钢 水 的 钢 包, 在 使 用 过 程 中 由 于 钢 液 及 炉 渣 对 包 衬 耐 火 材 料 的 侵 蚀, 使 其 容 积 不 断 增 大, 经 过 试 验, 钢 包 的 容 积 与 相 应 的 使 用 次 数 的 数 据 如 下 表 n
M ATLAB 8 问 7/9 表 3- 使 用 次 数 x 容 积 y 使 用 次 数 x 容 积 y 6.4.59 3 8.6 4.6 4 9.58 5.9 5 9.5 6.76 7. 8. 8 9.93 9..49 下 面 程 序 用 三 次 多 项 式 拟 合 上 面 表 中 数 据, 并 画 出 拟 合 曲 线 及 散 点 图 x=[ 3 4 5 7 8 4 5 6 8 9]; y=[6.4 8.6 9.58 9.5 9.93.49.59.6.9.76.]; v=polyfit(x,y,3); t=:.5:9;u=polyval(v,t); plot(t,u,x,y, * ) 程 序 运 行 后,MATLAB 将 绘 出 离 散 点 及 拟 合 曲 线 如 图 3-7 9 8 图 3-7 离 散 点 及 拟 合 曲 线 7 6 而 polyfit 的 执 行 结 果 为 v 的 值 (a a a a 3 ).33 -.4.53 4.484
M ATLAB 8 问 73/9 6. 如 何 使 用 多 项 式 插 值 命 令 MATLAB 中 常 用 的 数 据 插 值 命 令 列 表 如 下 interp interp 表 3-3 一 元 函 数 插 值 二 元 函 数 插 值 interpft 用 快 速 付 氏 变 换 的 一 元 插 值 griddata 二 元 函 数 离 散 点 插 值 一 元 函 数 插 值 处 理 这 样 一 类 的 问 题 : 如 果 已 知 函 数 y = f (x) 在 点 x, x,,x n 处 的 函 数 值, 即 已 知 表 X x x x n Y y y y n 中 的 数 据, 现 在 要 通 过 满 足 条 件 P(x j ) = y j ( j =,,,n ) 的 插 值 函 数 P(x) 计 算 出 自 变 量 在 离 散 点 t,t,,t m ( m>n ) 处 的 函 数 值 如 果 记 X=[x x x n ],Y=[y y y n ],XI=[ t t t m ], 则 一 元 函 数 插 值 命 令 YI = interp(x,y,xi, method ) 将 得 出 向 量 YI, 这 一 向 量 的 元 素 就 是 对 应 于 XI 中 每 一 元 素 的 插 值 函 数 值 u = P(t ),u = P (t ),,u m = P (t m ) 在 实 现 这 一 计 算 的 过 程 中, 构 造 几 种 不 同 插 值 函 数 的 依 据 是 向 量 X 和 Y 如 果 省 略 了 参 数 method, 将 由 分 段 线 性 插 值 的 方 法 计 算 出 数 据 结 果 这 一 参 数 的 选 择 有 下 面 三 个 表 3-4 'linear' 分 段 线 性 插 值 方 法 'spline' 三 次 样 条 插 值 方 法 'cubic' 分 段 三 次 插 值 方 法 无 能 哪 一 方 法 都 要 求 X 的 元 素 按 单 调 排 列 ; 而 分 段 三 次 插 值 方 法 要 求 X 的 元 素 按 等 距 离 分 布 例 如, 取 正 弦 曲 线 上 个 点 的 自 变 量 和 函 数 值 点, 再 选 取
M ATLAB 8 问 74/9 4 个 自 变 量 点, 计 算 确 定 插 值 函 数 的 值 分 别 用 三 种 方 法 计 算, 程 序 如 下 x = :; y = sin(x); xi = :.5:; y = interp(x,y,xi); y=interp(x,y,xi,'cubic'); y3=interp(x,y,xi,'spline'); plot(x,y,'o',xi,y,xi,y,'-.',xi,y3).5 -.5-4 6 8 图 3-8 三 种 插 值 方 法 比 较 从 图 3-8 可 以 看 出, 样 条 插 值 和 三 次 分 段 插 值 效 果 较 好, 而 分 段 线 性 插 值 则 较 差 63. 如 何 对 数 据 作 样 条 插 值 处 理? 实 现 数 据 的 三 次 样 条 插 值 用 命 令 spline 这 一 命 令 的 功 能 是 根 据 函 数 表 X x x x n Y y y y n 中 的 数 据, 以 及 新 的 自 变 量 离 散 数 据 t,t,,t m ( m>n ) 用 三 次 样 条 插 值 函 数 计 算 出 对 应 的 函 数 值 u = f (t ),u = f (t ),,u m = f (t m ) 如 果 记 T=[ t,t,,t m ], 则 样 条 插 值 命 令 使 用 格 式 如 下 U =spline(x,y,t ) 这 里,U 是 经 计 算 得 出 的 对 应 于 T 中 自 变 量 数 据 的 函 数 值 例 如, 下 面 程 序 段 是 先 取 自 变 量 的 离 散 数 据 x = [ ], 并 计 算 出 对 应 的 正 弦 函 数 值 ; 然 后 再 取 自 变 量 的 数 据 xi = [.5.5 9.75 ], 最 后 用 命 令 spline 计 算 出 新 的 自 变 量 离 散 数 据 点 处 的 函 数 值 并 根 据 数 据 绘 出 图 形 x = :;y = sin(x);
M ATLAB 8 问 75/9 xi = :.5:; yi = spline(x,y,xi); plot(x,y, o,xi,yi).5 -.5-4 6 8 图 3-9 三 次 样 条 插 值 曲 线 由 图 3-9 可 见, 尽 管 只 取 了 正 弦 函 数 个 点 处 的 数 据 值, 但 三 次 样 条 插 值 计 算 出 的 数 据 所 绘 图 形 却 与 正 弦 曲 线 非 常 相 似 64. 如 何 实 现 数 据 滤 波? 在 信 号 处 理 中, 对 于 带 有 噪 声 的 数 据 需 要 进 行 滤 波 MATLAB 提 供 了 一 个 滤 波 器 用 以 实 现 数 据 滤 波 设 被 滤 波 的 数 据 向 量 为 X = [ x x x N ] 滤 波 器 分 母 分 子 向 量 为 A = [a a a na ],B = [b b b nb ] 数 据 滤 波 命 令 的 使 用 格 式 为 Y = filter (B,A,X) 下 面 的 程 序 是 做 一 个 滤 波 实 验, 带 噪 声 的 输 入 信 号 经 滤 波 后 得 输 出 信 号 t=linspace(,,); % 定 义 时 间 轴 s=sin(*pi/5*t); % 原 始 信 号 noise=.*rand(size(t)); % 定 义 噪 声 x=s+noise; % 带 噪 声 的 输 入 信 号 y=zeros(size(x)); A=[ -.9]; B=[.5.6]; y=filter(b,a,x); % 使 用 滤 波 器
M ATLAB 8 问 76/9 plot(t,x,'b',t,y,'r') % 作 图.5.5 -.5-4 6 8 图 3- 滤 波 实 验 65. 如 何 用 蒙 特 卡 罗 法 计 算 定 积 分 和 重 积 分? 设 函 数 f(x) 的 值 介 于 和 之 间, 定 积 分 f ( x) dx 的 几 何 意 义 是 曲 边 梯 形 面 积, 此 曲 边 梯 形 位 于 正 方 形 D = {( x, y) x, y } 的 内 部 显 然,D 的 面 积 为, 用 随 机 投 点 的 方 法 在 区 域 D 内 产 生 充 分 多 的 均 匀 分 布 的 点 ( 至 少 个 点 ) 设 随 机 点 总 数 为 N, 这 些 点 随 机 地 落 入 D 中 任 何 一 处, 于 是, 落 入 曲 边 梯 形 内 点 的 数 目 m 与 N 之 比 反 映 了 曲 边 梯 形 面 积 与 正 方 形 D 的 面 积 之 比 由 此 计 算 曲 边 梯 形 y < x 面 积 近 似 值 m f ( x) dx ( D 的 面 积 ) = m N N O x 这 种 计 算 定 积 分 的 方 法 被 称 为 蒙 特 卡 罗 方 法 例 如, 为 了 计 算 定 积 分 图 3- x dx, 将 如 下 程 序 x=rand(,); s=sum(x(:,).^-x(:,)>=)/; 重 复 计 算 6 次, 得 结 果 表 3-5 y
M ATLAB 8 问 77/9 第 k 次 3 4 5 6 数 据.3396.3335.3363.3339.346.339 由 表 中 数 据 可 知, 每 次 计 算 的 结 果 都 接 近 于 定 积 分 准 确 值 /3 由 于 随 机 因 素 的 影 响, 计 算 机 模 拟 的 结 果 可 能 不 一 样, 但 是 各 次 计 算 所 得 数 据 总 是 在 准 确 值 附 近 摆 动 考 虑 重 积 分 的 情 形, 例 如, 图 3- 中 的 锥 形 冰 淇 淋 图 形 它 的 体 积 是 由 锥 面 与 球 面 所 围 空 间 区 域 的 大 小 可 通 过 二 重 积 分 z [( + x y ) x + y ] dxdy D 求 得 其 中 D = {( x, y) x + y } 所 求 的 锥 形 体 可 表 示 为 O G = {( x, y, z) x + y z( z), x + y z } y x 它 位 于 长 方 体 图 3- 锥 形 冰 淇 淋 图 Ω= {( xyz,, ) x, y, z } 的 内 部, 所 形 以 可 用 蒙 特 卡 罗 方 法 计 算 G 的 体 积, 其 思 路 是 在 区 域 Ω 内 产 生 N 个 随 机 点, 由 于 这 N 个 点 是 均 匀 分 布 的, 故 落 入 区 域 G 内 的 点 的 数 目 与 总 的 随 机 点 的 数 目 N 之 比 反 映 了 空 间 区 域 G 与 空 间 区 域 Ω 的 体 积 之 比 若 在 长 方 体 内 部 随 机 投 点 N = 个, 然 后 统 计 锥 形 体 内 的 随 机 点 数 m, 则 可 按 公 式 m V 8 计 算 出 重 积 分 的 近 似 值 所 用 程 序 如 下 for k=: r=rand(,3);x=*r(:,)-;y=*r(:,)-;z=*r(:,3); f=x.^+y.^; p(k)=8*sum(f-z.*z<=&f-z.*(-z)<=)/; end p 程 序 运 行 后, 十 次 计 算 数 值 为
M ATLAB 8 问 78/9 3.7 p = 3.3 3.736 3.4 3.368 3.4 3.6 3.34 3.98 3.84 它 们 都 很 接 近 这 一 积 分 的 准 确 值 π. 66. 如 何 用 赛 德 尔 迭 代 法 求 解 线 性 方 程 组? 线 性 方 程 组 的 一 般 形 式 为 或 写 成 紧 凑 格 式 a x + a x + L + a nxn = b a x + a x + L + a nxn = b LLLLLLLL a x + a x + L + a x = b n a i j x j = j= 赛 德 尔 迭 代 法 计 算 格 式 为 ( k + ) i i n ( k + ) [ bi ai j x j aii j= j= i+ n n nn n n b,( i =,,,n ) i ( k ) x = a x ],( i =,,,n ) 其 中,k 是 迭 代 次 数 例 如, 用 赛 德 尔 迭 代 法 求 解 下 列 方 程 组 5x x x3 x4 = 4, x + x x3 x4 =, x x + 5x3 x4 = 8, x x x3 + x4 = 34 该 方 程 组 的 准 确 解 为 x =,x =,x 3 = 3,x 4 = 4 赛 德 尔 迭 代 法 求 解 方 程 组 MATLAB 程 序 如 下 a=[5 - - -;- - -;- - 5 -;- - - ]; b=[-4;;8;34];x=[;;;]; for k=:8 eorr=; for i=:4 i j j
M ATLAB 8 问 79/9 s=x(i);x(i)=; x(i)=(b(i)-a(i,:)*x)/a(i,i); eorr=max(abs(s-x(i)),eorr); end x',pause,eorr end 程 序 运 行 后, 将 显 示 出 每 一 次 迭 代 计 算 的 解 的 近 似 向 量 和 误 差 估 计 值 表 3-6 第 k 次 x x x 3 x 4 6.4546888.99954339759 3.5566974 3.9998479579789 4 6 7.9998993693.36769.99985768769 4.64386 8 5 8.6684579.9999643376 3.849878 3.99999833533 9 3 4 误 差 估 计 为 X X ( 7 ) ( 8 ) =.786469383 4 这 说 明 随 着 迭 代 次 数 的 增 加, 迭 代 向 量 将 不 断 逼 近 方 程 组 的 准 确 解 67. 如 何 计 算 二 项 分 布 随 机 变 量 的 概 率 值? 二 项 分 布 是 常 用 的 离 散 随 机 变 量 的 分 布 类 型 当 随 机 变 量 的 取 值 范 围 很 大 时, 人 们 常 用 泊 松 分 布 的 公 式 来 做 近 似 计 算 例 如, 已 知 随 机 变 量 X ~B(6,.4) 由 二 项 分 布 随 机 变 量 的 分 布 律 知 P{ X = k} = C, (k =,,,3,4,5,6) k k 6 k 6 (.4) (.6) 为 了 计 算 出 七 个 概 率 值, 需 要 对 组 合 数 C 6! 6 5 L (6 k + ) k 6 = = (6 k)! k! L k 进 行 计 算, 组 合 数 中 的 分 子 与 分 母 是 有 限 个 数 的 连 乘, 在 MATLAB 中 可 以 用 命 令 prod 来 实 现 下 面 程 序 可 计 算 出 随 机 变 量 X ~B(n,p) 的 分 布 律 中 的 不 同 概 率 值 p=input('input p= ');
M ATLAB 8 问 8/9 n=input('input n= '); q=-p; for k=:n m=prod(n-k+:n); mm=prod(:k); b(k+)=p^k*q^(n-k)*m/mm; end b()=q^n 对 于 X ~B(6,.4), 由 于 n = 6,p =.4 当 程 序 运 行 时, 屏 幕 出 现 要 求 输 入 参 数 的 信 息 input p= 和 input n= 6, 此 时, 分 别 输 入 :.4 和 6, MATLAB 将 计 算 出 7 个 概 率 值 数 据 如 下 b =.467.866.3.765.38.369.4 考 虑 数 字 通 讯 中 误 码 概 率 的 计 算 某 一 条 通 讯 线 路 以 第 秒 5 3 个 或 的 速 度 传 输 信 息, 已 知 误 码 率 为 p = -7, 求 秒 钟 内 出 现 一 个 误 码 的 概 率 由 二 项 分 布 的 分 布 律 知, 概 率 计 算 公 式 为 P = C 7 7 5 4 ( ) 5 对 于 这 样 的 计 算, 可 以 在 MATLAB 的 命 令 窗 口 中 键 入 命 令 (5/)*(-.)^(5-) 可 得 概 率 值 ans =.368 如 果 用 泊 松 分 布 做 近 似 计 算, 则 有 4 P( X k λ λ = k) e k! 其 中, λ = n p 由 于 n = 5,p = -7, 所 以 用 下 列 命 令 lamda =5/ lamda*exp(-lamda) 计 算 出 概 率 值 为 ans =.368 这 一 结 论 与 前 面 是 一 致 的 68. 如 何 产 生 两 点 分 布 的 随 机 数? MATLAB 所 提 供 的 随 机 数 发 生 器, 只 能 产 生 均 匀 分 布 随 机 数 和 标 准 正 态 分 布 的 随 机 数 两 种, 其 它 分 布 的 随 机 数 的 产 生 可 以 借 助 于 均 匀 分 布 随 机 数 根 据 分 布 律 构 造 产 生 出 来 两 点 分 布 随 机 数 描 述 了 一 个 随 机 事 件 要 么 发 生 要 么 不 发 生 两 种 可 能 结 果
M ATLAB 8 问 8/9 设 某 一 事 件 A 发 生 的 概 率 为 p, 则 事 件 A 不 发 生 的 概 率 为 (-p) 由 于 p 是 介 于, 之 间 的 数, 所 以 p 将 [,] 区 间 分 为 两 部 分, 即 (,p] 和 (p, ) 当 一 个 均 匀 分 布 的 随 机 数 落 入 第 一 个 区 间 时, 可 以 认 为 事 件 A 发 生 ; 反 之 则 事 件 A 不 发 生 所 以, 由 MATLAB 产 生 一 个 均 匀 分 布 随 机 数 x, 再 由 此 构 成 一 个 两 点 分 布 的 随 机 数 y, x (, p] y = 或, x ( p, ), y =, x (, p) x [ p, ) 例 如, 个 产 品 中 有 个 次 品, 则 可 以 认 为 随 机 抽 取 一 个 产 品 是 次 品 的 概 率 p=/ 为 了 模 拟 抽 查 8 个 产 品 中 次 品 数 目 的 实 际 情 况, 用 如 下 程 序 段 x=rand(,8) y=-fix(x+.9) 上 面 程 序 中, 第 一 行 产 生 8 个 均 匀 分 布 的 随 机 数 向 量 x, 第 二 行 中 fix(x+.9) 将 x 中 大 于 等 于. 元 素 变 为, 将 小 于. 的 元 素 变 为, 所 以 第 二 行 命 令 最 后 将 小 于. 的 元 素 变 为, 而 其 余 的 元 素 变 为 下 面 是 模 拟 三 次 的 结 果 表 3-7 x.7.93.76.65.475.736.38.636 y x.7564.99.3653.47.986.77.7534.655 y x.77.636.8847.77.4364.7665.4777.378 y 69. 如 何 用 计 算 机 模 拟 Galton 板 试 验?
M ATLAB 8 问 8/9 六 级 Galton 板 试 验 如 图 3-3 所 示 当 小 球 从 顶 部 向 落 下 时, 遇 到 第 一 层 隔 板, 此 时 小 球 向 左 落 下 或 向 右 落 下 的 可 能 性 各 占 一 半, 即 小 球 往 左 或 往 右 的 概 率 各 为.5; 当 小 球 继 续 下 落 遇 到 第 二 层 隔 板 时, 小 球 往 左 或 往 右 的 概 率 仍 然 是 各 占 二 分 之 一 ; 以 后 每 一 层 情 况 都 是 如 此, 最 后 到 了 第 六 层 底 部, 小 球 将 落 入 底 部 七 个 槽 中 的 其 中 一 个 但 是 小 球 究 竟 落 入 哪 一 个 小 槽 内 的 概 率 是 不 一 样 的 如 果 将 这 七 个 槽 编 号 为,,, 图 3-3 Galton 板 试 3,4,5,6, 将 小 球 最 终 落 入 某 一 确 定 槽 的 编 号 验 记 为 随 机 变 量 X, 则 X 的 取 值 为 :,,,3,4,5,6 这 是 一 个 二 项 分 布 的 古 典 概 率 模 型 考 虑 小 球 在 第 j 层 落 下 时, 可 能 往 左, 也 可 能 往 右, 用 X j 表 示, 则 X j (j=,,,6) 服 从 两 点 概 率 分 布, 当 X j 取 值 为 时, 表 示 小 球 向 左 落 下 ; 当 X j 取 值 为 时, 表 示 小 球 向 右 落 下 其 分 布 律 为 X j P.5.5 令 X=X +X +X 3 +X 4 +X 5 +X 6 则 有 根 据 二 项 分 布 随 机 变 量 的 分 布 律 X = 6 X j j= ~B(6,.5) P{ X = k} = C, (k =,,,3,4,5,6) k k 6 k 6 (.5) (.5) 将 分 布 律 写 成 表 格 形 式, 需 要 计 算 上 面 的 七 个 概 率 值 在 计 算 过 程 中, 涉 及 到 组 合 数 C k 6 6! 6 5 L ( k + ) = = (6 k)! k! L (6 k) 在 组 合 数 的 计 算 中, 要 用 到 有 限 个 数 的 连 乘, 在 MATLAB 中 计 算 连 乘 可 以 用 指 令 prod 来 实 现 下 面 程 序 可 计 算 出 上 面 二 项 分 布 的 7 个 概 率 值 t=.5^6; for k=:6 m=prod(k+:6);n=prod(:6-k);
M ATLAB 8 问 83/9 p(k+)=t*m/n; end p()=t 在 MATLAB 环 境 中 运 行 上 面 的 程 序, 计 算 机 可 计 算 出 7 个 概 率 值 如 下 : 表 3-8 X 3 4 5 6 P.56.938.344.35.344.938.56 或 者 将 概 率 写 做 分 数 形 式 表 3-9 X 3 4 5 6 P /64 3/3 5/64 5/6 5/64 3/3 /64 考 虑 用 计 算 机 模 拟 小 球 落 下 的 过 程, 在 每 一 层, 当 小 球 往 左 或 往 右 落 下 时 用 计 算 机 模 拟 产 生 一 个 二 进 制 数 或 当 小 球 落 入 最 底 层 时, 已 经 有 了 六 个 二 进 制 数, 它 所 落 入 的 小 槽 的 号 码 应 该 是 将 这 六 个 二 进 制 数 按 十 进 制 数 加 法 法 则 相 加 的 结 果 将 这 一 小 球 下 落 的 模 拟 过 程 重 复 次, 可 以 统 计 出 小 球 落 入 各 小 槽 内 的 次 数 ( 即 频 数 ) 也 可 以 画 出 七 个 频 数 数 据 的 直 方 图 ( 图 3-4) p=rand(6,); q=sum(fix(p+.5)); 图 3-4 频 数 直 方 图 hist(q,7),pause s=[ ];q=q+; for k=: j=q(k);s(j)=s(j)+; end s 程 序 运 行 结 果 为 5 96 34 34 4 这 说 明, 在 做 次 实 验 后, 小 球 落 入 各 个 小 槽 内 的 频 数 分 别 为 上 面 的 7 个 数 据 表 3- X 3 4 5 6 F 5 96 34 34 4
M ATLAB 8 问 84/9 由 表 -7 可 以 计 算 出 小 球 落 入 各 小 槽 内 的 频 率 如 下.5.96.34.34.4.. 7. 如 何 用 计 算 机 模 拟 追 赶 曲 线? 狼 追 兔 子 问 题 是 欧 洲 文 艺 复 兴 时 代 著 名 人 物 达 芬 奇 提 出 的 一 个 有 趣 的 问 题 当 一 只 兔 子 正 在 它 的 洞 穴 南 面 6 码 处 觅 食 时, 一 只 饿 狼 出 现 在 兔 子 正 东 的 码 处. 兔 子 急 忙 奔 向 自 己 的 洞 穴, 狼 立 即 以 快 于 兔 子 一 倍 的 速 度 紧 追 兔 子 不 放. 问 狼 是 否 会 追 赶 上 兔 子? 设 兔 子 所 在 位 置 为 动 点 Q, 狼 所 在 位 置 为 动 点 P 在 时 刻 t k, 两 个 动 点 的 坐 标 分 别 为 :Q(u k, v k ), P(x k, y k ), 动 点 P 的 轨 迹 就 是 追 赶 曲 线 在 t k 时 刻 到 t k+ 时 刻 这 个 时 段,P 点 的 运 动 方 向 可 以 用 单 位 向 量 描 述 : r e = x k + ( t k y ) k xk tk yk 显 然,u k =,v k = t k 根 据 题 设 在 初 始 时 刻 兔 子 和 狼 的 位 置 分 别 为 Q(,),P(,) 初 始 时 刻 的 狼 兔 距 离 为 码, 我 们 不 妨 规 定 当 狼 兔 距 离 小 于.5 码 时, 兔 子 被 狼 追 上, 结 束 追 赶 下 面 MATLAB 程 序 可 计 算 并 绘 制 追 赶 曲 线 ( 图 3-5) x()=;y()=;u()=;v()=; t=;d=;e=[- ]; while d>.5 x(t+)=x(t)+*e(); 7 6 5 y(t+)=y(t)+*e(); t=t+;u(t)=;v(t)=t; e=[-x(t) t-y(t)]; 4 3 d=sqrt(e()^+e()^ ); e=e/d; end
M ATLAB 8 问 85/9 plot(u,v,'o',x,y) 图 3-5 追 赶 曲 线 7. 如 何 用 贪 婪 算 法 求 背 包 问 题 的 近 似 解 讨 论 如 下 问 题, 有 旅 行 者 要 从 n 种 物 品 中 选 取 不 超 过 b 公 斤 的 物 品 放 入 背 包 随 身 携 带, 要 求 总 价 值 最 大 已 知 第 j 种 物 品 的 重 量 为 a j, 价 值 为 c j ( j =,,,n ) 这 就 是 著 名 的 背 包 问 题 为 了 确 定 选 入 背 包 的 物 品, 首 先 定 义 变 量 :x,x,,x n, 当 选 取 第 j 种 物 品 放 入 背 包 中 时 取 x j =, 否 则 取 x j = 于 是 所 有 选 入 背 包 的 物 品 总 价 值 为 : c x +c x + +c n x n, 总 的 重 量 为 :a x + a x + +a n x n 背 包 问 题 的 数 学 模 型 可 以 描 述 为 如 下 的 规 划 问 题 max z = c x +c x + +c n x n 约 束 条 件 : a x + a x + +a n x n b x j = 或 x j = ( j =,,,n ) 贪 婪 算 法 是 求 解 这 一 类 问 题 的 简 便 算 法 具 体 方 案 是 首 先 计 算 出 所 有 物 品 的 价 值 密 度 : p = c / a, c / a p =,, p n = cn / an 然 后, 将 价 值 密 度 按 由 大 到 小 的 次 序 排 列 为 : pk pk L pk n 选 取 第 k 件 物 品, 判 断 背 包 是 否 会 超 载 如 果 不 超 载, 则 将 其 放 入 背 包, 并 选 取 第 k 件 物 品 再 判 断 ; 如 果 第 k 件 物 品 超 载, 则 放 弃 第 k 件 选 取 第 k 件 物 品, 重 复 以 上 的 操 作, 直 到 背 包 不 能 放 入 余 下 的 任 何 一 件 物 品 为 止 最 后 输 出 放 入 背 包 的 所 有 物 品 的 总 重 量 总 价 值 以 及 各 物 品 的 编 号 例 如, 有 8 件 物 品 它 们 的 价 值 分 别 为 : 3 3 4 45 5 6( 元 ); 而 重 量 分 别 为 : 3 4 45 55( 公 斤 ); 背 包 最 大 载 重 量 为 : ( 公 斤 ) 为 了 选 择 装 入 背 包 的 物 品, 用 贪 婪 算 法 求 解, 程 序 如 下 c=[ 3 3 4 5 55 6]; a=[ 3 4 45 55]; b=; p=c./a;n=length(c); [p,l]=sort(p); % 输 入 物 品 价 值 数 据 % 输 入 物 品 重 量 数 据 % 输 入 背 包 最 大 载 重 量 % 计 算 各 物 品 的 价 值 密 度 % 将 各 物 品 按 价 值 密 度 大 小 排 序
M ATLAB 8 问 86/9 s=;p=; % 选 价 值 密 度 最 大 的 物 品 并 记 录 重 量 和 价 值 for i=:n k=l(n-i+);s=s+a(k);p=p+c(k); % 按 价 值 密 度 大 小 选 物 品 并 累 计 重 量 和 价 值 if s<=b % 判 断 当 前 所 选 物 品 放 入 背 包 后 是 否 超 载 x(k)=;s=s;p=p; else x(k)=; end end x disp([p,s]) % 显 示 选 中 物 品 编 号 及 总 重 量, 总 价 值 程 序 运 行 后 显 示 数 据 结 果 为 x = p= 3; s= 83. 所 以 应 选 取 第 一 第 二 第 三 第 四 第 五 个 物 品 放 入 背 包, 这 一 方 案 所 选 物 品 的 总 价 值 :3 ( 元 ), 总 重 量 :83 ( 公 斤 ) 由 于 背 包 可 以 载 重 公 斤, 还 剩 余 7 公 斤 可 以 装 物 品 但 却 没 有 合 适 的 物 品 放 入 显 然 这 不 是 总 体 最 优, 只 是 局 部 最 优 7. 如 何 知 道 一 段 程 序 运 行 多 长 时 间? MATLAB 提 供 了 用 于 记 录 解 决 问 题 过 程 所 用 时 间 的 计 时 器 使 用 方 法 是 在 程 序 第 一 行 前 用 命 令 tic 启 动 计 时 器, 在 程 序 的 最 后 一 行 后 面 用 命 令 toc 关 闭 计 时 器 如 此 处 理 后, 当 这 段 程 序 运 行 结 束 时 屏 幕 将 自 动 显 示 出 所 花 费 的 时 间 例 如 用 穷 举 算 法 求 解 背 包 问 题, 可 以 求 出 这 一 问 题 的 最 优 解, 但 是 所 用 的 时 间 将 随 问 题 中 物 品 个 数 的 增 多 而 迅 速 增 大 程 序 如 下 tic c=[ 3 3 4 5 55 6]; a=[ 3 4 45 55]; m=; n=length(a);k=;x=[]; for j=:^n- % 启 动 计 时 器
M ATLAB 8 问 87/9 i=n+;s=j; while s> i=i-; t(i)=rem(s,); s=fix(s/); end if a*t'<=m,k=k+;x(k,:)=t;end end p=x*c';[p,i]=max(p); s=x(i,:) q=a*s'; disp([p,q]) toc % 关 闭 计 时 器, 并 显 示 所 用 时 间 计 算 机 运 行 程 序 后, 将 显 示 问 题 答 案 s = 57 8 以 及 程 序 运 行 所 用 时 间 elapsed_time =. 结 果 说 明, 运 行 这 段 程 序 用 了. 秒 钟 这 一 背 包 问 题 的 答 案 为 选 择 第 一 第 二 第 四 第 五 第 七 个 物 品, 它 们 的 总 价 值 为 57 元, 总 重 量 为 8 公 斤 这 是 最 优 结 果, 但 是 用 的 时 间 比 贪 婪 算 法 多 如 果 将 问 题 的 规 模 扩 大, 修 改 原 问 题 的 8 个 物 品 为 个 物 品, 在 程 序 中 物 品 价 值 和 重 量 数 据 被 修 改 为 c=[8 9 3 3 4 5 55 6]; a=[3 4 3 4 45 55]; 程 序 中 的 其 它 语 句 不 变, 重 新 运 行 穷 举 法 程 序, 屏 幕 显 示 s = 3 3 elapsed_time =.66 这 说 明 解 决 具 有 个 物 品 的 背 包 问 题 计 算 机 将 花 费.66 秒 的 时 间 四. 应 用 篇 MATLAB 为 我 们 提 供 了 高 效 的 编 程 环 境, 在 解 决 实 际 问 题 和 求 解 数 学 模 型 时, 不 必 象 使 用 一 般 的 计 算 机 语 言 那 样 将 算 法 的 每 一 个 细 节 都 考 虑 进 去 用 一 系 列 的 MAATLAB 的 命 令 解 决 问 题 时, 实 际 上 是 将 已 有 的 程 序 模 块 进 行 组 合 拼 装 在 这 样 的 高 层 次 上 考 虑 算 法 设 计 时, 自 然 就 节 约 了 工 作 时 间 并 避 免 了 低 层 次 的 重 复 劳 动
M ATLAB 8 问 88/9 73. 罗 伦 兹 吸 引 子 的 空 间 曲 线 是 如 何 绘 制 的? 罗 伦 兹 微 分 方 程 组 的 解 曲 线 Lorenz 吸 引 子 是 三 维 空 间 中 的 一 条 曲 线, 如 图 4- 所 示 这 条 曲 线 相 互 缠 绕 而 互 不 相 交 如 果 将 这 条 曲 线 视 为 某 一 动 点 的 轨 迹, 这 个 动 点 将 随 自 变 量 t 的 增 大, 在 空 间 中 的 两 个 定 点 附 近 作 环 绕 运 动 罗 伦 兹 常 微 分 方 程 组 为 dx = βx+ yz dt dy = σ ( y z) dt dz = xy + y z ρ dt 给 定 初 值 条 件 x( ) = y( ) = z( ) = ε 取 β = 8 / 3, ρ = 8, σ =, ε =.4 - 子 图 4- 罗 伦 兹 吸 引 6, 则 得 微 分 方 程 组 dx = 8x / 3 + yz dt dy = y + z dt dz = xy + 8y z dt 将 三 个 方 程 的 右 端 函 数 写 成 向 量 形 式, 得 8x / 3 + yz 8 / 3 y x r f ( t, x, y, z) = = y + z y xy + 8y z y 8 z 由 于 MATLAB 中 有 常 数 eps =.4-6, 初 始 条 件 可 以 用 列 向 量 [ eps] T 表 示 首 先 建 立 描 述 微 分 方 程 组 右 端 函 数 的 函 数 文 件 ( 文 件 名 为 :flo.m): function z=flo(t,y)
M ATLAB 8 问 89/9 A=[-8./3 y(); -..;-y() 8. -]; z=a*y; 将 这 一 文 件 保 存 在 MATLAB 的 工 作 目 录 下, 然 后 在 MATLAB 环 境 中 键 入 如 下 指 令 : [t,y]=ode3('flo',,8,[ eps]' ); u=y(:,);v=y(:,);w=y(:,3);plot3(u,v,w) MATLAB 的 图 形 窗 口 将 显 示 Lorenz 吸 引 子 的 图 形 如 图 4- 所 示 另 外, 还 可 以 绘 制 动 画, 如 果 关 闭 MATLAB 的 图 形 窗 口, 并 在 命 令 窗 口 中 再 键 入 comet3(u,v,w) 便 可 以 观 察 到 Lorenz 吸 引 子 的 图 形 生 成 过 程 的 动 态 演 示 命 令 comet3 的 使 用 格 式 和 上 面 的 plot3 的 使 用 格 式 相 同, 不 同 的 是 绘 图 效 果 增 加 了 动 感, 其 功 能 是 在 绘 图 时 以 动 点 模 拟 慧 星 运 行 并 带 有 一 条 尾 巴 74. 如 何 为 足 球 队 排 名 次? 已 知 我 国 8 支 足 球 队 在 988~989 年 全 国 足 球 甲 级 队 联 赛 中 的 成 绩, 按 国 际 足 联 公 布 的 鼓 励 进 攻 的 三 分 制 计 算 比 赛 积 分 ( 胜 得 3 分 ; 平 得 分 ; 负 得 分 ) 有 下 面 的 得 分 表 表 4- T T T 3 T 4 T 5 T 6 T 7 T 8 T 4 4 9 3 6 T 4 3 5 4 T 3 4 6 5 3 3 3 3 T 4 3 T 5 6 3 6 7 9 7 T 6 3 3 3 3 4 T 7 3 3 6 7 T 8 4 3 4 4 表 中 第 k 行 数 据 表 示 第 k 队 与 其 它 各 队 比 赛 所 得 分 数 为 了 依 据 现 有 的 数 据, 对 各 足 球 队 的 实 力 给 予 科 学 客 观 的 评 价, 可 以 用 不 同 的 方 法 排 名 次 第 一 种 方 案 是 依 照 各 队 的 总 分 排 名, 下 面 的 程 序 就 是 根 据 上 表 中 的 数 据 建 立 得 分 矩 阵, 将 每 一 行 求 和 得 各 队 总 分, 然 后 根 据 总 分 排 名 次
M ATLAB 8 问 9/9 a=[ 4 4 9 3 6 ;4 3 5 4 ;4 6 5 3 3 3 3; 3 ; 6 3 6 7 9 7;3 3 3 3 4; 3 3 6 7; 4 3 4 4 ]; f=sum(a') [ff l]=sort(-f) 运 行 程 序 后, 屏 幕 显 示 ff = -4-8 -7 - - -9-9 -9 l = 5 3 7 6 8 4 由 于 MATLAB 中 的 排 序 命 令 sort 将 数 组 由 小 到 大 排 序, 而 我 们 需 要 将 各 队 总 分 数 按 递 减 排 序, 所 以 将 所 有 分 数 取 负 号 后 再 使 用 排 序 命 令 上 面 结 果 列 表 如 下 表 4- 总 分 排 序 数 据 结 果 名 次 3 4 5 6 7 8 队 号 5 3 7 6 8 4 总 分 4 8 7 9 9 9 第 二 种 方 案 是 根 据 得 分 矩 阵 的 正 特 征 值 所 对 应 的 特 征 向 量 排 名 利 用 上 面 程 序 中 已 经 建 立 的 得 分 矩 阵 求 矩 阵 的 特 征 值, 用 命 令 eig(a) 可 得 ans =.3443 -.84 + 5.69i -.84-5.69i -.9756 +.8i -.9756 -.8i -3.5585 +.8359i -3.5585 -.8359i -3.655 观 察 数 据 结 果 知, 第 一 个 特 征 值 为 正, 取 这 一 正 特 征 值 对 应 的 特 征 向 量 用 命 令 [x,d]=eig(a);g=x(:,)' 得 -.3636 -.34 -.433 -.438 -.568 -.938 -.837 -.88 这 一 向 量 每 一 元 素 均 为 负 数, 由 特 征 向 量 的 性 质 将 其 反 号 仍 为 特 征 向 量 用 排 序 命 令 [f,l]=sort(g)
M ATLAB 8 问 9/9 将 特 征 向 量 元 素 排 序, 得 f = -.568 -.433 -.3636 -.34 -.938 -.88 -.837 -.438 l = 5 3 6 8 7 4 由 排 序 结 果 列 表, 得 表 4-3 特 征 向 量 方 法 排 序 结 果 名 次 3 4 5 6 7 8 队 号 5 3 6 8 7 4 元 素.568.433.3636.34.938.88.837.438 比 较 两 种 排 名 方 案 结 果, 尽 管 结 果 不 完 全 一 致, 但 第 一 名 和 最 后 一 名 是 一 致 的 这 说 明, 分 数 是 反 映 各 队 实 力 的 一 个 方 面, 但 并 不 是 全 面 最 强 的 队 与 各 队 比 赛 总 会 得 分, 而 弱 队 与 其 它 队 比 赛 总 不 会 得 分 在 比 赛 中, 一 个 实 力 中 等 的 球 队 遇 上 强 队 时 不 会 得 分, 遇 上 弱 队 时 会 得 分, 所 以 总 分 排 名 次 的 方 法 不 是 很 公 平 的, 特 征 向 量 法 则 比 较 公 平 当 特 征 向 量 中 元 素 均 为 正 时, 各 元 素 的 大 小 就 反 映 了 各 球 队 实 力 的 强 弱 75. 怎 样 研 究 概 率 论 中 的 生 日 问 题? 假 设 每 个 人 的 生 日 在 一 年 365 天 中 的 任 意 一 天 都 是 等 可 能 性 的, 那 么 随 机 找 n 个 人 ( 不 超 过 365 人 ) 这 n 个 人 生 日 各 不 相 同 的 概 率 ( 可 能 性 ) 可 用 公 式 P 365 364 L ( 365 n + ) = n 365 计 算 出 因 而, n 个 人 中 至 少 有 两 人 生 日 相 同 这 一 随 机 事 件 发 生 的 概 率 为 365 364 L ( 365 n + ) Pn ( ) = n 365
M ATLAB 8 问 9/9 首 先 利 用 上 面 的 公 式, 用 计 算 机 分 别 计 算 出 一 个 团 体 的 人 数 分 别 为 n=,,, 时 的 个 概 率 值 用 下 面 程 序 段 m=365;n=m; for k=: p(k)=-n/m; m=m*365;n=n*(365-k); end 使 用 指 令 p(),p(),p(3),,p() 可 得 出 其 相 应 的 概 率 值 用 指 令 plot(p) 绘 制 出 图 形 ( 图 4-), 可 以 直 观 地 了 解 概 率 值 随 团 体 人 数 变 化 的 规 律 现 在 考 虑 几 个 特 殊 概 率 值, 一 个 有 三 十 个 同 学 的 学 生 班 上, 至 少 有 两 个 同 学 生 日 相 同 的 概 率 为 p(3)=.763 图 4- 概 率 五 十 个 人 的 团 体 中, 至 少 有 两 人 生 日 在 同 一 曲 线 天 ( 只 考 虑 月 日, 不 考 虑 年 的 不 同 ) 的 概 率 为 p(5)=.974 在 七 十 个 人 的 团 体 中,p(7)=.999 考 虑 团 体 总 人 数 对 概 率 值 的 影 响, 为 了 求 在 某 团 体 中 保 证 至 少 有 两 人 生 日 相 同 的 概 率 大 于 99% 时 的 总 人 数 键 入 下 列 命 令 find(p>.99) ( 回 车 ) 计 算 机 屏 幕 将 显 示 ans= 57 58 59 6 6 97 98 99 所 以, 团 体 人 数 若 超 过 57 人, 则 这 个 团 体 中 至 少 有 两 人 生 日 相 同 的 概 率 将 大 于 99% 最 后, 考 虑 用 计 算 机 数 值 模 拟 随 机 产 生 3 个 正 整 数, 介 于 到 365 之 间 ( 代 表 3 个 同 学 的 生 日 ), 然 后 统 计 数 据, 观 察 是 否 有 两 人 以 上 的 人 生 日 相 同 当 3 个 人 中 有 两 人 生 日 相 同 时, 计 算 机 输 出 为, 否 则 输 出 为 如 此 重 复 观 察 次, 计 算 出 这 一 事 件 发 生 的 频 率 f 下 面 由 MATLAB 程 序 做 计 算 机 模 拟 次 重 复 观 察 : n=; for m=: % 做 次 随 机 试 验 y=; x=+fix(365*rand(,3)); % 产 生 3 个 随 机 数 for i=:9
M ATLAB 8 问 93/9 for j=i+:3 if x(i)= =x(j),y=;break,end % 寻 找 3 个 随 机 数 中 是 否 有 相 同 数 end end n=n+y; % 累 计 有 两 人 人 生 日 相 同 的 试 验 次 数 end f=n/m % 计 算 频 率 将 程 序 重 复 运 行 三 次 后, 数 据 结 果 为 f =.735.75.75 比 较 前 面 所 计 算 的 p(3)=.763, 说 明 概 率 值 和 频 率 值 比 较 接 近, 但 是 存 在 着 差 异 76. 怎 样 用 动 态 规 划 算 法 求 最 短 路 径 问 题? 动 态 规 划 是 用 于 分 析 一 类 多 阶 段 决 策 过 程 的 最 优 化 方 法 它 解 决 问 题 的 思 路 是 将 一 个 比 较 复 杂 的 问 题 分 解 为 多 个 同 一 类 型 的 子 问 题, 然 后 将 这 些 子 问 题 按 整 体 最 优 的 思 想 逐 个 地 求 最 优 解, 最 后 再 求 出 整 个 问 题 的 最 优 解 一 个 简 单 的 最 短 路 径 问 题 描 述 如 下 : 图 4-3 中 个 结 点 表 示 台 不 同 地 理 位 置 上 的 计 算 机, 为 了 将 数 据 文 件 从 编 号 为 的 结 点 通 过 中 间 结 点 传 输 到 编 号 为 的 结 点 求 最 短 路 径 ( 数 据 在 各 相 邻 结 点 间 传 送 的 时 间 如 图 中 所 示 ) 被 传 送 的 数 据 文 件 从 编 号 为 的 结 点 出 发, 最 终 到 达 编 号 为 的 结 点 无 论 哪 图 4-3 最 短 路 问 题 一 种 方 案 都 需 要 水 平 方 向 走 4 步, 垂 直 方 向 走 3 步 从 第 号 结 点 到 号 结 点 的 所 有 路 径 数 为
M ATLAB 8 问 94/9 C 7! 7 6 5 = = 4!(7 4)! 3 4 7 = 用 动 态 规 划 算 法 解 决 问 题 的 理 论 依 据 是 最 优 性 原 理, 最 优 性 原 理 可 简 述 为 : 不 论 前 面 的 状 态 和 策 略 如 何, 以 后 的 最 优 策 略 只 取 决 于 最 初 策 略 所 确 定 的 当 前 状 态 具 体 求 解 问 题 时 要 用 到 递 归 方 程, 递 归 方 程 所 起 的 作 用 是 将 一 个 子 问 题 的 解 与 下 一 个 子 问 题 相 联 系 由 最 优 性 原 理 可 知, 在 从 编 号 为 的 结 点 到 编 号 为 的 结 点 的 最 短 路 径 上, 各 结 点 到 编 号 为 的 结 点 的 的 路 径 也 是 各 结 点 到 编 号 为 的 结 点 的 最 短 路 径 我 们 称 编 号 为 的 结 点 为 目 标 结 点, 用 d k 表 示 编 号 为 k 的 结 点 到 目 标 结 点 的 最 短 路 径 长 度 由 最 优 性 原 理 可 得 d = min{+d 8,+d 9 },d 8 = min{3+d 5,+d 6 },d 9 = min{+d 6,3+d 7 }, d 5 = min{+d,+d },d 6 = min{4+d,+d 3 },d 7 = min{+d 3,+d 4 }, d = +d 7,d = min{+d 7,3+d 8 },d 3 = min{+d 8,+d 9 },d 4 = min{3+d 9,3+d }, d 7 =3+d 4,d 8 = min{+d 4,4+d 5 },d 9 = min{+d 5,4+d 6 },d = 4+d 6, d 4 = +d,d 5 = min{+d,5+d 3 },d 6 =3+d 3,d = + d,d 3 = 3+ d,d = 由 d =,d 3 = 3, 应 用 逆 向 递 推 方 式, 得 d 4 = +d = 3,d 5 = min{+d,5+d 3 }=4,d 6 =3+d 3 =6, d = min{+d 8,+d 9 }= 最 后 再 根 据 逆 向 递 推 的 各 式 选 择 写 出 最 短 路 径 的 路 线 用 动 态 规 划 算 法 求 解 最 短 路 径 问 题 的 程 序 如 下 : x=[ ;3 3 ;4 ;5 ;5 5 3; 6 3 3;7 3 4;8 4;8 4 5;9 5; 9 4 6; 4 6; 7; 7; 3 8; 3 8;3 9;4 3 9;4 3 ;5 ; 5 ;6 4 ;6 3;7 3;7 4; 8 3 5;8 6;9 6;9 3 7; 8; 9]; x=x;y=[ ; ;3 3]; for k=4: l=find(x(:,)= =k); d=x(l,);m=x(l,3); mk=length(m); 35
M ATLAB 8 问 95/9 for i=:mk j=m(i); mm(i,:)=find(y(:,)= =j); end [v,n]=min(d+y(mm,3)); y(k,:)=[k m(n) v]; end z()=;l=find(y(:,)= =);m=y(l,); k=;z(k)=m; while m> k=k+; l=find(y(:,)= =m); m=y(l,);z(k)=m; end rood=z Length=y(,3) 将 程 序 运 行 后, 得 数 据 结 果 : rood = 9 6 3 8 4 Length = 结 果 表 明, 由 动 态 规 划 算 法 求 得 的 最 短 路 径 长 度 为, 图 4-4 中 箭 头 标 出 了 最 优 解 路 径 上 的 结 点 编 号 依 次 为 9 6 3 8 4 上 面 程 序 中, 使 用 了 一 个 3 3 的 矩 阵 由 于 数 据 传 输 方 向 是 由 左 向 右, 由 下 向 上 故 可 将 图 作 为 有 向 图, 每 两 个 相 邻 结 点 的 编 号 以 及 它 们 之 间 的 一 段 路 径 长 度 形 成 一 个 三 元 数, 即 [ 父 结 点 号 路 径 长 子 结 点 号 ] 图 4-4 最 短 路 问 题 的 解 所 以, 图 中 共 3 条 路 段 的 数 据 形 成 了
M ATLAB 8 问 96/9 一 个 3 3 的 矩 阵 以 此 为 依 据, 从 第 4 号 结 点 到 号 结 点, 逐 步 寻 找 它 们 到 号 结 点 的 最 短 路 长 度, 同 时 记 录 每 一 结 点 到 号 结 点 的 最 短 路 径 上 的 子 结 点 形 成 一 个 三 元 数 [ 父 结 点 子 结 点 局 部 最 短 路 径 长 ] 最 后, 形 成 一 个 3 的 矩 阵 再 以 此 为 依 据, 按 秩 序 找 出 全 局 最 短 路 径 上 的 结 点 编 号 77. 如 何 用 MATLAB 解 决 蠓 虫 分 类 问 题? 生 物 学 家 试 图 对 两 类 蠓 虫 (Af 与 Apf) 进 行 鉴 别, 依 据 的 资 料 是 蠓 虫 的 触 角 和 翅 膀 的 长 度, 已 经 测 得 9 只 Af 和 6 只 Apf 的 数 据,( 触 角 长 度 用 x 表 示, 翅 膀 长 度 用 y 表 示 ) 具 体 数 据 为 : 表 4-4 Af 类 触 角 和 翅 膀 长 度 x.4.36.38.38.38.4.48.54.56 y.7.74.64.8.9.7.8.8.8 表 4-5 Apf 类 触 角 和 翅 膀 长 度 数 据 x.4.8..6.8.3 y.78.96.86...96 现 需 要 解 决 三 个 问 题 :() 如 何 凭 借 原 始 资 料 (5 对 数 据, 被 称 之 为 学 习 样 本 ) 制 定 一 种 方 法, 正 确 区 分 两 类 蠓 虫 ;() 依 据 确 立 的 方 法, 对 题 目 提 供 的 三 个 样 本 :(.4,.8), (.8,.84),(.4,.4) 加 以 识 别 ;(3) 设 Af 是 宝 贵 的 传 粉 益 虫,Apf 是 某 种 疾 病 的 载 体, 是 否 应 该 修 改 分 类 方 法 首 先 画 出 5 对 数 据 的 散 点 图 4-5 由 触 角 和 翅 膀 数 据 画 的 离 散 点 图, 其 中,Af 用 * 标 记,Apf 用 图 标 记 观 察 图 4-5 可 以 发 现,
M ATLAB 8 问 97/9 代 表 Af 的 点 位 于 图 中 偏 右, 而 代 表 Apf 的 点 位 于 图 中 偏 左 应 该 存 在 一 条 位 于 两 类 点 之 间 的 直 线 L, 作 为 Af 和 Apf 分 界 线, 这 条 直 线 L 应 依 据 问 题 所 给 的 数 据, 即 学 习 样 本 来 确 定 设 这 条 直 线 的 方 程 为 w x + w y + w3 = 对 于 平 面 上 任 意 一 点 P(x,y), 如 果 该 点 在 直 线 上, 将 其 坐 标 代 入 直 线 方 程 则 使 方 程 成 为 恒 等 式, 即 使 方 程 左 端 恒 为 零 ; 如 果 点 P(x,y) 不 在 直 线 上, 将 其 坐 标 代 入 直 线 方 程, 则 方 程 左 端 不 为 零 由 于 Af 和 Apf 的 散 点 都 不 在 所 求 的 直 线 上, 故 将 问 题 所 提 供 的 数 据 代 入 直 线 方 程 左 端 所 得 到 的 表 达 式 的 值 应 有 大 于 零 或 者 小 于 零 两 种 不 同 的 结 果 建 立 一 个 判 别 系 统, 引 入 判 别 函 数 g(x,y), 当 (x,y) 代 表 Af 类 时, 令 g(x,y)>, 否 则 g(x,y)< 为 了 对 判 别 系 统 引 入 学 习 机 制, 在 学 习 过 程 中 将 两 种 不 同 的 状 态, 以 和 - 表 示 取 g ( x, y) = w x + w y + w 则 由 所 给 数 据 形 成 约 束 条 件, 这 是 关 于 判 别 函 数 中 的 三 个 待 定 系 数 值 w, w, w 的 线 性 方 程 组 : 3 w x w x j j + w y + w y j j + w + w 3 3 =, ( j =,, L,9) =, ( j =, L,5) 此 为 包 括 三 个 未 知 数 共 5 个 方 程 的 超 定 方 程 组, 可 以 求 方 程 组 的 最 小 二 乘 解 下 列 程 序 用 于 求 超 定 方 程 组 的 最 小 二 乘 解, 并 绘 制 出 分 类 边 界 曲 线 的 图 形 xy=[.4.7;.36.74;.38.64;.38.8;.38.9;.4.7;.48.8;.54.8;.56.8;.4.78;.8.96;..86;.6.;.8.;.3.96]; % 学 习 样 本 数 据 z=[;;;;;;;;;-;-;-;-;-;-]; x=xy(:,);y=xy(:,);x=x(:9);y=y(:9);x=x(:5);y=y(:5); plot(x,y,'*',x,y,'x'),pause % 绘 制 原 始 数 据 散 点 图 X=[x y ones(x)]; A=X'*X;B=X'*z;w=A\B; % 求 解 正 规 方 程 组 a=-w()/w();b=-w(3)/w();
M ATLAB 8 问 98/9 t=.:.:.6;u=a*x+b ; % 确 定 分 类 直 线 数 据 plot(x,y,'*',x,y,'x',t,u) % 在 散 点 图 中 画 分 类 直 线 运 行 上 面 程 序 可 求 出 超 定 方 程 组 的 最 小 二 乘 解 并 画 出 分 类 边 界 曲 线 为 了 由 所 给 数 据 用 判 别 函 数 判 别 三 个 新 蠓 虫 的 类 属, 即 当 g ( x, y) > 时, 判 为 Af 类 ; 当 g ( x, y) < 时, 判 为 Apf 类 运 行 上 面 程 序 后, 键 入 下 面 命 令 xx=[.4.8 ;.8.84 ;.4.4 ]; xx*w plot(t,u,xx(:,),xx(:,),'o') 求 得 ans = -.3877 -.384 -.35 这 说 明, 所 给 数 据 反 映 出 三 个 蠓 虫 均 属 于 Apf 类 另 外, 上 面 的 解 决 问 题 方 案 是 在 学 习 过 程 中 用 + 和 分 别 代 表 正 数 和 负 数 来 完 成 的 这 只 是 一 种 人 为 的 规 定, 并 不 是 一 成 不 变 的 当 Apf 是 害 虫 时, 可 以 修 改 超 定 方 程 组 的 右 端 项 中 - 为 -.6, 或 者 将 改 为 其 它 的 负 数 以 重 新 求 超 定 方 程 组 的 最 小 二 乘 解 获 得 分 类 边 界 直 线 的 方 程 这 样 将 与 前 面 所 求 分 类 边 界 直 线 的 方 程 不 一 样, 当 然 对 新 给 定 的 蠓 虫 的 翅 膀 和 触 角 长 度 数 据 来 做 判 断 其 结 果 也 是 不 同 的 78. 如 何 绘 制 分 形 曲 线 图 形? 从 一 条 直 线 段 开 始, 将 线 段 中 间 的 三 分 之 一 部 分 用 一 个 等 边 三 角 形 的 另 两 条 边 代 替, 形 成 具 有 5 个 结 点 的 新 的 图 形 ( 图 4-6); 在 新 的 图 形 中, 又 将 图 中 每 一 直 线 段 中 间 的 三 分 之 一 部 分 都 用 一 个 等 边 三 角 形 的 另 两 条 边 代 替, 再 次 形 成 新 的 图 形 ( 图 4-7), 这 时, 图 形 中 共 有 7 个 结 点 图 4-6 第 一 次 迭 代 图 4-7 第 二 次 迭 代
M ATLAB 8 问 99/9 这 种 迭 代 继 续 进 行 下 去 可 以 形 成 Koch 分 形 曲 线 在 迭 代 过 程 中, 图 形 中 的 点 将 越 来 越 多, 而 曲 线 最 终 显 示 细 节 的 多 少 将 取 决 于 所 进 行 的 迭 代 次 数 和 显 示 系 统 的 分 辩 率 Koch 分 形 曲 线 的 定 义 归 结 于 算 法 和 计 算 机 实 现 考 虑 由 直 线 段 ( 个 点 ) 产 生 第 一 个 图 形 (5 个 点 ) 的 过 程 设 P 和 P 分 别 为 原 始 直 线 段 的 两 个 端 点 现 在 需 要 在 直 线 段 的 中 间 依 次 插 入 三 个 点 Q, Q, Q 3 产 生 第 一 次 迭 代 的 图 形 显 然,Q 位 于 P 点 右 端 直 线 段 的 三 分 之 一 处,Q 3 位 于 P 点 右 端 直 线 段 的 三 分 之 二 处 ; 而 Q 点 的 位 置 可 以 认 为 是, 由 Q 3 点 绕 Q 旋 转 6 度 ( 逆 时 针 方 向 ) 而 得 到 的, 故 可 以 处 理 为 向 量 Q Q 3 经 正 交 变 换 而 得 到 向 量 Q Q 形 成 算 法 如 下 : () Q = P + (P -P )/3; () Q 3 = P + (P -P )/3; (3) Q = Q + (Q 3 -Q ) A ; (4) P 5 = P ;P = Q ;P 3 = Q ;P 4 = Q 3. 在 算 法 的 第 三 步 中,A 为 正 交 矩 阵 : A = π π cos sin 3 3 π π sin cos 3 3 这 一 算 法 的 结 果 将 由 初 始 数 据 P 和 P 点 的 坐 标, 产 生 5 个 结 点 的 坐 标 这 5 个 结 点 的 坐 标 数 组, 组 成 一 个 5 矩 阵 这 一 矩 阵 的 第 一 行 为 P 的 坐 标, 第 二 行 为 P 的 坐 标,, 第 五 行 为 P 5 的 坐 标 矩 阵 的 第 一 列 元 素 分 别 为 5 个 结 点 的 X 坐 标, 第 二 列 元 素 分 别 为 5 个 结 点 的 Y 坐 标 首 先 考 虑 在 Koch 分 形 曲 线 的 形 成 过 程 中 结 点 数 目 的 变 化 规 律 设 第 k 次 迭 代 产 生 结 点 数 为 n k, 第 k+ 次 迭 代 产 生 结 点 数 为 n k+,n k 和 n k+ 之 间 的 递 推 关 系 式 如 下 n = 4n 3 k + k 由 第 k 次 迭 代 的 n k 个 结 点 的 结 点 坐 标 数 组, 产 生 第 k+ 次 迭 代 的 n k+ 个 结 点 的 结 点 坐 标 数 组 的 算 法 可 参 考 上 面 两 点 到 五 点 的 算 法 进 行 设 计 根 据 算 法 编 写 下 面 迭 代 五 次 的 程 序 并 绘 制 Koch 分 形 曲 线 p=[ ; ]; % 给 出 初 始 数 据 两 个 点 的 坐 标 a=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)]; % 设 置 用 于 正 交 变 化 的 正 交 矩 阵
M ATLAB 8 问 /9 for k=:5 % 开 始 执 行 第 一 到 第 五 次 迭 代 n=max(size(p));d=diff(p)/3; % 统 计 前 一 轮 迭 代 的 结 点 数 及 形 成 结 点 向 量 q=p(:n-,:);p(5:4:4*n-3,:)=p(:n,:); % 保 护 前 一 轮 的 结 点 坐 标 数 组 p(:4:4*n-6,:)=q+d; % 插 入 第 一 组 新 结 点 p(3:4:4*n-5,:)=p(:4:4*n-6,:)+d*a'; % 用 正 交 变 换 计 算 第 二 组 新 结 点 p(4:4:4*n-4,:)=q+*d; % 插 入 第 三 组 新 结 点 end plot(p(:,),p(:,)) % 根 据 结 点 坐 标 绘 图 运 行 上 面 程 序 后,MATLAB 的 图 形 窗 口 将 显 示 图 4-8 中 的 分 形 图 形 图 4-8 Koch 分 形 曲 线 分 形 曲 线 的 绘 制 可 以 有 很 多 丰 富 多 彩 的 变 化 例 如 将 上 面 分 形 曲 线 中 正 交 变 换 的 逆 时 针 6 旋 转 修 改 为 旋 转, 并 将 两 点 连 线 变 成 一 个 四 边 形, 以 四 边 形 的 四 个 顶 点 坐 标 为 初 始 数 据 绘 制 第 五 次 迭 代 产 生 的 分 形 曲 线 图 形, 将 大 为 改 观 修 改 上 面 程 序, 首 先, 将 初 始 数 据 p=[ ; ] 修 改 为 p=[ ;5-5; ;5 5; ] 并 将 语 句 a=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)] 中 的 旋 转 达 角 度 由 π /3 改 为 π /3, 即 修 改 为 a=[cos(*pi/3) -sin(*pi/3);sin(*pi/3) cos(*pi/3)] 其 它 语 句 不 变, 运 行 修 改 后 的 程 序 可 得 图 4-9 中 的 分 形 图 形
M ATLAB 8 问 /9 图 4-9 由 四 边 形 不 断 迭 代 计 算 所 得 分 形 曲 线 图 79. 如 何 用 聚 类 算 法 研 究 气 象 观 测 站 问 题 某 地 区 内 有 个 气 象 观 测 站, 年 来 各 站 测 得 的 年 降 雨 量 如 下 表 4-6 所 示 为 了 节 省 开 支, 有 关 部 门 想 要 减 少 四 个 气 象 观 测 站 如 果 不 考 虑 各 观 测 站 的 地 理 位 置, 试 根 据 表 中 的 数 据 推 算 出 年 来 降 雨 量 数 据 相 近 的 站 点, 以 供 参 考 表 4-6 气 象 观 测 站 年 降 雨 量 数 据 98 98 983 984 985 986 987 988 989 99 x 76. 5.6 9.7 46. 9.7 466.5 58.6 453.4 58.5 34.8 x 34.5 87.3 436. 3.4 3. 58.9 37.4 365.5 7. 46.5 x 3 58.6 349.5 89.9 43.7 5.4 3.5 43. 357.6 4. 35.7 x 4 4.5 97.4 366.3 37.5 54. 45. 43.9 58. 344. 88.8 x 5 9.8 7.8 466. 46.4 45.6 5.4 56.6 78.8 5. 9.6 x 6 58.4 453.6 39. 58.9 34.8 3. 8.9 467. 36.7 84.9 x 7 334. 3.5 357.4 98.7 4. 35.4 389.7 355. 376.4 9.5 x 8 33. 45. 9.7 34.5 66.5 37.4 43. 8.5 79.4 343.7 x 9 9.9 466. 45.7 56.6 5.3 46. 466.5 453.6 59. 83.4
M ATLAB 8 问 /9 x 43. 37.5 4. 37. 89.9 77.5 99.3 35.6 34.4 8. x 59.7 4. 357. 96.5 55.4 34. 8. 456.3 33. 43.7 x 33. 455. 353. 43. 36. 4.7 387.6 47. 377.7 4. 由 于 要 从 个 站 点 中 减 少 四 个 气 象 观 测 点, 所 以 应 保 留 八 个 站 点. 每 一 站 点 在 98 年 至 99 年 的 十 年 中 所 记 录 的 年 降 雨 量 数 据 在 数 学 上 可 视 为 一 向 量 现 在 需 要 用 聚 类 算 法 将 个 向 量 划 分 为 8 个 组, 在 聚 类 过 程 中 应 记 录 下 每 一 类 所 含 站 点 的 数 目 以 及 每 一 站 点 属 于 哪 一 类 聚 类 算 法 的 思 路 是, 在 开 始 时 每 一 个 站 点 算 一 类, 总 共 类 考 虑 数 据 最 接 近 的 两 个 站 点, 将 它 们 聚 为 一 类, 并 计 算 这 两 个 站 点 的 降 雨 量 数 据 的 平 均 值, 作 为 新 一 类 的 数 据 数 据 块 化 为 个 类, 重 复 这 一 过 程, 直 到 减 少 至 8 类 为 止 个 站 点 程 序 如 下 n=8; x=[ 76. 5.6 9.7 46. 9.7 466.5 58.6 453.4 58.5 34.8; 34.5 87.3 436. 3.4 3. 58.9 37.4 365.5 7. 46.5; 58.6 349.5 89.9 43.7 5.4 3.5 43. 357.6 4. 35.7; 4.5 97.4 366.3 37.5 54. 45. 43.9 58. 344. 88.8; 9.8 7.8 466. 46.4 45.6 5.4 56.6 78.8 5. 9.6; 58.4 453.6 39. 58.9 34.8 3. 8.9 467. 36.7 84.9; 334. 3.5 357.4 98.7 4. 35.4 389.7 355. 376.4 9.5; 33. 45. 9.7 34.5 66.5 37.4 43. 8.5 79.4 343.7; 9.9 466. 45.7 56.6 5.3 46. 466.5 453.6 59. 83.4; 43. 37.5 4. 37. 89.9 77.5 99.3 35.6 34.4 8.; 59.7 4. 357. 96.5 55.4 34. 8. 456.3 33. 43.7; 33. 455. 353. 43. 36. 4.7 387.6 47. 377.7 4.]; x=x;n=max(size(x)); % 统 计 数 据 块 大 小 p=[:n]';q=ones(n,); for k=:n-n nk=max(size(x(:,)));d=; for i=:nk- xi=x(i,:); for j=i+:nk xj=x(j,:); % 置 个 类 为 每 类 一
M ATLAB 8 问 3/9 d=norm(xi-xj); if d<d,d=d;i=i;j=j;end % 寻 找 距 离 最 短 的 两 个 类 end end i=i;j=j; x(i,:)=q(i)*x(i,:)+q(j)*x(j,:); q(i)=q(i)+q(j);x(i,:)=x(i,:)/q(i); % 计 算 新 一 类 的 数 据 均 值 x(j,:)=[];q(j)=[]; % 删 除 旧 的 类 lj=find(p==j);p(lj)=i*ones(size(p(lj))); lj=find(p>j);p(lj)=p(lj)-; % 重 新 定 义 各 站 点 的 类 属 end disp(q) % 输 出 分 类 结 果 pp=[:];disp([pp;p]) 程 序 运 行 后 计 算 机 屏 幕 显 示 各 气 象 站 的 数 据 分 类 结 果 如 下 : 3 3 4 5 6 7 8 9 3 4 5 6 4 7 8 5 6 4 第 一 行 8 个 数 据 表 明 了 8 个 组 各 含 有 几 个 气 象 站, 第 二 行 为 各 气 象 站 编 号, 第 三 行 数 据 表 明 个 观 测 站 分 别 被 聚 类 到 8 个 组 中 的 哪 一 个 组, 即 第 一 组 :{ x }; 第 二 组 :{ x }; 第 三 组 :{ x 3 }; 第 四 组 :{ x 4, x 7 x }; 第 五 组 :{ x 5, x }; 第 六 组 :{ x 6, x }; 第 七 组 :{ x 8 }; 第 八 组 :{ x 9 } 其 中 有 五 组 每 组 只 含 一 个 气 象 站, 另 外 三 组 每 组 含 至 少 有 两 个 气 象 站 它 们 之 中 可 以 考 虑 每 组 减 去 一 个 或 两 个 气 象 观 测 站 8. 如 何 用 穷 举 法 求 解 截 断 切 割 问 题? 这 一 问 题 选 自 997 年 全 国 大 学 生 数 学 建 模 竞 赛 B 题 问 题 简 单 叙 述 如 下 :
M ATLAB 8 问 4/9 某 些 工 业 部 门 ( 如 贵 重 石 材 加 工 等 ) 采 用 截 断 切 割 的 加 工 方 式 从 一 个 长 方 体 中 加 工 出 一 个 已 知 尺 寸 位 置 预 定 的 长 方 体 ( 这 两 个 长 方 体 的 对 应 表 面 是 平 行 的 ), 通 常 要 经 过 六 次 截 断 切 割. 已 知 待 加 工 长 方 体 和 成 品 长 方 体 的 长 宽 高 分 别 为 4.5 9 和 3 4, 二 者 左 侧 面 正 面 底 面 之 间 的 距 离 分 别 为 6 7 9 ( 单 位 均 为 厘 米 ) 若 切 割 费 用 为 每 平 方 厘 米 元 试 为 这 些 部 门 设 计 一 种 安 排 各 面 加 工 次 序 的 方 案, 使 加 工 费 用 最 少 首 先 考 虑 各 种 不 同 切 割 方 式 的 数 学 描 述. 将 左 右 前 后 上 下 相 应 的 切 割 面 编 号 为 3 4 5 6 于 是, 一 个 切 割 方 式 就 是 各 加 工 面 {,, 3, 4, 5, 6 } 的 一 个 全 排 列, 记 为 :σ σ σ σ σ σ 3 4 5 6 将 所 有 不 同 的 切 割 方 式 组 成 的 集 合 记 为 Σ= {( σ σ σ 3σ 4σ 5σ 6) σ i = 3456,,,,, ( i = 3456,,,,,); σ i σ j ( i j )} 图 4- 待 加 工 长 方 体 及 成 品 长 方 体 图 形 现 在 考 虑 使 用 任 一 种 切 割 方 式 σ = ( σ σ σ 3 σ 4 σ 5 σ 6 ) 的 费 用 的 描 述 由 于 这 种 切 割 方 式 在 操 作 过 程 中 总 共 要 进 行 六 次 切 割, 记 六 次 切 割 的 面 积 依 次 为 S( σ ), S( σ σ ), S( σ σ σ 3 ), S( σ σ σ 3σ 4 ), S( σ σ σ σ σ ) S( σ σ σ 3σ 4σ 5σ 6 ) 则, 六 次 切 割 的 总 费 用 为 6 i= f ( σ) = S( σ L σ i ) 3 4 5, 由 此 可 知, 截 断 切 割 问 题 实 际 上 是 在 可 行 域 Σ 上 求 目 标 函 数 f (x) 的 最 小
M ATLAB 8 问 5/9 值 由 于 这 一 问 题 规 模 不 是 很 大, 可 以 用 穷 举 法 求 解 设 计 算 法 如 下 第 一 步 : 列 出 所 有 可 能 的 切 割 方 案, 即 7 个 操 作 数 (7 6 阶 的 矩 阵 ); 第 二 步 : 计 算 每 一 种 切 割 方 案 的 总 费 用 ( 7 个 费 用 数 据 ); 第 三 步 : 从 7 个 费 用 数 据 中 选 出 最 小 值 ; 第 四 步 : 列 出 费 用 最 少 的 全 部 操 作 方 案, 结 束 在 这 一 算 法 中, 比 较 困 难 的 是 第 二 步 的 算 法 实 现. 有 关 细 节 考 虑 如 下 :. 待 加 工 长 方 体 的 长 宽 高 为 4.5 9 用 向 量 记 为 l = ( 4. 5 9 ). 成 品 长 方 体 的 长 宽 高 为 3 4, 它 距 待 加 工 长 方 体 左 侧 面 正 面 底 面 之 间 的 距 离 分 别 为 6 7 9 由 此 我 们 可 以 计 算 出 切 割 左, 右, 前, 后, 上, 下 各 面 的 切 割 厚 度 数 据, 用 向 量 记 为 h = ( 6 7 55. 6 9 ) 3. h 有 六 个 数 据, 在 切 割 过 程 中, 将 待 加 工 的 长 方 体 切 割 为 成 品 长 方 体 要 经 历 六 种 状 态, 每 一 状 态 均 为 从 前 一 状 态 长 方 体 的 长 宽 高 数 据 中 的 某 一 个 减 去 对 应 的 切 割 厚 度 数 据 而 形 成 的 新 长 方 体 被 减 数 只 有 三 个 而 减 数 有 六 个, 其. 对 应 关 系 列 表 为 表 4-7 对 应 对 应 对 应 被 减 数 指 3 标 减 数 指 标, 3,4 5,6 例 如 当 切 割 左 面 或 切 割 右 面 时, 都 应 该 从 长 宽 高 数 据 中 的 第 一 个 数 减 去 切 割 厚 度 数 据 4. 切 割 面 积 的 计 算 每 一 次 切 割 面 的 面 积 实 际 上 是 本 次 切 割 状 态 中 半 成 品 长 宽 高 数 据 中 不 改 变 的 两 个 数 据 的 乘 积 程 序 如 下 l=[ 3 4 5 6];k=; % 设 置 l = (, 3456,,,, ) for j=:6,v=l(j);l=l;l(j)=[]; % 从 l 中 选 取 v 并 设 置 l 设 置 l 3 设 置 l 4 for j=:5,v=l(j);l3=l;l3(j)=[]; for j3=:4,v3=l3(j3);l4=l3;l4(j3)=[]; for j4=:3,v4=l4(j4);l5=l4;l5(j4)=[]; % 从 l 中 选 取 v 并 % 从 l 3 中 选 取 v3 并 % 从 l 4 中 选 取 v4 并
M ATLAB 8 问 6/9 设 置 l 5 for j5=:,v5=l5(j5);v6=l5(3-j5); % 从 l 5 中 选 取 v5 与 v6 k=k+;p(k,:)=[v v v3 v4 v5 v6]; % 将 [v v v3 v4 v5 v6] 赋 于 P end,end,end,end,end clear l l l3 l4 l5 j j j3 j4 j5 v v v3 v4 v5 v6 l=[ 4.5 9];h=[6 7 5.5 6 9];u=[ 3 3]; for k=:7 v=p(k,:);l=l;s=; % 提 取 P 的 第 k 行 数 据 for j=:6 i=v(j);l(u(i))=l(u(i))-h(i); % 模 拟 截 割 第 i 面 并 减 去 相 应 的 厚 度 ll=l;ll(u(i))=[];s=s+ll()*ll(); % 累 加 计 算 本 次 截 割 面 的 费 用 end q(k)=s; % 将 六 次 截 割 的 总 面 积 赋 值 给 Q end clear h j i k l l ll s u v an=min(q);find(q==an);p(ans,:), % 寻 求 Q 中 的 最 小 者 an 运 行 程 序 后, 操 作 数 有 两 组 6 3 5 4 6 3 5 4 切 割 费 用 为 : 374, 达 到 最 小 值 对 应 的 切 割 方 案 如 下 表 4-8 费 用 最 少 的 切 割 方 案 所 需 切 割 费 用 底 面, 前 面, 左 面, 上 面, 后 面, 右 面 374 374 底 面, 前 面, 上 面, 左 面, 后 面, 右 面
M ATLAB 8 问 7/9 8. 如 何 进 行 文 本 操 作 如 果 数 据 已 经 保 存 在 文 本 文 件 里, 我 们 可 以 用 读 取 文 件 的 方 法 来 创 建 数 据 文 件 例 如, 某 地 区 有 个 气 象 观 测 站, 记 录 了 年 以 来 所 测 得 的 每 年 的 年 降 雨 量 数 据 ( 保 存 在 一 个 名 为 data.txt 的 文 件 里 ) 每 一 个 站 点 的 十 个 数 据 构 成 了 矩 阵 的 一 个 行 向 量, 个 站 点 的 数 据 就 构 成 了 一 个 的 矩 阵 用 matlab 读 取 这 个 具 有 个 数 据 的 文 件 名 为 data.txt 的 数 据 文 件 的 步 骤 如 下 : 第 一 步 : 创 建 一 个 M 文 件 ; 第 二 步 : 在 M 文 件 中 键 入 如 下 命 令. fid=fopen('data.txt'); mat=[]; while tline = fgetl(fid); disp(tline) if ~ischar(tline), break, end pos=find(tline==';') if length(pos)>, tline(pos)=[]; end vec = strnum(tline); mat=[mat;vec]; end fclose(fid); mat 这 样 屏 幕 上 就 显 示 : mat = 76. 5.6 9.7 46. 9.7 466.5 58.6 453.4 58.5 34.8 34.5 87.3 436. 3.4 3. 58.9 37.4 365.5 7. 46.5 58.6 349.5 89.9 43.7 5.4 3.5 43. 357.6 4. 35.7
M ATLAB 8 问 8/9 4.5 97.4 366.3 37.5 54. 45. 43.9 58. 344. 88.8 9.8 7.8 466. 46. 45.6 5.4 56.6 78.8 5. 9.6 58.4 453.6 39. 58.9 34.8 3. 8.9 467. 36.7 84.9 334. 3.5 357.4 98.7 4. 35.4 389.7 355. 396.4 9.5 33. 45. 9.7 34.5 66.5 37.4 43. 8.5 79.4 343.7 9.9 466. 45.7 56.6 5.3 46.6 466.5 453.6 59. 83.4 43. 37.5 4. 37. 89.9 77.5 99.3 35.6 34.4 8. 59.7 4. 357. 96.5 55.4 34. 8. 456.3 33. 43.7 33. 455. 353. 43. 36. 4.7 387.6 47. 377.7 4.7.
M ATLAB 8 问 9/9 9