基于MATLAB的数值分析中的相关算法实现_第1页
基于MATLAB的数值分析中的相关算法实现_第2页
基于MATLAB的数值分析中的相关算法实现_第3页
基于MATLAB的数值分析中的相关算法实现_第4页
基于MATLAB的数值分析中的相关算法实现_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

基于MATLAB的《数值分析》有关算法实现1目的数值分析算法在科学应用各个分支中有着越来越广泛的应用,特别是计算机的出现更有助这些应用的不断发展。实际生活中,很多问题都可以归纳为数值问题,如测得的实验数据有时候可以用插值法进行函数逼近预测。数值算法常与工程实践相结合,通过MATLAB软件直接运行可进行的程序来解决实际问题。本课题实现了三次样条插值法,二分法,牛顿法,梯形法,改进的欧拉法,雅克比迭代法等算法的MATLAB程序设计,弥补了函数库的缺省,更便于应用。二、方程求根三、常微分方程数值解一、三次样条插值函数法算法实现四、雅克比迭代法一、三次样条插值函数法定义设,若函数

且在每个上为三次多项式

/*cubicpolynomial*/,则称为节点上的三次样条函数。若在节点满足,则称为f的三次样条插值函数在实际工作中,利用三次样条插值可以很好的进行数据拟合时,下面给出三次样条插值函数法算法的步骤:准备(输入各插值节点和函数值、边界条件)判断(根据边界条件给出相应定义)求解(用追赶法求解方程组)输出(得出各区间插值函数并输出插值曲线)程序:function[yybcd]=myspline3(x,y,xx,flag,vl,vr)程序中:(x,y)为插值节点,xx为插值点;flag表端点边界条件类型:flag=0为自然条件(端点二阶导数为0);flag=1为第一类边界条件(端点一阶导数给定);flag=2为第二类边界条件(端点二阶导数给定);vl,vr表左右端点处的在边界条件值。b,c,d分别为各子区间上的系数值,yy表插值点处的函数值。例:已知数据如下:x0.250.300.390.450.53y0.50000.54770.62450.67080.728第一边界条件:第二边界条件:用三次样条插值函数进行数据拟合。解(1)求第一边界问题,在matlab命令窗口输入:formatshortg;x1=[0.250.300.390.450.53]';y1=[0.50000.54770.62450.67080.728]';xx1=[x1(1):0.001:x1(end)]';[yy1b1c1d1]=myspline3(x1,y1,xx1,1,1.0000,0.6868);disp([b1c1(1:end-1,1)d1]);plot(x1,y1,'bo',xx1,yy1,'--k');运行结果:1-1.01431.88630.91272-0.731370.795180.80039-0.516670.631980.74522-0.402920.3151各区间三次样条插值函数图形如下:(2)求第二边界问题,在matlab命令窗口输入:[yy2b2c2d2]=myspline3(x1,y1,xx1,2,0,0);disp([b2c2(1:end-1,1)d2]);plot(x1,y1,'bo',xx1,yy2,'--k')运行结果:0.969660-6.26520.92267-0.939771.88130.79923-0.43181-0.460.74245-0.514612.1442各区间的三次样条插值函数图像为:1、二分法二、方程求根二分法的计算步骤如下:(1)准备记根区间取中点并计算(2)判断判别的值:若则是根;若则取;否则取则得到取代继续计算。(3)继续运算由区间构造区间并得到若,则为所求的根;若;则取

否则可取.直到精度达到为止。程序:functionsplit(y,a,b,s)其中y为函数,a,b为根区间,s为精度例:用二分法求方程在[0.5,0.6]间的解,要求精度为,输出各二分点的值和计算次数。解:在matlab命令窗口中输入>>formatlong>>split('x-exp(-x)',0.5,0.6,1e-5)运行结果为:x1=0.567141723632812k=14x=0.5500000000000000.5750000000000000.5625000000000000.5687500000000000.5656250000000000.567187500000000

0.5664062500000000.5667968750000000.5669921875000000.5670898437500000.5671386718750000.5671630859375000.5671508789062500.5671447753906252、牛顿法经典的牛顿迭代公式为:牛顿算法的计算步骤为:准备(选取初值,计算导数值)迭代(按牛顿公式迭代)控制(按照一定的条件进行控制)修改(若达到迭代次数或者导数值为零,则用迭代值代替初值继续进行迭代计算)程序:functionnewton(f,x0,esp,ml)其中f为函数,x0为近似解,esp为精度,ml为最大迭代次数例:用牛顿法求解在附近的根,根的准确值为1.87938524,要求精度为解:在matlab命令窗口中输入>>formatlong>>newton('x^3-3*x-1',1.5,1e-4,10)运行结果为:方程的根和迭代次数分别为:x1=1.879385252252088k=5若初值为2,则根为-1.532088887968161,迭代次数为8;初值为1.3,根为1.879385321982906,迭代次数为3;初值为1.4,根为1.879385376267226迭代次数为4.三、常微分方程数值解1、梯形法梯形法的迭代公式为:梯形法的计算步骤如下:准备(输入初值,计算步长)迭代(按上述公式迭代)控制(满足条件输出解,否则重新迭代)程序:functiony=ladder(a,b,y0,n,esp)其中a,b为区间端点,y0为初值,n为等分点,esp为精度例:用梯形法求解下列初值问题的数值解精度为,n=10,列出各节点数值解,并与精确解比较解:将方程函数写入函数mmyfunc.m中,然后再命令窗口中输入:y=ladder(0,1,1,10,1e-4),可得到各节点数值解。近似解和精确解的对比表格如下:节点近似解精确解节点近似解精确解0.11.09571.09540.61.48431.48320.21.18361.18320.71.55041.54920.31.26541.26490.81.61391.61250.41.34231.34160.91.67511.67330.51.41511.41421.01.73421.73212、改进的欧拉法改进的欧拉法公式为:

算法的计算步骤为:准备(输入初值,计算步长)迭代(按上述公式迭代)控制(满足条件输出解,否则重新迭代)程序:functiony=myenler(a,b,y0,n,esp);其中a,b为区间端点,y0为初值,n为等分点,esp为精度例:用改进的欧拉法求解精度为,n=10,列出各节点数值解,并与精确解比较。解:将方程函数写入函数mmyfuno.m中,然后再命令窗口中输入:myenler(0,1,0,10,1e-4),可得到各节点数值解。近似解和精确解的对比表格如下:节点近似解精确解节点近似解精确解0.100.005160.60.209630.211190.20.016950.021260.70.292410.293410.30.045640.0491820.80.390180.390670.40.0868540.089680.90.503420.503430.50.14130.143471.00.632540.63212四、雅克比迭代法解线性方程组,将A进行分解并利用迭代法得到雅克比迭代法公式:算法的计算步骤如下:准备(输入系数矩阵,初始向量)判断(A是否为严格对角占优阵)迭代(若达到最大迭代次数则输出解,否则重新迭代)例:求解方程组精度为,最大迭代次数为10,初始向量为.

解:在matlab命令窗口中输入:A=[8-32;411-1;6312];b=[20;33;36];X0=[000]';jkb(A,b,X0,0.001,10)运行结果为:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛k=8雅可比迭代收敛,此方程组近似解X如下:ans=3.00031.99990.9997程序:矩阵迭代法判定函数functionjkbsl(A)雅克比迭代法函数functionjkb(A,b,X0

温馨提示

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

评论

0/150

提交评论