资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1目的目的数值分析算法在科学应用各个分支中有着越来越广泛的数值分析算法在科学应用各个分支中有着越来越广泛的应用,特别是计算机的出现更有助这些应用的不断发展。应用,特别是计算机的出现更有助这些应用的不断发展。实际生活中,很多问题都可以归纳为数值问题,如测得实际生活中,很多问题都可以归纳为数值问题,如测得的实验数据有时候可以用插值法进行函数逼近预测。数的实验数据有时候可以用插值法进行函数逼近预测。数值算法常与工程实践相结合,通过值算法常与工程实践相结合,通过MATLABMATLAB软件直接运行软件直接运行可进行的程序来解决实际问题。本课题实现了三次样条可进行的程序来解决实际问题。本课题实现了三次样条插值法,二分法,牛顿法,梯形法,改进的欧拉法,雅插值法,二分法,牛顿法,梯形法,改进的欧拉法,雅克比迭代法等算法的克比迭代法等算法的MATLABMATLAB程序设计,弥补了函数库的程序设计,弥补了函数库的缺省,更便于应用。缺省,更便于应用。二、方程求根二、方程求根三、常微分方程数值解三、常微分方程数值解一、三次样条插值函数法一、三次样条插值函数法算法实现四、雅克比迭代法四、雅克比迭代法一、三次样条插值函数法一、三次样条插值函数法 设设 ,若函数若函数 且且在在每每个个 上上为为三三次次多多项项式式 /* cubic polynomial */,则则称称为为 节节 点点 上上 的的 三三 次次 样样 条条 函函 数数 。 若若 在在 节节 点点 满满 足足 ,则称为,则称为 f 的的三次样条插值函数三次样条插值函数在实际工作中,利用三次样条插值可以很好的进行数据拟在实际工作中,利用三次样条插值可以很好的进行数据拟合时,下面给出三次样条插值函数法算法的步骤:合时,下面给出三次样条插值函数法算法的步骤:准备(输入各插值节点和函数值、边界条件)准备(输入各插值节点和函数值、边界条件)判断(根据边界条件给出相应定义)判断(根据边界条件给出相应定义)求解(用追赶法求解方程组)求解(用追赶法求解方程组)输出(得出各区间插值函数并输出插值曲线)输出(得出各区间插值函数并输出插值曲线)程序:程序:function function yyyy b c d=myspline3(x,y,xx,flag,vl,vr) b c d=myspline3(x,y,xx,flag,vl,vr)程序中:程序中:( (x,yx,y) )为插值节点,为插值节点,xxxx为插值点;为插值点;flagflag表端点表端点边界条件类型:边界条件类型:flag=0flag=0为自然条件为自然条件( (端点二阶导数为端点二阶导数为0)0);flag=1flag=1为第一类边界条件为第一类边界条件( (端点一阶导数给定端点一阶导数给定) );flag=2flag=2为第二类边界条件为第二类边界条件( (端点二阶导数给定端点二阶导数给定) );vl,vrvl,vr表左右端表左右端点处的在边界条件值。点处的在边界条件值。b,c,db,c,d分别为各子区间上的系数值,分别为各子区间上的系数值,yyyy表插值点处的函数值。表插值点处的函数值。例:例:已知数据如下:已知数据如下:x0.25 0.30 0.39 0.45 0.53 y0.5000 0.54770.62450.67080.728第一边界条件:第一边界条件:第二边界条件:第二边界条件:用三次样条插值函数进行数据拟合。用三次样条插值函数进行数据拟合。 解解(1)(1)求第一边界问题,在求第一边界问题,在matlabmatlab命令窗口输入:命令窗口输入:format short g;format short g;x1=0.25 0.30 0.39 0.45 0.53;y1=0.5000 0.5477 x1=0.25 0.30 0.39 0.45 0.53;y1=0.5000 0.5477 0.6245 0.6708 0.728;xx1=x1(1):0.001:x1(end);0.6245 0.6708 0.728;xx1=x1(1):0.001:x1(end);yy1 b1 c1 d1=myspline3(x1,y1,xx1,1, 1.0000, yy1 b1 c1 d1=myspline3(x1,y1,xx1,1, 1.0000, 0.6868); disp(b1 c1(1:end-1,1) d1);0.6868); disp(b1 c1(1:end-1,1) d1);plot(x1,y1,bo,xx1,yy1,-k);plot(x1,y1,bo,xx1,yy1,-k);运行结果:运行结果: 1 -1.0143 1.88631 -1.0143 1.8863 0.91272 -0.73137 0.79518 0.91272 -0.73137 0.79518 0.80039 -0.51667 0.63198 0.80039 -0.51667 0.63198 0.74522 -0.40292 0.3151 0.74522 -0.40292 0.3151各区间三次样条插值函数图形如下:各区间三次样条插值函数图形如下:(2 2)求第二边界问题,在)求第二边界问题,在matlabmatlab命令窗口输入:命令窗口输入:yy2 b2 c2 d2=myspline3(x1,y1,xx1,2,0,0); disp(b2 yy2 b2 c2 d2=myspline3(x1,y1,xx1,2,0,0); disp(b2 c2(1:end-1,1) d2); plot(x1,y1,bo,xx1,yy2,-k)c2(1:end-1,1) d2); plot(x1,y1,bo,xx1,yy2,-k)运行结果:运行结果: 0.96966 0 -6.26520.96966 0 -6.2652 0.92267 -0.93977 1.8813 0.92267 -0.93977 1.8813 0.79923 -0.43181 -0.46 0.79923 -0.43181 -0.46 0.74245 -0.51461 2.1442 0.74245 -0.51461 2.1442各区间的三次样条插值函数图像为:各区间的三次样条插值函数图像为:1、二分法二、方程求根二、方程求根二分法的计算步骤如下:二分法的计算步骤如下:(1)(1)准备准备 记根区间记根区间 取中点取中点 并计算并计算 (2)(2)判断判断 判别判别 的值:若的值:若 则则 是根;若是根;若 则取则取 ; ;否则取否则取 则得到则得到 取代取代 继续继续计算。计算。(3)(3)继续运算继续运算 由区间由区间 构造区间构造区间 并得到并得到 若若 ,则,则 为所求的根;若为所求的根;若 ;则取;则取 否则可取否则可取 . .直到精度达到为止。直到精度达到为止。程序:程序:function function split(y,a,b,ssplit(y,a,b,s) ) 其中其中y y为函数,为函数,a,ba,b为根区间,为根区间,s s为精度为精度例:例:用二分法求方程用二分法求方程 在在0.5,0.60.5,0.6间的解,要间的解,要求精度为求精度为 ,输出各二分点的值和计算次数。,输出各二分点的值和计算次数。解:在解:在matlabmatlab命令窗口中输入命令窗口中输入 format long format long split(x-exp(-x),0.5,0.6,1e-5) split(x-exp(-x),0.5,0.6,1e-5)运行结果为:运行结果为:x1 =0.567141723632812x1 =0.567141723632812k =14k =14x =0.550000000000000 0.575000000000000 0.562500000000000 x =0.550000000000000 0.575000000000000 0.562500000000000 0.568750000000000 0.565625000000000 0.5671875000000000.568750000000000 0.565625000000000 0.567187500000000 0.566406250000000 0.566796875000000 0.566992187500000 0.566406250000000 0.566796875000000 0.566992187500000 0.567089843750000 0.567138671875000 0.5671630859375000.567089843750000 0.567138671875000 0.5671630859375000.567150878906250 0.5671447753906250.567150878906250 0.5671447753906252、牛顿法 经典的牛顿迭代公式为:经典的牛顿迭代公式为: 牛顿算法的计算步骤为:牛顿算法的计算步骤为:准备(选取初值,计算导数值)准备(选取初值,计算导数值)迭代(按牛顿公式迭代)迭代(按牛顿公式迭代)控制(按照一定的条件进行控制)控制(按照一定的条件进行控制)修改(若达到迭代次数或者导数值为零,则用迭修改(若达到迭代次数或者导数值为零,则用迭代值代替初值继续进行迭代计算)代值代替初值继续进行迭代计算)程序:程序:function newton(f,x0,esp,ml) function newton(f,x0,esp,ml) 其中其中f f为函数,为函数,x0x0为近似解,为近似解,espesp为精度,为精度,mlml为最为最大迭代次数大迭代次数例:例:用牛顿法求解用牛顿法求解 在在 附近的根,附近的根,根的准确值为根的准确值为1.879385241.87938524,要求精度为,要求精度为 解:在解:在matlabmatlab命令窗口中输入命令窗口中输入 format long format long newton(x3-3*x-1,1.5,1e-4,10) newton(x3-3*x-1,1.5,1e-4,10)运行结果为:运行结果为:方程的根和迭代次数分别为:方程的根和迭代次数分别为:x1 = 1.879385252252088x1 = 1.879385252252088k = 5k = 5若初值为若初值为2 2,则根为,则根为-1.532088887968161-1.532088887968161,迭代次,迭代次数为数为8 8;初值为;初值为1.31.3,根为,根为1.8793853219829061.879385321982906,迭,迭代次数为代次数为3 3;初值为;初值为1.41.4,根为,根为1.8793853762672261.879385376267226迭代次数为迭代次数为4.4.三、常微分方程数值解三、常微分方程数值解1、梯形法梯形法的迭代公式为:梯形法的迭代公式为:梯形法的计算步骤如下:梯形法的计算步骤如下:准备(输入初值,计算步长)准备(输入初值,计算步长)迭代(按上述公式迭代)迭代(按上述公式迭代)控制(满足条件输出解,否则重新迭代)控制(满足条件输出解,否则重新迭代)程序:程序:function y=ladder(a,b,y0,n,esp)function y=ladder(a,b,y0,n,esp)其中其中a,ba,b为区间端点,为区间端点,y0y0为初值,为初值,n n为等分点,为等分点,espesp为精度为精度例:例:用梯形法求解下列初值问题的数值解用梯形法求解下列初值问题的数值解精度为精度为 ,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、改进的欧拉法 改进的欧拉法公式为:改进的欧拉法公式为: 算法的计算步骤为:算法的计算步骤为:准备(输入初值,计算步长)准备(输入初值,计算步长)迭代(按上述公式迭代)迭代(按上述公式迭代)控制(满足条件输出解,否则重新迭代)控制(满足条件输出解,否则重新迭代)程序:程序:function y=myenler(a,b,y0,n,esp);function y=myenler(a,b,y0,n,esp);其中其中a,ba,b为区间端点,为区间端点,y0y0为初值,为初值,n n为等分点,为等分点,espesp为精度为精度例:例:用改进的欧拉法求解用改进的欧拉法求解精度为精度为 ,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进行分解并利用迭代法得到雅克比进行分解并利用迭代法得到雅克比迭代法公式:迭代法公式:算法的计算步骤如下:算法的计算步骤如下:准备(输入系数矩阵,初始向量)准备(输入系数矩阵,初始向量)判断(判断(A是否为严格对角占优阵)是否为严格对角占优阵)迭代(若达到最大迭代次数则输出解,否则重新迭代)迭代(若达到最大迭代次数则输出解,否则重新迭代)例:例:求解方程组求解方程组精度为精度为 ,最大迭代次数为最大迭代次数为10,初始向量为,初始向量为 . 解:在解:在matlab命令窗口中输入:命令窗口中输入:A=8 -3 2;4 11 -1;6 3 12; b=20;33;36; X0=0 0 0; jkb(A,b,X0, 0.001,10)运行结果为:运行结果为:系数矩阵系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛不是严格对角占优的,此雅可比迭代不一定收敛k = 8雅可比迭代收敛雅可比迭代收敛,此方程组近似解此方程组近似解X如下:如下:ans = 3.0003 1.9999 0.9997程序:程序:矩阵迭代法判定函数矩阵迭代法判定函数function function jkbsl(Ajkbsl(A) )雅克比迭代法函数雅克比迭代法函数function jkb(A,b,X0,eps,ml)function jkb(A,b,X0,eps,ml)其中其中A A为系数矩阵,为系数矩阵,X0X0为初始向量,为初始向量,epseps是误差精度,是误差精度,最大迭代次数为最大迭代次数为mlml。总结总结本论文主要实现了三次样条插值法,方程求根的二分本论文主要实现了三次样条插值法,方程求根的二分法和牛顿法,常微分方程数值解的梯形法和改进的欧法和牛顿法,常微分方程数值解的梯形法和改进的欧拉法,线性方程组的雅克比迭代法算法的拉法,线性方程组的雅克比迭代法算法的matlabmatlab函数,函数,增加了函数库函数,便于以后用户的直接应用。在论增加了函数库函数,便于以后用户的直接应用。在论文编写过程中,进一步学习了文编写过程中,进一步学习了officeoffice软件,熟练掌握软件,熟练掌握了了matlabmatlab软件,为今后的学习打下了良好的基础。软件,为今后的学习打下了良好的基础。 敬请各位评委老师批评指正谢 谢!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号