数值分析课程设计报告(95分)
- 格式:doc
- 大小:1.99 MB
- 文档页数:22
插值法和多项式拟合的研究摘要在科研和生产实践中,常常需要通过一组测量数据来寻找变量x与y的函数关系近似表达式。
解决这类问题的方法有两种:一种是插值法,另一种是拟合法。
插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。
拟合法能够是从给定的一组实验数据出发,寻找函数的一个近似表达式,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合。
本文主要介绍拉格朗日插值法、埃尔米特插值法、三次样条插值法以及基于最小二乘法的多项式拟合。
关键词:拉格朗日插值,埃尔米特插值,样条插值,多项式拟合1方法的意义在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。
有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。
解决这类问题的方法有两种:一种是插值法,另一种是拟合法。
插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。
它要求给出函数的一个函数表,然后选定一种简单的函数形式,比如多项式、分段线性函数及三角多项式等,通过已知的函数表来确定一个简单的函数()x ϕ作为()f x 的近似,概括地说,就是用简单函数为离散数组建立连续模型。
插值法在实际应用中非常广泛,但是它也有明显的缺陷,一是测量数据常常带有测试误差,而插值多项式又通过所有给出的点,这样就是插值多项式保留了这些误差;二是如果实际得到的数据过多,则必然得到次数较高的插值多项式,这样近似的效果并不理想。
拟合法能够很好的解决这些问题,它从给定的一组实验数据出发,寻找函数的一个近似表达式y=()x ϕ,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合的问题,函数的近似表达式y=()x ϕ称为拟合曲线。
常用最小而二乘法来确定拟合曲线。
2插值法的介绍2.1 插值法定义设 f (x )为[a ,b ]上的函数,在互异点n x x x ,...,,10处的函数值分别为 )(),...,(),(10n x f x f x f ,构造一个简单函数 ϕ(x ) 作为函数 f (x ) 的近似表达式y = f (x ) ≈ ϕ(x ),使)()(i i x f x =ϕ , i =0, 1, 2, …,n (1.0) 则称ϕ(x ) 为关于节点n x x x ,...,,10的插值函数;称n x x x ,...,,10 为插值节点;称))((i i x f x , i =1,2,… , n 为插值点;f (x ) 称为被插值函数。
大学数值分析课程设计一、课程目标知识目标:1. 理解数值分析的基本概念,掌握数值计算方法及其数学原理;2. 掌握线性代数、微积分等基本数学工具在数值分析中的应用;3. 学会分析数值算法的稳定性和误差,评估数值结果的正确性。
技能目标:1. 能够运用数值分析方法解决实际工程和科学研究问题;2. 掌握常用数值分析软件的使用,提高数据处理和问题求解的效率;3. 培养编程实现数值算法的能力,提高解决复杂问题的技能。
情感态度价值观目标:1. 培养学生对数值分析的浓厚兴趣,激发学习积极性;2. 培养学生的团队合作精神,提高沟通与协作能力;3. 增强学生的数学素养,使其认识到数学在科学研究和社会发展中的重要性。
课程性质分析:本课程为大学数值分析课程,旨在教授学生数值计算的基本理论和方法,培养学生解决实际问题的能力。
学生特点分析:学生具备一定的高等数学基础,具有较强的逻辑思维能力和抽象思维能力。
教学要求:1. 注重理论与实践相结合,提高学生的实际操作能力;2. 鼓励学生主动参与讨论,培养学生的创新意识和解决问题的能力;3. 结合实际案例,强化学生对数值分析在工程和科研中的应用认识。
二、教学内容1. 数值分析基本概念:包括误差分析、稳定性、收敛性等;教材章节:第一章 数值分析概述2. 数值线性代数:矩阵运算、线性方程组求解、特征值与特征向量计算等;教材章节:第二章 线性代数的数值方法3. 数值微积分:数值积分、数值微分、常微分方程数值解等;教材章节:第三章 微积分的数值方法4. 非线性方程与系统求解:迭代法、牛顿法、弦截法等;教材章节:第四章 非线性方程与系统的数值解法5. 优化问题的数值方法:线性规划、非线性规划、最小二乘法等;教材章节:第五章 优化问题的数值方法6. 数值模拟与数值实验:蒙特卡洛方法、有限元方法、差分方法等;教材章节:第六章 数值模拟与数值实验7. 数值软件应用:MATLAB、Python等数值计算软件在数值分析中的应用;教材章节:第七章 数值软件及其应用教学进度安排:第1-2周:数值分析基本概念第3-4周:数值线性代数第5-6周:数值微积分第7-8周:非线性方程与系统求解第9-10周:优化问题的数值方法第11-12周:数值模拟与数值实验第13-14周:数值软件应用及综合案例分析教学内容确保科学性和系统性,注重理论与实践相结合,提高学生的实际操作能力。
《数值分析课程设计》报告专业:信息与计算科学学号: xxxxxxxxx学生姓名: xxx指导教师: xxx一.题目掌握拉格朗日插值函数和三次样条插值函数的构造方法,试比较两种插值函数的优劣,并且说明原因。
二、理论拉格朗日插值函数的定义和构造:通过1n +个节点012n x x x x <<<<…的n 次插值多项式()n L x ,假定它满足条件()n j j L x y = ,0,1,2,,.j n =…………………………………………………………① 为了构造L ()n x ,我们先定义n 次插值基函数。
若n 次多项式()(0,1,,)j l x j n =…在1n +个节点01n x x x <<<…上满足条件1,(),0,1,,.0,j k k j l x j k n k j =⎧==⎨≠⎩………………………………………………………②就称这1n +个n 次多项式01(),(),,()n l x l x l x …为节点01,,,n x x x …上的n 次插值基函数。
通过推导方法可得到n 次插值基函数为011011()()()()()()()()()k k n k k k k k k k n x x x x x x x x l x x x x x x x x x -+-+----=----…………0,1,,.k n =………………………③显然它满足条件②。
于是,满足条件①的插值多项式()n L x 可表示为0().nn k k k L y l x ==∑………………………………………………………………………④由()k l x 的定义,知0()(),0,1,,.nn j k k j j k L x y l x y j n ====∑…形如④式的插值多项式L ()n x 称为拉格朗日插值多项式。
若引入记号101()()()()n n x x x x x x x ω+=---……………………………………………………⑤容易求得'1011()()()()()n k k k k k k k n x x x x x x x x x ω+-+=----……于是公式④可改写成1'1()L ().()()nn n kk k n x x y x x x ωω+=+=-∑………………………………………………………⑥ 注意:n 次插值多项式()n L x 通常是次数为n 的多项式,特殊情况下次数可能小于n 。
数值分析课程设计(最终版)本⽂主要通过Matlab 软件,对数值分析中的LU 分解法、最⼩⼆乘法、复化Simpon 积分、Runge-Kutta ⽅法进⾏编程,并利⽤这些⽅法在MATLAB 中对⼀些问题进⾏求解,并得出结论。
实验⼀线性⽅程组数值解法中,本⽂选取LU 分解法,并选取数据于《数值分析》教材第5章第153页例5进⾏实验。
所谓LU 分解法就是将⾼斯消去法改写为紧凑形式,可以直接从矩阵A 的元素得到计算L 、U 元素的递推公式,⽽不需要任何步骤。
⽤此⽅法得到L 、U 矩阵,从⽽计算Y 、X 。
实验⼆插值法和数据拟合中,本⽂选取最⼩⼆乘拟合⽅法进⾏实验,数据来源于我们课堂学习该章节时的课件中的多项式拟合例⼦进⾏实验。
最⼩⼆乘拟合是⼀种数学上的近似和优化,利⽤已知的数据得出⼀条直线或者曲线,使之在坐标系上与已知数据之间的距离的平⽅和最⼩。
利⽤excel 的⾃带函数可以较为⽅便的拟合线性的数据分析。
实验三数值积分中,本⽂选取复化Simpon 积分⽅法进⾏实验,通过将复化Simpson 公式编译成MATLAB 语⾔求积分∫e ;x dx 10完成实验过程的同时,也对复化Simpon 积分章节的知识进⾏了巩固。
实验四常微分⽅程数值解,本⽂选取Runge-Kutta ⽅法进⾏实验,通过实验了解Runge-Kutta 法的收敛性与稳定性同时学会了学会⽤Matlab 编程实现Runge-Kutta 法解常微分⽅程,并在实验的过程中意识到尽管我们熟知的四种⽅法,事实上,在求解微分⽅程初值问题,四阶法是单步长中最优秀的⽅法,通常都是⽤该⽅法求解的实际问题,计算效果⽐较理想的。
实验五数值⽅法实际应⽤,本⽂采⽤最⼩⼆乘法拟合我国2001年到2015年的⼈⼝增长模型,并预测2020年我国⼈⼝数量。
关键词:Matlab ;LU 分解法;最⼩⼆乘法;复化Simpon 积分;Runge-Kutta⼀.LU分解法 (1)1.1实验⽬的 (1)1.2基本原理 (1)1.3实验内容 (2)1.4数据来源 (3)1.5实验结论 (3)⼆.Lagrange插值 (4)2.1实验⽬的 (4)2.2基本原理 (5)2.3实验内容 (5)2.4数据来源 (6)2.5实验结论 (6)三.复化simpon积分 (7)3.1实验⽬的 (7)3.2基本原理 (7)3.3实验内容 (7)3.4数据来源 (8)3.5实验结论 (8)四.Runge-Kutta⽅法 (9)4.1实验⽬的 (9)4.2基本原理 (9)4.3实验内容 (10)4.4数据来源 (11)4.5实验结论 (11)五.数值⽅法实际应⽤ (11)5.1实验⽬的 (11)5.2基本原理 (12)5.3实验内容 (12)5.4数据来源 (13)5.5实验结论 (13)总结 (16)参考⽂献 (17)⼀.LU 分解法1.1实验⽬的[1] 了解LU 分解法的基本原理和⽅法;[2] 通过实例掌握⽤MATLAB 求线性⽅程组数值解的⽅法; [3] 编程实现LU 分解1.2基本原理对于矩阵A ,若存在⼀个单位下三⾓矩阵L 和⼀个上三⾓U ,使得A =LU (1.1)。
武汉理工大学学生实验报告书实验课程名称数值分析开课学院计算机科学与技术学院指导老师姓名学生姓名学生专业班级2010—2010学年第一学期实验课程名称:数值分析第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)用拉格朗日插值法计算时,输入及运行结果如下:拉格朗日插值法牛顿插值法(2)利用二次插值计算时,输入及运行结果如下:拉格朗日插值法牛顿插值法(3)用艾尔米特插值法计算时,f(x)的插值多项式H5(x)=(1+4*x)*(x-0.5)*(x-0.5)*(x-2)*(x-2)+(3.90807-6.03838*x)*(x-2)*(x-2)*x*x+(2.34573-4.16674*x)*x*x*(x-0.5)*(x-0.5)(4)各插值算法的精度差异比较经过比较,拉格朗日插值法要比牛顿插值法算法的计算量多一些,拉格朗日插值法后一次计算时用到了前一次计算的结果,提高了运算的效率,但拉格朗日插值法在构造艾尔米特插值法时很方便,将坐标点和对应的导数结合起来的精度比线性插值的精度又要高一些。
但从实验数据来看,在坐标不是很多的情况下,已知的点越多精度也就相对较高。
对于实验要求的第二组数据用拉格朗日插值法(或者牛顿插值法)实验结果如下:一下分别是二阶、三阶、四阶、五阶插值得到的结果以上只是实验结果的一部分,改变插值的位置时,得到的实验结果精度也是有所不同的。
由以上结果分析可知,插值次数并不是越多越好,多了反而会让结果更加偏离真实结果,这充分说明了高次插值存在“病态性质”,在已知点很多的情况下应该采用分段低次插值,将拉格朗日插值法和牛顿插值法运用到分段低次插值法当中,这样得到的结果可能胡更加精确。
课程设计报告课程设计题目: 非线性方程求解2011年 11月 27 日题目:用二分法,简单迭代法、牛顿迭代法以及弦截法求非线性方程2sin 02-=x x误差不超过10-4,输出迭代次数,初始值和根的近似值。
一、摘要在matlab 环境下运用熟悉的计算机编程语言结合二分法、简单迭代法、牛顿迭代法以及弦截法求解非线性方程,在运行完程序后,对运行结果做出了各方面的分析和比较。
最终得出二分法迭代次数最多,需14次,而简单迭代法、牛顿迭代法以及弦截法的迭代次数都较少,只需4—5次。
由于方程有多个解,所以当赋的初始值不同或给定的区间不同时,根的近似值也会有所不同。
二、设计目的用熟悉的计算机语言编程,上机完成用二分法、简单迭代法、牛顿迭代法以及弦截法求解非线性方程,掌握各种方法的理论依据及求解思路,了解各种迭代方法的异同。
三、理论基础二分法:二分法就是将方程根所在的区间平分为两个小区间,再判断根属于哪个小区间;把有根的小区间再平分为二,再判断根所在的更小的区间,对分;重复这一过程,最后求出所要的近似值。
简单迭代法:简单迭代法是将方程()0f x =化为一个等价的方程:()(1)x x ϕ=从而构成序列:1()0,1,2...(2)k k x x k ϕ+==即给定一个初值0x ,由(2)可算得10()x x ϕ=,再将1x 带入(2)的右端,又可得21()x x ϕ=,…。
我们{k x }为迭代序列,而称(1)式中的()x ϕ为迭代函数,(2)为迭代格式。
如果()x ϕ连续,迭代序列{k x }收敛于*x ,则*x 就是方程(1)的解。
事实上*1()()()lim lim lim k k k k k k x x x x ϕϕϕ+→∞→∞→∞===,又*1,k k x x +→∞→,亦即:**()x x ϕ=或*()0f x =所以,如果迭代序列收敛,总能收敛于原方程的解。
实际计算中,无穷过程不可能实现,只迭代到一定程度,取1k x +作为原方程的近似根。
1.直接三角形分解#include<stdio.h>#include<math.h>#define N 10double a[N][N],b[N],X[N],Y[N],u[N][N],v[N][N],c[N][N];int n;void input(){int i,j;printf("请输入矩阵的阶数n=");scanf("%d",&n);printf("请输入矩阵的各项元素(按矩阵形式输入以空格隔开)a[n][n]:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%lf",&a[i][j]);printf("请输入矩阵的常数列:\n");for(i=0;i<n;i++)scanf("%lf",&b[i]);}void solveUandV(){int i,j,k;double temp1,temp2;for(i=n-1;i>=0;i--){for(j=i;j>=0;j--){temp1=0;for(k=i+1;k<n;k++){temp1+=u[j][k]*v[k][i];}u[j][i]=a[j][i]-temp1;temp2=0;for(k=i+1;k<N;k++){temp2+=u[i][k]*v[k][j];}v[i][j]=(a[i][j]-temp2)/u[i][i];}}printf("上三角u为:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%lf\t",u[i][j]);printf("\n");}printf("下三角单位矩阵v为:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%lf\t",v[i][j]);printf("\n");}}void substituting(){int i,j;double temp1,temp2;printf("中间解Y=\n");for(i=n-1;i>=0;i--){temp1=0;for(j=i+1;j<n;j++)temp1+=Y[j]*u[i][j];Y[i]=(b[i]-temp1)/u[i][i];printf("%lf\t\t",Y[i]);}printf("\n");for(i=0;i<n;i++){temp2=0;for(j=0;j<i;j++){temp2+=X[j]*v[i][j];}X[i]=Y[i]-temp2;}}void verification(){int i,j,k;double t;for(i=0;i<n;i++){for(j=0;j<n;j++){t=0;for(k=0;k<n;k++)t+=u[i][k]*v[k][j];c[i][j]=t;}}printf("原系数矩阵为:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%lf\t",c[i][j]);printf("\n");}}void output(){int i;printf("方程的解为:\n");for(i=0;i<n;i++)printf("x[%d]= %lf\n",i,X[i]); }void main(){input();solveUandV();substituting();verification();output();}结果:#include"iostream.h"#include"math.h"#define e 0.00000000000001 double f(double x){double y;if (x==0){return y=1.0;}else y=sin(x)/x;return y;}void romberg(double a,double b) {int n=1,k=0;double h,T2,S2=0,C2=0,R2=0,T1,C1,S1,R1;h=(b-a)/2;T2=h*(f(a)+f(b));while (fabs((R2-R1))>e){R1=R2;T1=T2;S1=S2;C1=C2;double sum=0;int i;for(i=1;i<=n;i++){sum=sum+f(a+(2*i-1)*h);}T2=T1/2+sum*h;S2=(4*T2-T1)/3;C2=(16*S2-S1)/15;R2=(64*C2-C1)/63;n=n*2;k++;h=h/2;}cout<<"*****最后结果为:"<<"I="<<R2<<endl;}void main(){double a,b;cout<<"***输入上下限a,b的值用空格隔开***"<<endl;cin>>a>>b;cout<<"***下限a="<<a<<endl;cout<<"***上限b="<<b<<endl;cout<<"***被积函数为:y=sin(x)/x"<<endl;cout<<"*********************结果如下*********************"<<endl;romberg(a,b);}牛顿插值:#include <iostream.h>#include <math.h>void main(){int n,i,j;double A[50][50];double x[50],y[50];double K=1,X=0,N=0,P;cout<<"请输入所求均差阶数:";cin>>n;for(i=0;i<=n;i++){cout<<"请输入x"<<i<<"=";cin>>x[i];cout<<"请输入y"<<i<<"=";cin>>y[i];A[i][0]=x[i]; A[i][1]=y[i];}for(j=2;j<=n+1;j++){for(i=1;i<=n;i++){A[i][j]=(A[i][j-1]-A[i-1][j-1])/(A[i][0]-A[i-j+1][0]);}}for(i=0;i<=n;i++){cout<<"输出第"<<i<<"阶均差为:"<<A[i][i+1]<<endl;}cout<<"请所要代入计算的x的值:X=";cin>>X;for(i=0;i<n;i++){K*=X-x[i];N+=A[i+1][i+2]*K;P=A[0][1]+N;}cout<<"所要求的函数值为:y="<<P<<endl;}(1)Jacobi迭代法#include<stdio.h>#include<math.h>void main(){float a[10][11],x1[10],x2[10],temp=0,fnum=0; int i,j,n,bk=0;printf("输入方程组的未知数的个数(n<10):\nn="); scanf("%d",&n);for(i=1;i<n+1;i++)x1[i]=0;printf("\n输入方程组的系数矩阵:\n");for(i=1;i<n+1;i++){j=1;while(j<n+1){printf("a%d%d=",i,j);scanf("%f",&a[i][j]);j++;}}printf("输入方程组的常数项:\n");for(i=1;i<n+1;i++){printf("b%d=",i);scanf("%f",&a[i][n+1]);}printf("\n");while(bk!=1){for(i=1;i<n+1;i++){for(j=1;j<n+1;j++){if (j!=i)temp=a[i][j]*x1[j]+temp;}x2[i]=(a[i][n+1]-temp)/a[i][i]; temp=0;}for(i=1;i<n+1;i++){fnum=float(fabs(x1[i]-x2[i])); if(fnum>temp) temp=fnum;}if(temp<=pow(10,-4)) bk=1;for(i=1;i<n+1;i++)x1[i]=x2[i];}printf("原方程组的解为:\n");for(i=1;i<n+1;i++){printf("x%d=%7.4f ",i,x1[i]); printf("\n");}}(2)Gauss-Seidel迭代法# include <stdio.h># include <math.h>double sd(double c[3][3],double d[3],int n,double x[3],double ep,int ip,int nmax) {int i,j,k;double emax,s;k=0;do{emax=0;for(i=0;i<n;i++){s=d[i];for(j=0;j<n;j++){s=s+c[i][j]*x[j];}if(fabs(s-x[i])>emax) emax=fabs(s-x[i]);x[i]=s;}k=k+1;}while((emax>ep)&&(k<nmax));if(k>=nmax) ip=-1;else ip=1;return(x[0],x[1],x[2]);}void main(){double ep;int n,ip,nmax;double c[3][3]={{0,0.2,0.1},{0.2,0,0.1},{0.2,0.4,0}};static double d[3]={0.3,1.5,2};static double x[3]={0,0,0};n=3;ip=1;ep=0.000001;nmax=10;sd(c,d,3,x,ep,ip,nmax);if(ip==1){printf("Guass-Seideln");printf("the solution of equestion:n");printf("x1=%1.10fnx2=%1.10fnx3=%1.10fn",x[0],x[1],x[2]);} else printf("seidel method is failure");}。
数值分析课程设计报告姓名班级学号所在单位指导老师201 年月日实验一1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。
由于旅途的颠簸,大家都很疲惫,很快就入睡了。
第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。
第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只给猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题(15621)。
①程序清单n=input('input n:');for x=1:np=5*x+1;for k=1:5p=5*p/4+1;endif p==fix(p),break,endenddisp([x,p])②运行结果运行这段程序后,屏幕出现要求从键盘输入 x 数据的信息input n,输入1200后,MATLAB计算出合适的 x 和 p0 的值为1023 15621截图如下:③算法性能分析(算法思想、精度、复杂度)算法思想:使用逆推的方式解决问题。
每个水手起来的椰子数量等于前一个水手醒来时椰子数量少一的五分之四。
最后每个水手得到的椰子数量会等于最后一堆椰子少一的五分之一。
根据这个逆推,由于椰子的数量是整数,所以利用循环语句知道整数的解答为止。
要使得最初的椰子数p 0为整数,必须取 (x +1) 为 4 5( =1024)的倍数,一种简单的处理可取 x = 1023。
1.2 设,15nn x I dx x=+⎰ (1)从0I 尽可能精确的近似值出发,利用递推公式:115(1,2,20)n n I I n n-=-+=计算机从1I 到20I 的近似值;(2)从30I 较粗糙的估计值出发,用递推公式:111(30,29,,3,2)55n n I I n n-=-+=计算从1I 到20I 的近似值;(3)分析所得结果的可靠性以及出现这种现象的原因。
数值分析课程设计报告设计题1、2、3、5学院、系:专业:姓名:学号:任课教师:提交日期:电子邮箱:目录[设计题一] (3)1.1问题分析与设计思路 (3)1.2程序清单 (4)1.4 结果分析 (5)1.5设计总结 (6)[设计题二] (6)2.1问题分析与设计思路 (7)2.2程序清单 (7)2.3 运行结果 (9)2.4结果分析与设计总结 (9)[设计题三] (10)3.1问题分析与设计思路 (10)3.2程序清单 (10)3.3 运行结果 (12)3.4结果分析与设计总结 (13)[设计题五] (13)4.1问题分析与设计思路 (14)4.2程序清单 (15)4.3 运行结果 (20)4.4结果分析 (21)【数值分析课程设计总结】 (22)1112111231111121n n H n nn n ⎛⎫ ⎪ ⎪ ⎪ ⎪=+ ⎪ ⎪ ⎪⎪+-⎝⎭[设计题一]设计实验验证Hilbert 矩阵的病态性。
1.1问题分析与设计思路在求解任何反问题的过程中通常会遇到病态矩阵问题,而且病态矩阵问题还未有很好的解决方法,尤其是长方形、大型矩阵。
目前主要有Tikhonov 、奇异值截断、奇异值修正等方法。
求解方程组时对数据的小扰动很敏感的矩阵就是病态矩阵。
解线性方程组Ax =b 时,若对于系数矩阵A 及右端项b 的小扰动δA 、δb ,方程组(A +δA )χ=b +δb 的解χ与原方程组Ax =b 的解差别很大,则称矩阵A 为病态矩阵。
方程组的近似解χ一般都不可能恰好使剩余r=b -A χ为零,这时χ亦可看作小扰动问题A χ=b -r(即δA =0,δb =-r)的解,所以当A 为病态时,即使剩余很小,仍可能得到一个与真解相差很大的近似解。
因此,设计思路如下:令x0=(1,1…..1),计算出b=Hx0,求出b ,然后再用高斯消去法球解Hx=b ,得到近似解x ,然后利用标准差:比较x与x0之间的误差。
截图是取了几个n(程序中设置为1至30)去计算,看一下随着n的增大误差的变化情况。
1.2程序清单共两个文件qm1.mgauss_liezhu1.m (在qm1.m中调用此程序)qm1.mgauss_liezhu1.m1.4 结果分析N=14按照N 的递增顺序取了9个误差数据,制成散点折线图如上所示。
由此可以看出,此矩阵求解方程组时对数据的小扰动很敏感实验验证Hilbert 矩阵的病态性成立。
1.5设计总结(1)认识什么事矩阵的病态性(2)令x0=(1,1…..1),计算出b=Hx0,求出b ,然后再用高斯消去法球解Hx=b ,得到近似解x ,然后利用标准差公式比较x 与x0之间的误差。
(3)取几个点进行误差记录 (4)绘制误差的散点图,形象分析[设计题二]1225年,达芬奇研究了方程32210200x x x ++-=并得到它的一个近似根=+=1()- (0, 1, 2,)(2.1)'()n n n nf x x x n f x *1.368808107x =。
没有人知道他用什么方法得到它。
设计两种方法去计算,并比较这两种方法。
2.1问题分析与设计思路f (x )=0的根(或f (x )的零点),当f (x )复杂时,很难求,需要找到有效简单的近似方法去求: (1)二分法理论: f (x )∈C[a,b],单调,f (a )f (b )<0,f (x )=0在(a,b)中有惟一根。
(2)迭代法(3)牛顿(Newton )法针对本题,采用了两种方法。
第一种方法是二分法,得到的近似根与精确解的误差小于。
第二种方法是用牛顿迭代法。
二分法优点:条件和方法简单(只要求f (x )连续即可),方法收敛;缺点:收敛速度慢,不易求偶数重根(如图).Newton 迭代法迭代公式2.2程序清单二分法程序:erfen.mNewton 迭代法程序: qm2_2.mnanewtom.m (在qm2_2.m 中调用)二分法Newton迭代法2.3 运行结果二分法:Newton迭代法2.4结果分析与设计总结通过二分法与Newton迭代法得出的答案相同。
(1)确定求方程近似根的三种方法(2)翻书了解编程步骤(3)总结本章重点知识:1.熟悉区间二分法;2.熟悉迭代法的建立,会使用收敛定理;3.熟悉Newton迭代法及其几何意义;4.熟悉收敛阶的定义;5.熟悉Newton迭代法的收敛阶;[设计题三]某飞机头部的光滑外形曲线的型值点坐标由下表给出:i0 x142 1462 1841 iy 6 272 275 i...800处的函数值y及一阶、二阶导数值y’,y”。
绘出模拟曲线的图形。
3.1问题分析与设计思路曲线拟合的一般步骤(一)绘制散点图,选择合适的曲线类型一般根据资料性质结合专业知识便可确定资料的曲线类型,不能确定时,可在方格坐标纸上绘制散点图,根据散点的分布,选择接近的、合适的曲线类型。
(二)进行变量变换,使变换后的两个变量呈直线关系。
(三)按最小二乘法原理求线性方程和方差分析(四)将直线化方程转换为关于原变量X、Y的函数表达式此题用三次样条插值三次样条函数定义:函数S(x)∈C2[a,b] ,且在每个小区间[ xj,xj+1 ]上是三次多项式,其中 a =x0 <x1<...< xn= b 是给定节点,则称S(x)是节点x0,x1,...xn上的三次样条函数。
若在节点x j 上给定函数值Yj= f (Xj).( j =0, 1, , n) ,并成立S(xj ) =yj .( j= 0, 1, , n) ,则称S(x)为三次样条插值函数。
3.2程序清单text5.mcsfitf.m (function 文件)daos1.m(function文件)daos2.m(function文件)daos1.m文件Csfitf.m文件daos2.m文件text5.m文件3.3 运行结果3.4结果分析与设计总结用三次样条插值拟合出的曲线及计算结果如上图所示。
实际计算是还需要引入边界条件才能完成计算。
边界通常有自然边界(边界点的导数为0),夹持边界(边界点导数给定),非扭结边界(使两端点的三阶导与这两端点的邻近点的三阶导相等)。
Matlab把非扭结边界条件作为默认的边界条件。
[设计题五]给定单摆方程初值问题..s i n ,(0),'(0)0glθθθθθ=-==其中g=9.8,l=25. (1) 取初始偏离角度0100.1745θ== (2) 取初始偏离角度0300.5236θ== 其精确解为0()co s ,gt t lθθωω==。
分别对上述两种情况按照下列方法求出其数值解,比较各方法的优缺点,并将计算结果与精确解做比较(列表、画图)。
(方案I )欧拉法,步长h = 0.025, h = 0.1; (方案II )改进的欧拉法,步长h = 0.05, h = 0.1; (方案III )四阶经典龙格—库塔法,步长h = 0.1。
4.1问题分析与设计思路令,则可以将 改写为:然后改写欧拉法、改进的欧拉法即龙格库塔公式。
欧拉法:改进的欧拉法:龙格库塔法:4.2程序清单euler.meuler_gai.mf5_2.morig6.mR-K.mtext_1.m text_1_2.m text_2.m text_2_2.m text_3.m text_3_2.m4.3 运行结果欧拉改进欧拉R|K4.4结果分析欧拉公式y(xi+1)=yi+h*f(xi,yi)且xi=x0+i*h (i=0,1,2,…,n-1),局部截断误差为O(h^2),欧拉格式仅为一阶方法。
改进欧拉它的局部截断误差为O(h^3),可见,改进欧拉格式较欧拉格式提高了精度,其截断误差比欧拉格式提高了一阶。
欧拉法用差商[y(xi+1)-y(xi)]/h 近似代替y(xi)的导数,局部截断误差较大;改进欧拉法先用欧拉法求出预报值,再利用梯形公式求出校正值,局部截断误差比欧拉法低了一阶,较大程度地提高了计算精度。
龙格-库塔法具有精度高,收敛,稳定(在一定条件下),计算过程中可以改变步长,不需要计算高阶导数等优点,但仍需计算在一些点上的值,如四阶龙格-库塔法每计算一步需要计算四次的值,这给实际计算带来一定的复杂性。
【数值分析课程设计总结】假期在家整整做了一个星期,终于完成了以上四道题的所有内容。
这次MAT LAB课程设计为我们提供了与众不同的学习方法和学习机会,让我们从传统的被动授学转变为主动求学;从死记硬背的模式中脱离出来,转变为在实践中学习,增强了领悟、创新和推断的能力。
掌握自学的方法,形成工程理论整体模式,使工作、学习、生活都步入系统化流程;思考方式成熟,逻辑性规范、明确。
这些方法的提高是终身受益的,我认为这难得的一周,让我真正懂得了生活和学习的基本规律。
在对插值多项式的程序进行编辑过程中,遇到了很多方法不知道用什么函数表达的问题,通过查找有关Matab软件和现代数值计算的书籍得出本程序,在对程序调用时,不知道如何调用,通过上网查找方法知道了需要在Matlab中的文件中新建一个M文件,然后保存,然后到命令区直接调用就可以了。
特别注意的是,在对M文件保存时,要直接保存到默认的matlab文件夹中,不可以随意更改保存路径。
完成了课程设计的任务,但是从中发现的问题也是值得去深思的。
我想经过这一个周的课程设计所发现的问题对我们会有很大的启示,在以后的学习中也会大有帮助。
在以后的学习中我会不断的改进学习方法,在实践中学习,不断提高自我,完美自我,全面提高自己。
我认为在编程方面,1、2、5题自己独立完成的较好,给自己一个优秀吧。