matlab中方程根的近似计算_第1页
matlab中方程根的近似计算_第2页
matlab中方程根的近似计算_第3页
matlab中方程根的近似计算_第4页
matlab中方程根的近似计算_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

实验一实验一 方程根的近似计算方程根的近似计算 一 问题一 问题 求非线性方程的根 二 实验目的二 实验目的 1 学会使用 matlab 中内部函数 roots solve fsolve fzero 求解方程 并用之 解决实际问题 4 熟悉 Matlab 的编程思路 尤其是函数式 M 文件的编写方法 三 预备知识三 预备知识 方程求根是初等数学的重要内容之一 也是科学和工程中经常碰到的数值 计算问题 它的一般形式是求方程 f x 0 的根 如果有 x 使得 f x 0 则称 x 为 f x 0 的根 或函数 f x 的零点 并非所有的方程都能求出精确解或解析 解 理论上已经证明 用代数方法可以求出不超过 3 次的代数方程的解析解 但对于次数大于等于 5 的代数方程 没有代数求根方法 即它的根不能用方程 系数的解析式表示 至于超越方程 通常很难求出其解析解 不存在解析解的 方程就需要结合具体方程 函数 的性质 使用作图法或数值法求出近似解 而计算机的发展和普及又为这些方法提供了广阔的发展前景 使之成为科学和 工程中最实用的方法之一 下面介绍几种常见的求近似根的方法 1 求方程近似解的简单方法求方程近似解的简单方法 1 1 图形方法图形方法 放大法求根放大法求根 图形的方法是分析方程根的性态最简洁的方法 不过 不要总是想得到根 的精确值 这些值虽然粗糙但直观 多少个根 在何范围 一目了然 并且还 可以借助图形局部放大功能 将根定位得更加准确一些 例 1 1 求方程 x5 2x2 4 0 的所有根及其大致分布范围 解 1 画出函数 f x x5 2x2 4 的图形 确定方程的实数根的大致范围 为此 在 matlab 命令窗中输入 clf ezplot x x grid on hold on ezplot x 5 2 x 2 4 2 pi 2 pi 6 4 20246 6000 4000 2000 0 2000 4000 6000 x x5 2 x2 4 1 1 函数函数 f x x5 2x2 4 的图形的图形 clf x 2 pi 0 1 2 pi y1 zeros size x y2 x 5 2 x 2 4 plot x y1 x y2 grid on axis tight title x 5 2x 2 4 xlabel x 6 4 20246 8000 6000 4000 2000 0 2000 4000 6000 8000 x5 2x2 4 x 从图 1 1 可见 它有一个实数根 大致分布在 2 与 2 之间 2 将作图范围不断缩小 用放大法可得到精度越来越高的根的近似值 在 matlab 命令窗中先后键入 subplot 2 2 1 ezplot x x grid on hold on ezplot x 5 2 x 2 4 2 2 subplot 2 2 2 ezplot x x grid on hold on ezplot x 5 2 x 2 4 2 1 subplot 2 2 3 ezplot x x grid on hold on ezplot x 5 2 x 2 4 1 6 1 5 subplot 2 2 4 ezplot x x grid on hold on ezplot x 5 2 x 2 4 1 55 1 54 2 1012 10 0 10 20 30 x x5 2 x2 4 2 1 5 1 20 10 0 x x5 2 x2 4 1 6 1 55 1 5 1 0 1 x x5 2 x2 4 1 55 1 545 1 54 0 1 0 0 1 x x5 2 x2 4 图 1 2 放大法求函数 f x x5 2x2 4 的根 由图 1 2 可知 方程的根在 1 545 与 1 54 之间 1 2 数值方法数值方法 非线性方程 f x 0 求根的方法有区间法和迭代法两大类 二分法 弦位法 是区间法 简单迭代法和牛顿迭代法及其变形是迭代法 这里只给出二分法 简单迭代法和牛顿迭代法的构造过程 1 根的隔离与二分法 根的隔离与二分法 根的隔离思想来源于连续函数的零点定理 若函数 f x 在闭区间 a b 上连续 且 f a f b 0 则方程 f x 0 在 a b 内至 少有一根 x 二分法是最简单的求根方法 它是利用连续函数的零点定理 将含根区间 逐次减半缩小 取区间的中点构造收敛点列 xn 来逼近根 x 用该方法求 f x 0 的近似解可分两步做 第一步 确定根的近似位置或大致范围 即确定一个区间 a b 使所求根是 位于这个区间内的唯一实根 这个区间称为根的隔离区间 这可以通过函数作 图达到 先画出 y f x 的图形 然后从图上定出它与 x 轴交点的大概位置 第二步 以根的隔离区间 a b 的端点作为根的初始近似值 用二分法逐步 改进根的近似值的精确度 直至求得满足精确度的近似解 具体步骤如下 取 a b 的中点 x0 a b 2 若 f x0 0 则 x0就是 f x 0 的根 x 若 f a f x0 0 则根 x 必在区间 a x0 内 取 a1 a b1 x0 否则根 x 必在区间 x0 b 内 取 a1 x0 b1 b 这样 得到新区间 a1 b1 其长度为 a b 的一半 如此继续下去 进行 n 等分后 得到一组不断缩小的区间序列 a b a1 b1 a2 b2 an bn 和对应区间的中点数列 xn an bn 2 n 0 1 2 其中每个区间都含有根 x 满 足 a b a1 b1 a2 b2 an bn 且每个区间的长度都是前一区间长度的一半 由于 an bn 的长度为 b a 2n 当 n 不断变大时 这些区间将收敛于一点 x 该点即为所求的根 当做到第 n 步时 有 1 11 2 2 n nnn xxbaba 选择适当的步数 n 就可达到满意的精度 用二分法 理论上区间中点序列 xn 将收敛到根的真值 但收敛速度较慢 所以通常用二分法为其他方法提供初步的近似值 2 简单迭代法 简单迭代法 迭代法的基本原理是构造一个迭代公式 反复用它得出一个逐次逼近方程 根的数列 数列中每一项都是方程根的近似值 只是精度不同 简单迭代法也 成逐次迭代法 是非线性方程求根中各类迭代法的基础 由于对方程作等价变换根不发生变换 将方程 f x 0 等价变换为 xx 构造迭代计算公式 取定初值 x0 算出数列 xn 如果 xn 收敛于 1 nn xx x 则有 1 limlim lim nnn nnn xxxxx 这说明 x 就是方程 f x 0 的根 上面称为不动点方程 称 xx x 为迭代函数 数列 xn 称为迭代数列 3 牛顿迭代法 牛顿迭代法 如果 f x 在 a b 上具有二阶导数 f a f b err x a ya eval f x b yb eval f x c yc eval f if ya yc erfenfa 输入函数 f x x 3 1 1 x 2 0 9 x 1 4 输入区间 0 1 输入误差 0 001 x0 0 5000 x0 0 7500 x0 0 6250 x0 0 6875 x0 0 6563 x0 0 6719 x0 0 6641 x0 0 6680 x0 0 6699 x0 0 6709 由此得到 方程的根的近似值为 0 6709 2 编写牛顿迭代法求根程序 求 1 中方程 x3 1 1x2 0 9x 1 4 0 的实根的近 似值 并计算迭代次数为 6 的近似根 解 由 1 可知 0 5 1 是根所在的区间 在 0 5 1 上 f x x3 1 1x2 0 9x 1 4 f x 3 x2 2 2x 0 9 f x 6x 2 2 f x 与 f x 在 0 5 1 上保持同号 f 1 0 与 f 1 同号 所以取 x0 1 为迭代 初始值 用 matlab 语言编写一般的程序如下 f input 输入函数 输入函数 f x n input 请输入迭代次数 请输入迭代次数 n x0 input 请输入迭代初始值 请输入迭代初始值 x0 f1 diff f format long for i 1 n x x0 fx0 eval f f1x0 eval f1 x0 x0 fx0 f1x0 fprintf x0 12 10f n x0 end 存为文件 niudunfa m 调用及运行结果如下 niudunfa 输入函数 f x x 3 1 1 x 2 0 9 x 1 4 请输入迭代次数 n 6 请输入迭代初始值 x0 1 x0 0 x0 0 x0 0 x0 0 x0 0 x0 0 由此得到 方程的根的近似值为 0 3 用 matlab 中的内部函数求方程的根 1 用 roots 求方程 x9 x8 1 0 的根 2 用 solve 求上述方程的根 3 用 fzero 求方程 x2 4sinx 25 的实根 4 用 fsolve 求方程 x e x在 0 附近的根 解 1 在 matlab 命令窗口输入命令 p zeros 10 1 p 1 2 end 1 1 roots p ans 1 9643 0 8254 0 2893i 0 8254 0 2893i 0 6575 0 3146i 0 6575 0 3146i 0 6573 0 4660i 0 6573 0 4660i 0 8075 0 7906i 0 8075 0 7906i 2 在 matlab 命令窗口输入命令 solve x 9 x 8 1 0 ans RootOf X1 9 X1 8 1 X1 3 首先作图确定根的大致范围 clf ezplot x x grid on hold on ezplot x 2 4 sin x 25 6 4 20246 30 25 20 15 10 5 0 5 10 15 x x2 4 sin x 25 图 1 6 由图 1 6 可确定两根在 x1 4 x2 5 附近 再具体求根 x1 fzero x 2 4 sin x 25 4 x2 fzero x 2 4 sin x 25 5 x1 4 8049 x2 5 6235 4 在 matlab 命令窗口输入命令 x fsolve x exp x 0 Optimization terminated first order o

温馨提示

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

评论

0/150

提交评论