基于MATLAB的数值分析(5)

合集下载

MATLAB平台上《数值分析》课程教学的几点思考

MATLAB平台上《数值分析》课程教学的几点思考

另一方 面 ,数 值 分 析 》 《 主要 研 究 用 计 算 机进
行 各种 数学 问题 的科 学 计 算 , 过 程 要 经 历 以下 其 步 骤【 根据 实 际 问题 建 立 数 学 模 型一 由数 学 模 ^ :
型 给 出数值 计算 方法一 根 据计 算方 法编 制算 法程 序, 在计 算机 上求 出结 果 . 数值 试验 是《 值分 析 》 数
与 数值 计算 科学 整 合 , 以: 学 生从 实 际 问题 可 培养
出发 , 过认 真 分 析 研究 , 经 建立 简 单 的数 学 模 型 ,
借 助 先 进 的计 算 机 技 术 , 自动 手 编 程 , 机 操 亲 上 作 , 出解决 问题 的一 种 或多种 方 案 , 找 不仅 可 以使
设 计等众 多 数学 与计 算机 理论 , 一 门抽象 性 、 是 科
学性 、 用性 、 术性 相融 合 的数学 课程 . 实 技
目前 , 数值 分 析 》 程 已经 成 为 很 多 高 校理 《 课 工科 专业 本 科及研 究 生 的必修 课程 . 因此 , 如何在 新 的教学 理 念和 目标 下 , 合《 值 分 析 》 程 特 结 数 课 点 及性质 , 行教 学 改革 的探讨 与 实践 , 进 进一 步提
方 面 ,数值 分析 》 《 课程 具 有集抽 象 性 、 学 科
性 、 用 性 、 践 性 于一 身 这 一 特性 , 实 实 由于数 值 分
析 的研 究对 象 涉及 数 学 的各 个 分 支 , 内容 十 分 广
泛 , 得该 课程 还具 有 知识结 构分 散 、 使 知识 面跨 度
收 稿 日期 : 0 20 — 3 2 1 - 52 .
大 、 识要 点繁 多 、 知 公式 冗长 , 推导 繁琐 等 特点 . 繁多 的 内容 , 上课 时 的有 限 , 师如 果对 课程 不 加 教 能很 好 的宏 观 掌 控 , 常会 在教 学 内容 、 法 、 常 方 节 奏方 面 出现 问题 , 强调 理论 证 明 的同时 , 在 忽略 了 学 生 对 问题 的实 际 背 景 的理 解 及 数 学 思 想 的 把

数值分析上机作业(MATLAB)

数值分析上机作业(MATLAB)
代矩阵。根据迭代矩阵的不同算法,可分为雅各比迭代方法和高斯-赛德尔方法。 (a)雅各比算法
将系数矩阵 A 分解为:A=L+U+D
Ax=b
⇔ (D + L +U)x = b ⇔ Dx = −(L + U )x + b ⇔ x = −D −1(L + U )x + D −1b x(k +1) = −D −1 (L + U ) x(k ) + D −1b
输入 A,b 和初始向量 x
迭代矩阵 BJ , BG

ρ(B) < 1?
按雅各比方法进行迭代

|| x (k+1) − x(k) ||< ε ?
按高斯-塞德尔法进行迭代

|| x(k+1) − x (k ) ||< ε ?
输出迭代结果
图 1 雅各布和高斯-赛德尔算法程序流程图
1.2 问题求解
按图 1 所示的程序流程,用 MATLAB 编写程序代码,具体见附录 1。解上述三个问题 如下
16
-0.72723528355328
0.80813484897616
0.25249261987171
17
-0.72729617968010
0.80805513082418
0.25253982509100
18
-0.72726173942623
0.80809395746552
0.25251408253388
0.80756312717373
8
-0.72715363032573
0.80789064377799
9
-0.72718652854079

基于MATLAB软件的数值分析教改实践

基于MATLAB软件的数值分析教改实践
随着计算 机的高速发 展 , 继实验方 法 、 理论方 法之后 。 科 学 计 算 已 经 成 为 科 学 实 践 的 第 三 种 手 段 。 它在 力 学 、 冶金 、 机 械 工 程 等 各 个 领 域 中得 到 广 泛 的应 用 .在 科 研 领 域 中有 至 关 重 要 的 作 用 。 因 为 数 值 分 析 是 研 究 科 学 计 算 中 求 解 各 类 数 学 问 题 数 值 算 法 的 一 门课 程 ,所 以它 已逐 渐 成 为 理 工 类 本 科 生 和 研 究 生 的 必 修 课 。但 是 数 值 分 析 的教 学 内容 和 教 学 方 法 急 需 与 时 俱 进 的改 革 。 笔 者 结 合 多 年 的 教 学 实 践 探 讨 M A T I B 在 数 值 分 析 教 改 过 程 中 的 作用 。
基 于 MATL AB软 件 的 数 值 分 析 教 改 实 践
史大 涛 - 史 美艳2
( 1 东北大学 数学系 , 辽宁 沈阳 1 1 0 0 0 4 ; 2 1 1 1 东 电 子 职业 技 术 学 院 计 算机 科 学 与技 术 系 , 山东 济南 2 5 0 2 0 0 )
摘 要: 为 了有效推 动数值 分析教 改进 程 , 首 先 分 析 数 值 分 析 与 MA T L A B 有 机 融 合 的 必要 性 . 然 后 介 绍 MA T I AB 在不 同 的教 学 内容 中发 挥 的 作 用 。 通 过 教 学 实践 , 教 师 既 能激 发 学 生 的 学 习兴 趣 和 积 极 性 . 又 能培 养 学 生 的 算 法 设 计 和 编 程 能 力。 取 得 良好 的教 学 效 果 关键词 : 数 值 分 析 MA T L A B 软 件 教 改 实践

MATLAB在《数值分析》课程教学与实验中的应用

MATLAB在《数值分析》课程教学与实验中的应用
维普资讯
第2 9卷 第 1 期
20 0 8年 3月
淮北煤炭 师范 学院学 报 ( 自然科学 版 )
Junl f u ie C a Id s yT ah r C l g N tr cec ) o ra o abi oln u t eces o e e( a a S i e H r l ul n
V 12 N . o. 9 o 1
M r2 0 a. 0 8
MA L B在《 TA 数值分 析》 课程教学与实验 中的应用
冯崇岭, 刘 升, 陈国龙, 国亮, 胡 韩 玲
( 淮北煤炭师范学院计算机科学与技 术系, 安徽 淮北 2 50 ) 3 0 0

要: 讨论了 MA L B在《 TA 数值分析》 课程教学 与实验 中的应用问题 , 利用 MA L B实现《 TA 数值分析》 中的算法并直
数值 分析是 一 门研究 如何 在计 算机 上求解 数学 问题 算法 的学 科, 主要 内容有 : 差分 析 、 值法 、 误 插 数值微
积分 、 数值代数、 矩阵计算和微分方程数值解法等, 是众多理工科和计算机应用等专业的必修课 . 】 数值分 析属 于应 用学科 , 不是 纯数学 , 理论 上 的完 美并不 代表 实用 , 要既讲 理论 又讲 应用 . 长期 的教学实 践 中, 在 我 们 深 刻体会 到, 门课 的教 学存 在 很多 亟待 解决 的 问题, 该 主要 有 : ) 课 程算 法多 、 1该 公式 多 、 计算 量 大 、 践 实 性强. 教学 中难免 出现 从数 字到 数 字, 公式 到公 式 , 从 繁琐 、 燥 , 乏直 观性 . ) 枯 缺 2 课时 少, 般 只有 4 一 0多课 时 , 不好基 础; ) 有理论 没 有实 践 . 是一 门实 践性很 强 的学 科 , 有实践 配套 是学 不好 的. 打 3只 这 没 比如 我 系, 该 课 程教学 原是 6 0课 时( 8 时理论 +l 时上 机 ) 但 管 理者认 为课 时 紧张又 把上 机课 时取 消 了. ) 4课 2课 , 4 老 式 教学 , 质量低 劣. 我们 认为 , 只有进行 改革 才有 出路 . 数值 分析 是一 门专业 基础课 , 学生知 识结构 中的重 是 要 组成部 分, 必要 的算 法是不 可缺 的, 比如计 算机 应用 专业 的学 生, 懂算 法, 多软件 是无 法开发 的. 不 很 事实 上, 在计 算机 技术 如此 发达 的今 天 , 只要 把 教学 过程 和相 关 的计 算机 技 术结合 起来 , 可 以减轻 教 师负担 , 就 优化 学 习环 境, 缩短课 时 , 实现 低 价高 效 的教 学效果 . A L B是一 种具 有 强大数 值计 算 、 M TA 分析 和 图形处 理 功能 的科学 计算语 言 , 其应 用 领域 极 为广 泛, 而且 使 用方 便 、 调试 容 易 、 代码 少 、 率 高, 人称 之为 第 四代 效 有

第十章MATLAB的数值分析

第十章MATLAB的数值分析

• 第一个问题可归结为“已知函数在x0,x1,
– …,xn处的值,求函数在区间[x0,xn]内其它点处的值”,这 种问题适宜用插值方法解决。 – 插值问题可描述为:已知函数在x0,x1,…,xn处的值 y0,y1,…,yn,求函数p(x),使p(xi) = yi。
• 但对第二个问题不宜用插值方法,因为600米已超出所 给数据范围,用插值函数外推插值区间外的数据会 产生较大的误差。
– Q1=prctile(w,25); – Q3=prctile(w,75); – prctile( )函数实现计算样本的百分位数功能
分布形态的测定
• 只用集中趋势和离中趋势来表示所有数据,难免不 够准确。分析总体次数的分布形态有助于识别整个 总体的数量特征。总体的分布形态可以从两个角度 考虑,一是分布的对称程度,另一个是分布的高低。 前者的测定参数称为偏度或偏斜度,后者的测定参 数称为峰度。 • 峰度是掌握分布形态的另一指标,它能描述分布的 平缓或陡峭程度。如果峰度数值等于零,说明分布 为正态;若峰度数值大于零,说明分布呈陡峭状态; 若峰度数值小于零,说明分布形态趋于平缓。
– 解决第二个问题的常用方法是,根据地面到井下 500 处的 数据求出瓦斯浓度与地面到井下距离x之间的近似函数关 系f(x), 由f(x)求井下600米处的瓦斯浓度。
• 插值函数过已知点,拟合函数不一定过已知点。通 常, 插值主要用于求函数值,而拟合的主要目的是求 函数关系。当然,某些问题既可以用插值也可以用 拟合。
插值方法-概述
• 为什么需要插值?
(1) 函数关系y=f(x)没有明确的表达式
(2) y=f(x)表达式复杂,不便于研究和使用
-20 -15
沉陷量/mm 下沉方向为"+"

数值分析matlab实验报告

数值分析matlab实验报告

数值分析matlab实验报告《数值分析MATLAB实验报告》摘要:本实验报告基于MATLAB软件进行了数值分析实验,通过对不同数学问题的数值计算和分析,验证了数值分析方法的有效性和准确性。

实验结果表明,MATLAB在数值分析领域具有较高的应用价值和实用性。

一、引言数值分析是一门研究利用计算机进行数值计算和分析的学科,其应用范围涵盖了数学、物理、工程等多个领域。

MATLAB是一种常用的数值计算软件,具有强大的数值分析功能,能够进行高效、准确的数值计算和分析,因此在科学研究和工程实践中得到了广泛的应用。

二、实验目的本实验旨在通过MATLAB软件对数值分析方法进行实验验证,探究其在不同数学问题上的应用效果和准确性,为数值分析方法的实际应用提供参考和指导。

三、实验内容1. 利用MATLAB进行方程求解实验在该实验中,利用MATLAB对给定的方程进行求解,比较数值解和解析解的差异,验证数值解的准确性和可靠性。

2. 利用MATLAB进行数值积分实验通过MATLAB对给定函数进行数值积分,比较数值积分结果和解析积分结果,验证数值积分的精度和稳定性。

3. 利用MATLAB进行常微分方程数值解实验通过MATLAB对给定的常微分方程进行数值解,比较数值解和解析解的差异,验证数值解的准确性和可靠性。

四、实验结果与分析通过对以上实验内容的实际操作和分析,得出以下结论:1. 在方程求解实验中,MATLAB给出的数值解与解析解基本吻合,验证了MATLAB在方程求解方面的高准确性和可靠性。

2. 在数值积分实验中,MATLAB给出的数值积分结果与解析积分结果基本吻合,验证了MATLAB在数值积分方面的高精度和稳定性。

3. 在常微分方程数值解实验中,MATLAB给出的数值解与解析解基本吻合,验证了MATLAB在常微分方程数值解方面的高准确性和可靠性。

五、结论与展望本实验通过MATLAB软件对数值分析方法进行了实验验证,得出了数值分析方法在不同数学问题上的高准确性和可靠性。

数值分析实验报告matlab

数值分析实验报告matlab

数值分析实验报告matlab数值分析实验报告引言:数值分析是一门研究利用计算机数值方法解决数学问题的学科,它在科学计算、工程设计、金融分析等领域具有重要的应用价值。

本实验报告旨在通过使用MATLAB软件,探索数值分析的基本原理和方法,并通过实际案例加深对数值分析的理解。

一、误差分析在数值计算中,误差是无法避免的。

误差分析是数值分析中的重要一环,它帮助我们了解数值计算的准确性和稳定性。

在实验中,我们通过计算机模拟了一个简单的数学问题,并分别计算了绝对误差和相对误差。

通过比较不同算法的误差大小,我们可以选择最适合的算法来解决实际问题。

二、插值与拟合插值和拟合是数值分析中常用的方法,它们可以通过已知的数据点来推导出未知数据点的近似值。

在本实验中,我们通过MATLAB的插值函数和拟合函数,分别进行了插值和拟合的实验。

通过比较不同插值和拟合方法的结果,我们可以选择最适合的方法来处理实际问题。

三、数值积分数值积分是数值分析中的重要内容,它可以用来计算曲线下的面积或函数的积分值。

在实验中,我们通过MATLAB的数值积分函数,对一些简单的函数进行了积分计算。

通过比较数值积分和解析积分的结果,我们可以评估数值积分的准确性和稳定性,并选择最适合的积分方法来解决实际问题。

四、常微分方程的数值解法常微分方程是数值分析中的重要内容,它可以用来描述许多自然现象和工程问题。

在实验中,我们通过MATLAB的常微分方程求解函数,对一些简单的微分方程进行了数值解法的计算。

通过比较数值解和解析解的结果,我们可以评估数值解法的准确性和稳定性,并选择最适合的数值解法来解决实际问题。

五、线性方程组的数值解法线性方程组是数值分析中的经典问题,它在科学计算和工程设计中广泛应用。

在实验中,我们通过MATLAB的线性方程组求解函数,对一些简单的线性方程组进行了数值解法的计算。

通过比较数值解和解析解的结果,我们可以评估数值解法的准确性和稳定性,并选择最适合的数值解法来解决实际问题。

数值分析与matlab——08_fourier

数值分析与matlab——08_fourier

4
600 400 200 0
Chapter 8. Fourier Analysis
600
800
1000
1200
1400
1600
Figure 8.3. FFT of the recorded signal p = abs(fft(y)); f = (0:n-1)*(Fs/n); plot(f,p); axis([500 1700 0 600]) The x-axis corresponds to frequency. The axis settings limit the display to the range of the DTMF frequencies. There are seven peaks, corresponding to the seven basic frequencies. This overall FFT shows that all seven frequencies are present someplace in the signal, but it does not help determine the individual digits. The touchtone program also lets you break the signal into eleven equal segments and analyze each segment separately. Figure 8.4 is the display of the first segment.
1
0ห้องสมุดไป่ตู้
−1
1
2
3
4
5
6
7
8
9
Figure 8.2. Recording of an 11-digit telephone number This signal is noisy. You can even see small spikes on the graph at the times the buttons were clicked. It is easy to see that eleven digits were dialed, but on this scale, it is impossible to determine the specific digits. Figure 8.3 shows the magnitude of the FFT, the finite Fourier transform, of the signal, which is the key to determining the individual digits. The plot was produced with

基于MATLAB的《数值分析》教学改革研究

基于MATLAB的《数值分析》教学改革研究
维普资讯
高教 论坛
20 0 8年 6月第 3 期
J n 2 0 . . u . 0 8 No 3
Hi ghe uc to r m rEd a i n Fo u
基于 MA AB的《 TL 数值分析》 教学改革研究
曾繁 慧 , 雷阜 , 高 胡行 华
量 工 程 ’ 彻 ‘ 号 文 件 ’全 面 提 高 高 等 教 育 质 量 ” 贯 2 ,
的 讲 话 , 的 是 进 一 步 深 化 教 学 改 革 , 面 提 高 高 等 目 全 教 育 质 量 。 在 此 背 景 下 , 括 数 值 分 析 》 内 的 教 包 在
学 改 革 必 将 进 入 一 个 新 的 高 潮 。 笔 者 在 多 年 讲 授 《 值 分 析 》 础 上 , 基 于 数 学 软 件 M A I 数 基 对 F AB 的 《 值 分 析 》 学 改 革 作 了思 考 与研 究 。 数 教
新型 人才 。 二 、 值 分 析 教 材 内 容 改 革 数
《 值 分 析 》 研 究 各 种 数 学 问 题 求 解 的数 值 计 数 是
算 方 法 及 其 理 论 的 一 门 课 程 。在 理 、 科 数 学 类 科 工
目教 学 体 系 中 ,数 值 分 析 》 着 承 上 启 下 的 作 用 , 《 起 承 上 是 使 微 积 分 、 数 与 几 何 、 机 数 学 中 的 原 理 得 以 代 随
重 理 论 轻 实 践 也 是 传 统 数 值 分 析 教 学 存 在 的 主 要问题 之 一 , 2 从 0世 纪 9 年 代 以 来 , 学 内 容 的 创 O 教 新 实 践 研 究 成 为数 值 分 析 教 学 第 一 线 的 主 要 研 究 方 向 [ M ATL , AB 融 人 数 值 分 析 教 材 [ 成 为 时 代 发 展

数值分析matlab实验报告

数值分析matlab实验报告

数值分析matlab实验报告数值分析 Matlab 实验报告一、实验目的数值分析是研究各种数学问题数值解法的学科,Matlab 则是一款功能强大的科学计算软件。

本次实验旨在通过使用 Matlab 解决一系列数值分析问题,加深对数值分析方法的理解和应用能力,掌握数值计算中的误差分析、数值逼近、数值积分与数值微分等基本概念和方法,并培养运用计算机解决实际数学问题的能力。

二、实验内容(一)误差分析在数值计算中,误差是不可避免的。

通过对给定函数进行计算,分析截断误差和舍入误差的影响。

例如,计算函数$f(x) =\sin(x)$在$x = 05$ 附近的值,比较不同精度下的结果差异。

(二)数值逼近1、多项式插值使用拉格朗日插值法和牛顿插值法对给定的数据点进行插值,得到拟合多项式,并分析其误差。

2、曲线拟合采用最小二乘法对给定的数据进行线性和非线性曲线拟合,如多项式曲线拟合和指数曲线拟合。

(三)数值积分1、牛顿柯特斯公式实现梯形公式、辛普森公式和柯特斯公式,计算给定函数在特定区间上的积分值,并分析误差。

2、高斯求积公式使用高斯勒让德求积公式计算积分,比较其精度与牛顿柯特斯公式的差异。

(四)数值微分利用差商公式计算函数的数值导数,分析步长对结果的影响,探讨如何选择合适的步长以提高精度。

三、实验步骤(一)误差分析1、定义函数`compute_sin_error` 来计算不同精度下的正弦函数值和误差。

```matlabfunction value, error = compute_sin_error(x, precision)true_value = sin(x);computed_value = vpa(sin(x), precision);error = abs(true_value computed_value);end```2、在主程序中调用该函数,分别设置不同的精度进行计算和分析。

(二)数值逼近1、拉格朗日插值法```matlabfunction L = lagrange_interpolation(x, y, xi)n = length(x);L = 0;for i = 1:nli = 1;for j = 1:nif j ~= ili = li (xi x(j))/(x(i) x(j));endendL = L + y(i) li;endend```2、牛顿插值法```matlabfunction N = newton_interpolation(x, y, xi)n = length(x);%计算差商表D = zeros(n, n);D(:, 1) = y';for j = 2:nfor i = j:nD(i, j) =(D(i, j 1) D(i 1, j 1))/(x(i) x(i j + 1));endend%计算插值结果N = D(1, 1);term = 1;for i = 2:nterm = term (xi x(i 1));N = N + D(i, i) term;endend```3、曲线拟合```matlab%线性最小二乘拟合p = polyfit(x, y, 1);y_fit_linear = polyval(p, x);%多项式曲线拟合p = polyfit(x, y, n);% n 为多项式的次数y_fit_poly = polyval(p, x);%指数曲线拟合p = fit(x, y, 'exp1');y_fit_exp = p(x);```(三)数值积分1、梯形公式```matlabfunction T = trapezoidal_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);T = h ((y(1) + y(end))/ 2 + sum(y(2:end 1)));end```2、辛普森公式```matlabfunction S = simpson_rule(f, a, b, n)if mod(n, 2) ~= 0error('n 必须为偶数');endh =(b a) / n;x = a:h:b;y = f(x);S = h / 3 (y(1) + 4 sum(y(2:2:end 1))+ 2 sum(y(3:2:end 2))+ y(end));end```3、柯特斯公式```matlabfunction C = cotes_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);w = 7, 32, 12, 32, 7 / 90;C = h sum(w y);end```4、高斯勒让德求积公式```matlabfunction G = gauss_legendre_integration(f, a, b)x, w = gauss_legendre(5);%选择适当的节点数t =(b a) / 2 x +(a + b) / 2;G =(b a) / 2 sum(w f(t));end```(四)数值微分```matlabfunction dydx = numerical_derivative(f, x, h)dydx =(f(x + h) f(x h))/(2 h);end```四、实验结果与分析(一)误差分析通过不同精度的计算,发现随着精度的提高,误差逐渐减小,但计算时间也相应增加。

MATLAB数值分析实验五(欧拉法,荣格-库塔法解常微分方程)

MATLAB数值分析实验五(欧拉法,荣格-库塔法解常微分方程)

佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 常微分方程问题初值问题数值解法 专业班级 姓 名 学 号 指导教师 陈剑 成 绩 日 期一. 实验目的1、理解如何在计算机上实现用Euler 法、改进Euler 法、Runge -Kutta 算法求一阶常微分方程初值问题⎩⎨⎧=∈='1)(],[),,()(y a y b a x y x f x y 的数值解。

2、利用图形直观分析近似解和准确解之间的误差。

二、实验要求(1) 按照题目要求完成实验内容; (2) 写出相应的Matlab 程序;(3) 给出实验结果(可以用表格展示实验结果); (4) 分析和讨论实验结果并提出可能的优化实验。

(5) 写出实验报告。

三、实验步骤1、用Matlab 编写解常微分方程初值问题的Euler 法、改进Euler 法和经典的四阶Runge-Kutta 法。

2、给定初值问题⎪⎩⎪⎨⎧=≤≤-=;1)1(,21,1')1(2y x xy x y⎪⎩⎪⎨⎧=≤≤++-=31)0(10,25050')2(2y x x x y y 要求:(a )用Euler 法和改进的Euler 法(步长均取h=0.05)及经典的四阶Runge-Kutta 法(h=0.1)求(1)的数值解,并打印)10,....2,1,0(1.01=+=i i x 的值。

(b) 用经典的四阶Runge-Kutta 方法解(2),步长分别取h=0.1, 0.05,0.025,计算并打印)10,....2,1,0(1.0==i i x 个点的值,与准确解25031)(x e x y x +=-比较,并列表写出在x=0.2,0.5,0.8处,对于不同步长h 下的误差,讨论同一节点处,误差随步长的变化规律。

(c )用Matlab 绘图函数绘制(2)的精确解和近似解的图形。

四、实验结果 %Euler.mfunction y = Euler(x0,xn,y0,h) %Euler 法解方程f_xy ; %x0,y0为初始条件; %x0,xn 为求值区间; %h 为步长; %求区间个数: n = (xn-x0)/h;%矩阵x 存储n+1个节点: x = [x0:h:xn]';%矩阵y 存储节点处的值: y = [y0;zeros(n,1)];%矩阵y_存储节点处导数值: y_(1)= f_xy(x0,y0); y_ = [y_(1);zeros(n,1)];%进行迭代(欧拉法迭代;求导数): for i = 2:n+1y (i) = y(i-1)+h*y_(i-1); y_(i) = f_xy(x(i),y(i)); end%Imp_Euler.mfunction y = Imp_Euler(x0,xn,y0,h)%改进的Euler法解方程f_xy;%x0,y0为初始条件;%x0,xn为求值区间;%h为步长;%求区间个数:n = (xn-x0)/h;%矩阵x存储n+1个节点:x = [x0:h:xn]';%矩阵y存储节点处的值:y = [y0;zeros(n,1)];%矩阵y_存储节点处导数值:y_(1)= f_xy(x0,y0);y_ = [y_(1);zeros(n,1)];%使用改进Euler法求值(欧拉法求近似;近似点导数;梯形校正;求导):for i = 2:n+1y_l = y(i-1) + h*y_(i-1);y_l = f_xy(x(i),y_l);y(i) = y(i-1) + (h/2)*(y_(i-1)+y_l);y_(i)= f_xy(x(i),y(i));end%R_Kutta4.mfunction y = R_Kutta4(x0,xn,y0,h)%Runger_Kutta法解方程f_xy;%x0,y0为初始条件;%x0,xn为求值区间;%h为步长;%求区间个数:n = (xn-x0)/h;%矩阵x存储n+1个节点:x = [x0:h:xn]';%矩阵y存储节点处的值:y = [y0;zeros(n,1)];%矩阵k1,k2,k3,k4存储各节点(中点)数值:k1(1)= f_xy(x0,y0);k1 = [k1(1);zeros(n,1)];k2(1)= f_xy(x0+h/2,y0+h*k1(1)/2);k2 = [k2(1);zeros(n,1)];k3(1)= f_xy(x0+h/2,y0+h*k2(1)/2);k3 = [k3(1);zeros(n,1)];k4(1)= f_xy(x0+h,y0+h*k3(1));k4 = [k4(1);zeros(n,1)];for i= 2:n+1y(i) = y(i-1)+(h/6)*(k1(i-1)+2*k2(i-1)+2*k3(i-1)+k4(i-1));k1(i)= f_xy(x(i),y(i));k2(i)= f_xy(x(i)+h/2,y(i)+h*k1(i)/2);k3(i)= f_xy(x(i)+h/2,y(i)+h*k2(i)/2);k4(i)= f_xy(x(i)+h,y(i)+h*k3(i));end(a):%f_xy.mfunction y_=f_xy(x,y)%求解第五次作业第一题的点(x,y)处的导数;y_ = 1/(x^2) - y/x;%run521.mclc,clear;x0 = 1;xn = 2;h = 0.05;y0 = 1;%便于显示出x,与y对应:x = [x0:h:xn]';y = Euler(x0,xn,y0,h);YE =[x,y];y = Imp_Euler(x0,xn,y0,h); YIE= [x,y];h = 0.1;x = [x0:h:xn]';y = R_Kutta4(x0,xn,y0,h); YRK= [x,y];(b): %f_xy.mfunction y_=f_xy(x,y) %求第二个方程的导数: y_ = -50*y+50*(x^2)+2*x;%run522.mclc,clear; x0 = 0; xn = 1; y0 = 1/3; %步长0.1: h = 0.1; x = [x0:h:xn]';y = R_Kutta4(x0,xn,y0,h); y_r= f_Real(x); Y1 = [x,y,y_r];%步长0.05: h = 0.05; x = [x0:h:xn]';y = R_Kutta4(x0,xn,y0,h); y_r= f_Real(x); Y2 = [x,y,y_r]; %步长0.025: h = 0.025; x = [x0:h:xn]';y = R_Kutta4(x0,xn,y0,h); y_r= f_Real(x); Y3 = [x,y,y_r];五、讨论分析(a)从结果可以看出使用RK 方法,步长较大但是结果也更加精确; (b)分析求值结果的误差,可以发现当步长取0.1时,误差是超级大的(10^8数量级),但是当步长缩小一半取0.05时,误差就很小了,再缩小一半,误差就更小了。

数值分析课程设计报告(MATLAB版)

数值分析课程设计报告(MATLAB版)

(2)取右端向量 b 的三位有效数字得 b [1.83 1.08 0.783]T ,求方程组的准确 解 X ,并与 X 的数据 [1 1 1]T 作比较 。说明矩阵的病态性。
算法及相应结果: (1)在 MATLAB 命令窗口里输入如下命令: >> H=[1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5]; b=[11/6 13/12 47/60]'; >> x=H\b 回车得到结果为: x = 1.0000 1.0000 1.0000 (2)紧接着在上题基础上继续输入如下命令: >> c=[1.83 1.08 0.783]'; x1=H\c 回车得到如下结果: x1 = 1.0800 0.5400 1.4400
问题分析:考虑由直线段(2 个点)产生第一个图形(5 个点)的过程,设 P 1 和 P5 分别为原始直线段的两个端点。现在需要在直线段的中间依次插入三个点 。显然, P2 位于 P P2 , P3 , P4 产生第一次迭代的图形(图 1-4) 1 点右端直线段的三分 之一处, P4 点绕 P2 旋转 60 度(逆时针方向)而得到的,故可以处理为向量 P2 P4 经正交变换而得到向量 P2 P3 ,形成算法如下: (1) P2 P 1 (P 5 P 1) / 3 ; (2) P4 P 1 2( P 5 P 1) / 3 ; (3) P3 P2 ( P4 P2 ) AT ; 在算法的第三步中,A 为正交矩阵。
运行结果: 0.0884 0.0580 0.0431 0.0343 0.0285 0.0243 0.0212 0.0188 0.0169 0.0154 0.0141 0.0130 0.0120 0.0112 0.0105 0.0099 0.0094 0.0087 0.0092 0.0042 (2)从 I 30 较粗略的估计值出发,我们不妨取 0.01. 源程序:

matlab数值分析实验报告

matlab数值分析实验报告

matlab数值分析实验报告Matlab数值分析实验报告引言数值分析是一门研究利用计算机进行数值计算和模拟的学科,它在科学计算、工程技术和金融等领域有着广泛的应用。

本次实验报告将介绍在Matlab环境下进行的数值分析实验,包括数值微分、数值积分和线性方程组求解等内容。

一、数值微分数值微分是通过数值方法计算函数的导数,常用的数值微分方法有前向差分、后向差分和中心差分。

在Matlab中,可以使用diff函数来计算函数的导数。

例如,对于函数f(x)=x^2,在Matlab中可以使用如下代码进行数值微分的计算:```matlabsyms x;f = x^2;df = diff(f, x);```二、数值积分数值积分是通过数值方法计算函数的定积分,常用的数值积分方法有梯形法则、辛普森法则和龙贝格积分法。

在Matlab中,可以使用trapz、quad和integral等函数来进行数值积分的计算。

例如,对于函数f(x)=sin(x),可以使用如下代码进行数值积分的计算:```matlabx = linspace(0, pi, 100);y = sin(x);integral_value = trapz(x, y);```三、线性方程组求解线性方程组求解是数值分析中的重要问题,常用的求解方法有高斯消元法和LU 分解法。

在Matlab中,可以使用\操作符来求解线性方程组。

例如,对于线性方程组Ax=b,可以使用如下代码进行求解:```matlabA = [1, 2; 3, 4];b = [5; 6];x = A\b;```四、实验结果与分析在本次实验中,我们分别使用Matlab进行了数值微分、数值积分和线性方程组求解的计算。

通过实验结果可以发现,Matlab提供了丰富的数值计算函数和工具,能够方便地进行数值分析的计算和求解。

数值微分的计算结果与解析解相比较,可以发现数值微分的误差随着步长的减小而减小,但是当步长过小时,数值微分的误差会受到舍入误差的影响。

MATLAB 数值分析

MATLAB 数值分析

13.2
极小化
作图除了提供视觉信息外,还常常需要确定一个函数的其它更多的特殊属性。在许多 应用中,特别感兴趣的是确定函数的极值,即最大值(峰值)和最小值(谷值)。数学上, 可通过确定函数导数(斜率)为零的点,解析上求出这些极值点。检验 humps 的图形在峰 值和谷值点上的斜率就很容易理解这个事实。显然,如果定义的函数简单,则这种方法常 常奏效。然而,即使很多容易求导的函数,也常常很难找到导数为零的点。在这种情况下, 以及很难或不可能解析上求得导数的情况下,必须数值上寻找函数的极值点。MATLAB 提 供了两个完成此功能的函数 fmin 和 fmins。 这两个函数分别寻找一维或 n 维函数的最小值。 这里仅讨论 fmin。有关 fmins 的详细信息,参阅《MATLAB 参考指南》。因为 f(x)的最大 值等于-f(x)的最小值,所以,上述 fmin 和 fmins 可用来求最大值和最小值。如果还不清楚, 把上述图形倒过来看,在这个状态下,峰值变成了谷值,而谷值则变成了峰值。 为了解释求解一维函数的最小值和最大值, 再考虑上述例子。 从图 13.2 可知, 在 xmax=0.7 附 近 有 一 个 最 大 值 , 并 且 在 xmin=4 附 近 有 一 个 最 小 值 。 而 这 些 点 的 解 析 值 为 : x m a x / 4 0.785 和 x min 5 / 4 393 . 。为了方便,用文本编辑器编写一个脚本 M 文件,并用 fmin 寻出数值上极值点,给出函数主体如下: % ex_fmin.m fn=‘ 2*exp(-x)*sin(x) ‘; xmin=fmin(fn , 2 , 5)
% better approximation
自然地,上述两个结果不同。基于对图形的观察,粗略近似可能低估了实际面积。除 非特别精确,没有准则说明哪种近似效果更好。很明显,如果人们能够以某种方式改变单 个梯形的宽度,以适应函数的特性,即当函数变化快时,使得梯形的宽度变窄,这样就能 够得到更精确的结果。 MATLAB 的函数 quad 和 quad8 是基于数学上的正方形概念来计算函数的面积, 这些 积分函数的操作方式一样。为获得更准确的结果,两个函数在所需的区间都要计算被积函 数。 此外, 与简单的梯形比较, 这两个函数进行更高阶的近似, 而且 quad8 比 quad 更精确。 这两个函数的调用方法与 fzero 相同,即 >>area=quad(‘ humps ‘ , -1 , 2) % find area between -1 and 2

matlab 数值解

matlab 数值解

matlab 数值解Matlab 数值解Matlab 是一种强大的数学软件,它包含了很多数学工具箱,可以用于数值分析和求解数学问题。

在本文中,我们将介绍Matlab 中的数值解方法,包括数值积分、数值微分、非线性方程求解和常微分方程的数值解法。

数值积分数值积分是一种数学方法,用于求解函数的定积分。

在Matlab 中,可以使用 quad 和 quadl 函数进行数值积分。

其中,quad 函数用于计算一般积分,而 quadl 函数用于计算不定积分。

数值微分数值微分是一种数学方法,用于计算函数的导数。

在Matlab 中,可以使用diff 和gradient 函数进行数值微分。

其中,diff 函数用于计算一维函数的导数,而 gradient 函数用于计算多维函数的梯度。

非线性方程求解非线性方程是一种形式为 f(x)=0 的方程,其中 f(x) 是一个非线性函数。

在 Matlab 中,可以使用 fzero 和 fsolve 函数进行非线性方程求解。

其中,fzero 函数用于求解单变量非线性方程,而fsolve 函数用于求解多变量非线性方程。

常微分方程的数值解法常微分方程是一种形式为y'=f(t,y) 的方程,其中y 是未知函数,t 是自变量,f(t,y) 是已知函数。

在Matlab 中,可以使用ode45 和ode23 函数进行常微分方程的数值解法。

其中,ode45 函数是一种常用的数值解法,可以求解大部分常微分方程,而 ode23 函数则是一种高效的数值解法,适用于求解简单的常微分方程。

总结在本文中,我们介绍了Matlab 中的数值解方法,包括数值积分、数值微分、非线性方程求解和常微分方程的数值解法。

这些方法可以帮助我们快速、准确地求解数学问题,提高数学建模的效率和精度。

基于MATLAB单摆运动的数值分析

基于MATLAB单摆运动的数值分析

Journal of Chizhou University2019年6月第33卷第3期Jun.2019Vol.33No.3收稿日期:2018-11-07基金项目:教育部产学合作协同育人项目(201802040052);黄山学院教学研究项目(2016JXYJ19);黄山学院精品课程项目(2017JPKF05);安徽省教学研究项目(2018jyxm1244)。

作者简介:马堃(1983—),男,回族,安徽六安人,黄山学院信息工程学院副教授,博士,主要研究方向为从事大学物理和原子与分子物理。

基于MATLAB 单摆运动的数值分析马堃(黄山学院信息工程学院,安徽黄山245041)[摘要]基于单摆动力学微分方程的严格精确解,分析了线性单摆和非线性单摆在有无阻尼振动时能量和角位移随着时间的演化规律,讨论了不同初始角位移对单摆周期的影响。

结果表明,对于线性单摆,无阻尼时作等周期等振幅摆动,有阻尼时,振幅逐渐衰减;非线性单摆的初始角位移越大,单摆的周期越大,相同初始角位移下,无阻尼摆的周期比有阻尼的大。

数值计算得到的非线性摆周期与文献中积分解的结果一致,误差均在0.3%以内。

[关键词]单摆;阻尼;非线性;能量;周期[中图分类号]O322[文献标识码]A[文章编号]1674-1102(2019)03-0037-03单摆作为简谐振动的一种物理模型,几乎在每一本大学物理教材中都会介绍[1-2]。

但由于其动力学方程的非线性特点,在教学过程中往往只研究其小摆角的情况,此时动力学方程简化为线性方程,其解为一余弦函数。

而对于大摆角单摆的运动状态随时间的演化规律,如何在大学本科阶段讨论单摆振动时的物理规律是大学物理力学部分一个教学难点。

早在1984年,赵炳林先生就对单摆振动的严格周期进行了分析,将积分方程中的被积函数进行级数展开,从而得到精确的级数解[3];随后,人们探索了多种近似算法,如线性插值[4]、格林函数[5]、冲击波解[6]等。

基于Matlab的数值分析实验的设计r——以矩阵的奇异值分解为例

基于Matlab的数值分析实验的设计r——以矩阵的奇异值分解为例

基于Matlab的数值分析实验的设计r——以矩阵的奇异值分解为例杨海涛【摘要】基于Matlab的数学实验,目的是为了提高普通高校学生的数学兴趣和动手能力,为培养解决实际数学问题的能力而设计的实验方法和步骤.利用矩阵的奇异值分解svd函数的数值算法设计了一种在实验课上用svd算法仿真的实验方案.【期刊名称】《内蒙古民族大学学报(自然科学版)》【年(卷),期】2016(031)006【总页数】4页(P465-468)【关键词】数学实验;数值计算;Matlab;奇异值分解【作者】杨海涛【作者单位】内蒙古民族大学数学学院,内蒙古通辽 028043【正文语种】中文【中图分类】O241.4利用计算机计算解决实际问题时需要建立数学模型,同时也需要相应数学软件的支持,为了更好的掌握数学软件这一有利的工具,本文通过Matlab中的矩阵的奇异值分解〔1〕svd函数设计了如何学习和掌握该函数的实验方法,从而可以进一步学习其它函数.目前,Matlab在计算仿真和图形图像的压缩处理〔2~4〕有着广泛的应用,希望这个实验方法能够给正在学习数学软件的学生起到抛砖引玉的作用.1.1 理论基础任意复长方矩阵的奇异值分解定理如下(Autonne-Eckart-Young定理):〔5〕设A为一个m×n的实矩阵(m≥n),则存在正交矩阵V和U,使得:其中∑=diag(σ1,σ2,…,σr),而且σ1≥σ2≥…≥σr≥0.奇异值分解在统计分析、信号与图像处理、系统理论和控制中有着广泛的应用. 1.2 SVD的数值算法〔6〕求解一般矩阵奇异值问题最常用的算法可分为两大类:一类是QR分解的方法;另一类是Jacobi旋转的方法.奇异值分解的QR分解法分为两个阶段:一是矩阵的二重对角化,即利用Householder变换把矩阵A变换成二重对角矩阵.这个过程就是追赶(chasing)过程〔7〕.二是QR分解,即保持二重对角矩阵形式不变,利用正交变换使对角线元素逐渐减小,使得矩阵接近对角矩阵.1.2.1 svd函数.对于matlab中的svd函数不是开源的,但通过调研得知该函数的算法就是采用propack中的lansvd函数的算法.其算法过程如下:对于任意的矩阵Am×n可以利用lanczos过程将其双对角化,即存在m阶正交矩阵Q和n阶正交矩阵W满足:其中为一双对角阵,且αi, βi∈R (i=1, 2, …, n),这里假设了m>n.上面的分解是逐步的利用Householder左右变换得到的.算法中利用了已知函数完成的双对角化过程.这里如果我们已经知道Bn的svd分解为其中Vn+1为n+1阶正交矩阵,的广义对角矩阵Un为n阶正交矩阵.则有令V=Qn+1Vn+1,其前r列为对应的左奇异向量,令U=WUn,其前r列为对应的右奇异向量.因此算法的关键在于计算矩阵Bn的svd分解.因为Bn是一个双对角矩阵,它的奇异值分解计算比较简单,运算量较小,利用Givens变换,算法复杂度仅为O(n).在我们这个程序中,直接调用了库函数svd 计算Bn的奇异值.1.2.2 svds函数.对于matlab中的svds函数,算法流程如下:(1)对于m×n阶矩阵A,构造(m+n)×(m+n)阶矩阵,其中O是稀疏矩阵. (2)利用eigs函数计算出B矩阵的特征值矩阵D,以及D对应的正交阵W. (3)根据输入参数,按要求输出最大特征值、最接近某参数的特征值或对特征值进行排序等.(4)根据设定的阀值,对矩阵进行筛选得到U矩阵,对矩阵筛选得到V矩阵,对D矩阵进行筛选得到S矩阵.(5)根据S中元素的大小对U、V、S进行排序.(6)输出结果.有如下J-W定理(Jordan-Wielandt定理):若σ1≥σ2≥…≥σp-1≥σp是矩阵Am×n的奇异值(其中,p=min{m,n}),则上述B矩阵具有2p个非零特征值-σ1,…,-σp,σp,…,σ1和|m-n|个零特征值,与非零特征值(±σj)相对应的特征向量为若m≠n,另有特征向量分别对应于m>n或m<n.svds函数的基本思想就是构造出这样的矩阵B,并且求出其特征值和特征向量,然后根据函数重构的条件(所需奇异值的数量、最大最小等),求出所需的奇异值和对应的向量.2.1 矩阵生成生成10个不同的m×n的矩阵,这里取m=120 , n=50,对这10个矩阵进行svd分解.矩阵生成的方法是先做出矩阵的奇异值,然后用QR分解做出10个120阶正交阵和10个50阶正交阵,再利用奇异值分解公式生成10个矩阵A.10个矩阵的奇异值(均为25个)如表1所示.2.2 仿真结果2.2.1 计算时间svd和svds两种方法对十个矩阵进行奇异值分解消耗的时间如表2,单位是秒.可见,svd函数运行时间一般要小于svds函数运行时间.2.2.2 最小奇异值计算准确率.通过对比最小特征值的计算准确度,将每种算法特征值的最小值与矩阵最开始生成时的最小特征值进行比较.比较结果两种方法对10个矩阵的svd分解运算最小特征值的误差均几乎为0,都在10-15次方的量级左右,见表3.其中delta_min_svd和delta_min_svds是matlab程序中两个变量值.这个误差已经和截断误差非常接近了,因此可以认为两种方法都能较好的进行奇异值计算.2.2.3 左右奇异值向量计算准确率.由于svd分解后U、V矩阵的不唯一性,这里我们只看生成的U、V的正交性是不是依然比较完好.通过计算每一列和它的转置相乘减去单位阵也都在10-15这样的量级,因此svd和svds对于正交性的保持都是非常好的.综上所述,通过上述设计的方法和步骤,完全可以掌握matlab中的M-文件和.mat文件的使用方法,并且能熟练掌握奇异值分解的理论知识和具体计算方法,才能为以后svd应用打下基础,这样的实验方法才有实际的意义,才是真正的综合设计实验.本文的宗旨在于引导学生如何用数学软件完成一个实验设计,同时掌握这个实验的目的、相关内容实验的方法和手段.〔1〕尹芳黎,杨雁莹,王传栋,等.矩阵奇异值分解及其在高维数据处理中的应用〔J〕.数学的实践与认识,2011,45(15): 171-176.〔2〕胡乡峰,卫金茂.基于奇异值分解(SVD)的图像压缩〔J〕.东北师大学报:自然科学版,2006,38(3):36-39.〔3〕曾超,张陈,徐永利.基于奇异值分解的图像压缩及其matlab实现〔J〕.科技信息,2010,14:484.〔4〕向培素.一种自适应AP算法的matlab实现〔J〕.西南民族大学学报:自然科学版,2014,40(16):877-882.〔5〕张贤达.矩阵分析与应用〔M〕.北京:清华大学出版社,2004.358-360. 〔6〕姜健飞,胡良剑,唐俭.数值分析及其matlab实验〔M〕.北京:科学出版社,2004.6,219-224.〔7〕山晓东,李园.一类不可约L-矩阵的预条件AOR迭代法〔J〕.湖北民族学院学报:自然科学版,2014,32(2):128-132.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注: (1) ‘CE’字符串, CE必须是不包含赋值号‘=’的表达 式。 (2)内联函数是沟通eval,feval两个不同指令的桥梁。 凡 eval 可以运作的表达式,都可以通过 inline 转化 为内联函数,而这种内联函数总可以被 feval 使用。 (3)第三种调用格式最简练,但对输入宗量的字符限制 严格。输入宗量的字符只能是x,P1,P2,…,Pn.
【例3】中文字符串数组 A='这是一个算例。'; A_s=size(A) A56=A([5 6])
A_s =
1 A56 = 算例 7
【例4】由小串构成大串 b='Example ''3.1.2-1''' b = Example '3.1.2-1' ab=[a(1:7),' ',b,' .'] ab = This is Example '3.1.2-1' .
6.2832
0.0000
【例】计算“语句”串,创建变量。 clear,t=pi; eval('theta=t/2,y=sin(theta)'); theta = 1.5708 y = 1
【例】计算“替代”串。
A=ones(2,1);B=ones(1,3);c=eval('B*A','A*B' ),errmessage=lasterr c = 1 1 1 1 1 1 errmessage = Error using ==> * Inner matrix dimensions must agree.
本例,以体会数值量 与字符串的区别。 clear a = a=12345.6789 1.2346e+004 ans = class(a) a_s=size(a) double a_s = 1 1 b='S' class(b) b_s=size(b) b = S ans = char b_s =
1
1
whos Name a a_s ans b b_s
【例】演示:内联函数的第一种创建格式;使内联 函数适于“数组运算”。 clear,F1=inline('sin(rho)/rho') F1 = Inline function: F1(rho) = sin(rho)/rho f1=F1(2) f1 = 0.4546 FF1=vectorize(F1) xx=[0.5,1,1.5,2];ff1=FF1(xx) FF1 = Inline function: FF1(rho) = sin(rho)./rho ff1 = 0.9589 0.8415 0.6650 0.4546
二、复杂串数组的创建 【例1】多行串数组的直接输入示例。 clear S=['This string array ' 'has multiple rows.'] S = This string array has multiple rows. size(S) ans = 2 18
【例2】演示:用专门函数char , str2mat , strvcat 创建多行串数组示例。
(3)函数句柄在“符号计算”中的情况 Alpha=sym('pi/4'); yss=sin(Alpha) yfold=feval('sin',Alpha) ynews=feval(fhandle,Alpha) yss = 1/2*2^(1/2) yfold = 1/2*2^(1/2) ynews = 1/2*2^(1/2)
【例】演示:最简练格式创建内联函数;内联函数可 被feval 指令调用。 Z2=inline('P1*x*sin(x^2+P2)',2) Z2 = Inline function: Z2(x,P1,P2) = P1*x*sin(x^2+P2) z2=Z2(2,2,3) fz2=feval(Z2,2,2,3) z2 = 2.6279 fz2 = 2.6279
(4)函数句柄在泛函指令中的用法 在[0,2π ]间求sin函数的极小值点的位置。 xold=fminbnd('sin',0,2*pi) xnew=fminbnd(fhandle,0,2*pi) xold = 4.7124 xnew = 4.7124
【例】自建函数及其句柄的使用。通过本例可看到: 只要在当前MATLAB工作空间中存在函数句柄,那末不 管该函数当前是否在搜索范围内,均可通过函数句柄 实现正确的运作。 (1)[zzy076_3.m] function Hr=zzy076_3(flag ) % ZZY076_3 为演示函数、子函数句柄而设计的绘图 文件。 % flag 可以取字符串'line'或 'circle'。 t=(0:100)/100*2*pi; x=sin(t); y=cos(t); Hr=@cirline; %创建子函数的句柄 feval(Hr,flag,x,y,t)
S1=char('This string array','has two rows.')
S1 = This string array has two rows.
S2=str2mat(‘这’,‘字符’,‘串数组’,‘ ’,'由4行 组成')
S2 = 这 字符 串数组
S3=strvcat('这','字符','串数组',' ','由4行组成')
-0.3936
0.9193
0
0.2633
0
-0.6135
-0.7897
0.7897
-0.6135
Results by feval -0.9193 -0.3936 1.2212
-0.3936 0.9193
0
0.2633
-0.6135
0.7897
三、 内联函数 inline('CE') inline('CE',arg1,arg2,…) inline('CE',n)
5.3 函数句柄
引入函数句柄使“函数调用”像“变量调用” 一样灵活方便。
一、函数句柄的创建
(1) 利用@符号 (2) 利用转换函数str2func
【例】为 MATLAB 的“内建”函数创建函数句柄, 并观察其内涵。 (1)创建函数句柄 hsin=@sin;
(2)类型判别
class(hsin)
size(hsin)
ans = function_handle ans = 1 1
二、函数句柄的基本用法 [ao1,ao2,„,aon]=FunName(ai1,ai2,„,ain) Hfun=@FunName; [ao1,ao2,„,aon]=feval(Hfun,ai1,ai2,„,ain)
【例】本例通过 sin 函数及其句柄演示若干基本用法。 (1)函数句柄的创建 fhandle=str2func('sin'); (2)函数句柄在“数值计算”中的情况 ys=sin(pi/4) yfold=feval('sin',pi/4) yfnew=feval(fhandle,pi/4) ys = 0.7071 yfold = 0.7071 yfnew = 0.7071
【例】演示:产生向量输入、向量输出的内联函数; 这种向量函数的调用方法。 Y2=inline('[x(1)^2;3*x(1)*sin(x(2))]') argnames(Y2) Y2 = Inline function: Y2(x) = [x(1)^2;3*x(1)*sin(x(2))] ans = 'x' x=[4,pi/6]; y2=Y2(x) y2 = 16.0000 6.0000
【例】函数句柄只能被feval 运用,而不能被eval 调 用。 (1)函数句柄被feval调用 rand('seed',1);A=rand(2,2); Heig=@eig; d=feval(Heig,A) d = 0.7568 -0.1488 (2)eval不能对函数句柄进行操作 de=eval(Heig,A) ??? Error using ==> eval Function 'eval' not defined for variables of class 'function_handle'.
【例】计算“合成”串。
CEM={'cos','sin','tan'}; for k=1:3 theta=pi*k/12; )']);y(1,k)=eval([CEM{1},'(',num2str(theta),' end y y = 0.9659 0.8660 0.7071
二、 feval
[y1,y2,…]=feval(F,arg1,arg2,…) F 可以是函数句柄,函数名字符串,内联函数 feval与函数句柄配套使用 【例 】 对字 符 串类 型 函数 只 能用 eval ,而 不 能用 feval。 x=pi/4; Ve=eval('1+sin(x)') Ve = 1.7071 Vf=feval('1+sin(x)',x) ??? Error using ==> feval Invalid function name '1+sin(x)'.
第五章
自定义函数的计算
函数的创建 1. 用M文件 function f=fun(x) f=1./(1+x.^2); 2. 内联函数
y=inline('(3*x^2-1)/2','x'); 3.字符串表达式(函数) 'theta=t/2,y=sin(theta)‘ 4.符号函数
相关文档
最新文档