数值分析课程设计(最终版)
大学数值分析课程设计
大学数值分析课程设计一、课程目标知识目标: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周:数值软件应用及综合案例分析教学内容确保科学性和系统性,注重理论与实践相结合,提高学生的实际操作能力。
《数值分析》课程教案
《数值分析》课程教案数值分析课程教案一、课程介绍本课程旨在介绍数值分析的基本概念、方法和技巧,以及其在科学计算和工程应用中的实际应用。
通过本课程的研究,学生将了解和掌握数值分析的基本原理和技术,以及解决实际问题的实用方法。
二、教学目标- 了解数值分析的基本概念和发展历程- 掌握数值计算的基本方法和技巧- 理解数值算法的稳定性和收敛性- 能够利用数值分析方法解决实际问题三、教学内容1. 数值计算的基本概念和方法- 数值计算的历史和发展- 数值计算的误差与精度- 数值计算的舍入误差与截断误差- 数值计算的有效数字和有效位数2. 插值与逼近- 插值多项式和插值方法- 最小二乘逼近和曲线拟合3. 数值微积分- 数值积分的基本原理和方法- 数值求解常微分方程的方法4. 线性方程组的数值解法- 直接解法和迭代解法- 线性方程组的稳定性和收敛性5. 非线性方程的数值解法- 迭代法和牛顿法- 非线性方程的稳定性和收敛性6. 数值特征值问题- 特征值和特征向量的基本概念- 幂迭代法和QR方法7. 数值积分与数值微分- 数值积分的基本原理和方法- 数值微分的基本原理和方法四、教学方法1. 理论讲授:通过课堂授课,讲解数值分析的基本概念、原理和方法。
2. 上机实践:通过实际的数值计算和编程实践,巩固和应用所学的数值分析知识。
3. 课堂讨论:组织学生进行课堂讨论,加深对数值分析问题的理解和思考能力。
五、考核方式1. 平时表现:包括课堂参与和作业完成情况。
2. 期中考试:对学生对于数值分析概念、原理和方法的理解程度进行考查。
3. 期末项目:要求学生通过上机实验和编程实践,解决一个实际问题,并进行分析和报告。
六、参考教材1. 《数值分析》(第三版),贾岩. 高等教育出版社,2020年。
2. 《数值计算方法》,李刚. 清华大学出版社,2018年。
以上是《数值分析》课程教案的概要内容。
通过本课程的研究,学生将能够掌握数值分析的基本原理和技术,并应用于实际问题的解决中。
数值分析教学设计方案
一、教学目标1. 知识目标:(1)使学生掌握数值分析的基本概念、基本理论和基本方法;(2)使学生了解数值分析在各个领域的应用;(3)使学生具备数值计算能力,能够解决实际问题。
2. 能力目标:(1)培养学生分析问题、解决问题的能力;(2)提高学生编程能力和计算机应用能力;(3)培养学生的团队协作和创新能力。
3. 情感目标:(1)激发学生对数值分析的兴趣和热情;(2)培养学生严谨、求实的科学态度;(3)提高学生的社会责任感和使命感。
二、教学内容1. 数值分析的基本概念和理论;2. 常用数值方法,如插值法、数值微分、数值积分、数值解微分方程等;3. 数值方法的误差分析;4. 数值方法的稳定性分析;5. 数值计算软件介绍与应用。
三、教学策略1. 采用启发式教学,引导学生主动探究;2. 注重理论与实践相结合,提高学生的实际操作能力;3. 采用案例教学,激发学生的学习兴趣;4. 采用小组合作学习,培养学生的团队协作能力;5. 利用现代教育技术,提高教学效果。
四、教学过程1. 导入新课:介绍数值分析的基本概念和意义,激发学生的学习兴趣。
2. 理论讲解:系统讲解数值分析的基本概念、基本理论和基本方法,注重理论联系实际。
3. 实例分析:结合实际问题,分析数值方法的应用,使学生掌握数值计算的基本步骤。
4. 实践操作:布置课后作业,让学生运用所学知识解决实际问题,提高学生的实际操作能力。
5. 小组讨论:组织学生进行小组讨论,培养学生的团队协作能力。
6. 总结与反思:引导学生总结所学知识,反思自己的学习过程,提高学习效果。
五、教学评价1. 课堂表现:观察学生的课堂参与度、讨论积极性和问题解决能力。
2. 作业完成情况:检查学生的作业完成质量,了解学生对知识的掌握程度。
3. 期末考试:通过考试检验学生对数值分析知识的掌握程度,了解教学效果。
4. 学生反馈:收集学生对教学方法的意见和建议,不断改进教学方法。
六、教学资源1. 教材:《数值分析》;2. 教学课件;3. 实际案例;4. 数值计算软件(如MATLAB、Python等)。
数值分析课程设计报告(95分)
数值分析课程设计报告设计题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的增大误差的变化情况。
数值分析课程设计
数值分析课程设计一、题目描述在本次数值分析课程设计中,我们需要实现下列内容:给定一个函数f(x),任取一个初值x0,使用牛顿法求出f(x)=0的一个根。
二、算法实现在数值计算中,牛顿法(Newton’s method) 是一种迭代算法,可以快速地求解方程的数值解,对于一般的实数函数,牛顿法可以用来求方程f(x)=0的根。
设x n是f(x)的根的一个近似值,y=f(x n)是对应的函数值,则用f(x)的一阶泰勒展开式$$ f(x) \\approx f(x_n)+f'(x_n)(x-x_n) $$且令上式等于零,得到牛顿迭代公式:$$ x_{n+1}=x_n-\\frac{f(x_n)}{f'(x_n)} $$若x0是f(x)的一个根的初始近似值,则$$ x_{n+1}=x_n-\\frac{f(x_n)}{f'(x_n)}, \\ n=0,1,2,\\cdots $$是迭代序列,如果 $\\lim\\limits_{n\\rightarrow \\infty}x_n=\\alpha$,且 $f(\\alpha)=0$,则 $\\alpha$ 是方程的一个根。
三、实验步骤1.确定初始值x0,计算f(x0)和f′(x0)。
2.按照牛顿法迭代公式计算x n+1。
3.如果满足指定的条件,则停止迭代,并输出x n+1。
4.否则,返回第二步迭代计算x n+2,直至满足指定的条件。
四、实验代码def newton_method(f, df, x0, eps=1e-8, max_iter=1000):'''利用牛顿法求解非线性方程f(x)=0的根。
:param f: 函数:param df: 导函数:param x0: 初值:param eps: 容差:param max_iter: 最大迭代次数:return:近似解'''n =1while True:x1 = x0 - f(x0) / df(x0)if abs(x1 - x0) < eps or n > max_iter:return x1x0 = x1n +=1五、实验结果我们使用上述实现的牛顿法来解决如下问题:$$ f(x) = x^2-3, \\ x_0=2 $$则f′(x)=2x。
数值分析方法课程设计
数值分析方法课程设计背景介绍数值分析是一门研究求解各种数学问题的有效数值计算方法的学科,其应用广泛,如科学计算、工程设计和金融计算等领域。
在数值分析中,许多方法依赖于计算机的计算能力。
此外,数值分析还需要对数学理论和计算机科学两方面的知识有较深的理解。
本课程设计旨在通过实践,帮助学生深入了解数值分析方法及其应用,并提高学生的计算机编程能力。
课程设计目标•熟练掌握数值分析中的基本算法和方法,如插值法、数值积分等•能够将所学算法应用于实际问题,并编写可靠的程序解决问题•加深对计算机编程的理解和掌握,增强编程实践和创新能力•提高对数值分析和计算机科学交叉领域的理解课程内容第一部分:基本算法和方法1.数值微积分基本概念和原理2.插值法及其在实际中的应用3.数值积分的基本方法和理论基础4.常微分方程常用数值解法第二部分:实践应用与编程实现1.利用插值法和数值积分求解实际问题2.实现数值微积分和常微分方程的求解程序3.利用现有的数值分析软件解决实际问题,如 MATLAB 和 Python 等课程设计方案1.向学生介绍数值分析基本算法和方法,并讲解其理论基础和实际应用。
2.向学生提供一些实际问题,引导学生根据所学算法和方法进行求解。
3.给予学生一定的编程实践机会,让他们能够将所学算法实现为程序,并运用到具体的问题中。
4.通过课程作业、仿真实验等形式对学生进行考核和评价,确保学生能够有效掌握所学知识和能力。
评价标准1.学生掌握数值分析基本算法和方法的程度2.学生在实际问题中应用所学算法的能力3.学生编程实践和创新能力的水平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");}。
(完整word版)数值分析课程设计含代码
成绩评定表学生姓名班级学号专业信息与计算课程设计题目数值分析算法案科学例评语组长签字:成绩日期20年月日课程设计任务书学院理学院专业信息与计算科学学生姓名班级学号课程设计题目数值分析算法案例实践教学要求与任务 :要求:格式以学校毕业论文格式要求为准,不准粘贴图片,尤其公式。
对每个试验,要求有:实验基本原理,实验目的,实验内容及数据来源和实验结论。
以班级为单位统一装订封皮。
6 月 25 日,十八周的周二交论文每人至少四个实验,最少15 页任务(实验项目):线性方程组数值解法参考题目:( 1) 列主元 Gauss 消去法( 2) LU 分解法插值法和数据拟合参考题目:( 1) Lagrange 插值( 2) Newton 插值( 3)最小二乘拟合数值积分参考题目:(1)复化Simpon积分(2)变步长的梯形积分公式(3)龙贝格求积公式常微分方程数值解Runge-Kutta 方法数值方法实际应用用数值方法解决实际问题(自选)工作计划与进度安排:线性方程组数值解法(4 学时)插值法和数据拟合(4 学时)数值积分(4 学时)常微分方程数值解(4 学时)数值方法实际应用(4 学时)答辩(4 学时)指导教师:专业负责人:学院教学副院长:201年月日201年月日201年月日实验方法与理论方法是推动科学技术发展的两大基本方法,但有局限性。
许多研究对象,由于空间或时间的限制,既不可能用理论精确描述,也不能用实验手段实现。
数值模拟或称为科学计算突破了实验和理论科学的局限,在科技发展中起到越来越重要的作用。
可以认为,科学计算已于实验、理论一起成为科学方法上不可或缺的三个主要手段。
计算数学的研究是科学计算的主要组成部分,而数值分析则是计算数学的核心。
数值计算是研究使用计算机来解决各种数学问题的近似计算方法与理论,其任务是提供在计算机上可解的、理论可靠的、计算复杂性低的各种常用算法。
数值分析的主要内容:1)、数值代数:求解线性和非线性方程组的解,分直接方法和间接方法两大类;2)、插值、曲线拟合和数值逼近;3)、数值微分和数值积分;4)、常微分和偏微分方程数值解法。
(完整word版)数值分析课程设计
实验1.1水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。
由于旅途的颠簸,大家都很疲惫,很快就入睡了。
第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。
第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只给猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?算法分析:求解这一问题可以用迭代递推算法。
首先分析椰子数目的变化规律,设最初的椰子数为p 0,即第一个水手所处理之前的椰子数,用p 1、p 2、p 3、p 4、p 5 分别表示五个水手对椰子动了手脚以后剩余的椰子数目,则根据问题有4(1)15p p k k =-+, (k=0,1,2,3,4) 再用x 表示最后每个水手平分得到的椰子数,于是有51x (1)5p =-所以515x p =+利用逆向递推的方法,有k 151, (4,3,2,1,0)4k k p p +=+= 有了逆向递推关系式,求解这一问题似乎很简单,但由于椰子数为一正整数,用任意的x 作为初值递推出的p 0数据不一定是合适的。
这里用 for 循环语句结合 break 语句来寻找合适的 x 和 p 0 ,对任意的 x 递推计算出p 0 ,当计算结果为正整数时,结果正确,否则选取另外的 x 再次重新递推计算,直到计算出的结果 p 0 为正整数为止。
MATLAB 编程代码:(1) n=input('输出n 的值:');for x=1:np=5*x+1;for k=1:5p=5*p/4+1;endif p==fix(p)breakendenddisp([x,p])输出结果:输出n的值:1500102315621(2)for x=1:infp=5*x+1;for k=1:5p=5*p/4+1;endif p==fix(p)breakendenddisp([x,p])输出结果:102315621C语言编程代码:#include <stdio.h>int count(int);void main(){int i, n, y;printf( "输入水手数:\n ");scanf( "%d ",&n);y=count(n);for(i=0;i <n;i++){printf( "%d\n ",y);y=(y-1)/5*4;}}int count(int a){int m,i,k=1,ok=0;for(i=1;;){if(i==1)m=k;if((k*5+1)%4==0){k=(k*5+1)/4;i++;}else{k=++m;i=1;}if(i==a&&ok <4){ok++;k=++m;i=1;}if(i==a&&ok==4)break;}return(k*5+1);}实验1.3 绘制Koch分形曲线问题描述:从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的另两条边代替,形成具有5个结点的新的图形(图1);在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的另两条边代替,再次形成新的图形(图2),这时,图形中共有17个结点。
(完整word版)数值分析课程设计实验二
实验二2.1一、题目:用高斯消元法的消元过程作矩阵分解。
设20231812315A ⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦消元过程可将矩阵A 化为上三角矩阵U ,试求出消元过程所用的乘数21m 、31m 、31m 并以如下格式构造下三角矩阵L 和上三角矩阵U(1)(1)212223(2)313233120231,1L m U a a m m a ⎡⎤⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦验证:矩阵A 可以分解为L 和U 的乘积,即A =LU 。
二、算法分析:设矩阵111213212223313233a a a A a a a a a a ⎛⎫ ⎪= ⎪ ⎪⎝⎭,通过消元法可以将其化成上三角矩阵U ,具体算法如下: 第1步消元:111111(1)22112(1)331130,0;;2,3;i i i i i i i i a m a a a a m a i a a m a +=≠⎧⎪=+=⎨⎪=+⎩ 得到111213(1)(1)12223(1)(1)323300a a a A a a a a ⎛⎫ ⎪= ⎪ ⎪⎝⎭第2步消元:(1)(1)(1)32322222(2)(1)(1)333332230,0;;a m a a a a m a ⎧+=≠⎪⎨=+⎪⎩ 得到的矩阵为111213(1)(1)22223(2)33000a a a A a a a ⎛⎫ ⎪= ⎪ ⎪⎝⎭三、程序及运行结果b1.mA=[20 2 3;1 8 1;2 -3 15];for i=1:2M(i)=A(i+1,1)/A(1,1);endfor j=2:3A1(j,2)=A(j,2)-M(j-1)*A(1,2);A1(j,3)=A(j,3)-M(j-1)*A(1,3);endM(3)=A1(3,2)/A1(2,2);A1(3,2)=0;A1(3,3)=A1(3,3)-M(3)*A1(2,3);M,A1运行结果为:M =0.0500 0.1000 -0.4051A1 =0 0 00 7.9000 0.85000 0 15.0443所以:10020230.051007.90.850.10.405110015.0443L U ⎛⎫⎛⎫ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭验证:L=[1 0 0;0.05 1 0;0.1 -0.4051 1];U=[20 2 3;0 7.9 0.85;0 0 15.0443];A1=L*UA1 =20.0000 2.0000 3.00001.0000 8.0000 1.00002.0000 -3.0003 15.0000四、精度分析因为根据LU 的递推公式可知,L ,U 分别为下三角和上三角矩阵,其中L 不在对角线上的元素值为111()k ik ik is sk s kk l a l u u -==-∑,在计算每个系数时会产生相应的计算误差。
合工大数值分析课程设计
合工大数值分析课程设计一、课程目标知识目标:1. 掌握数值分析的基本概念、原理及方法,如插值、数值微积分、常微分方程数值解等;2. 理解数值算法的稳定性、收敛性等性能指标,并能够分析给定数值问题的适用算法;3. 了解数值分析在工程、物理及计算机科学等领域的应用,并能运用所学知识解决实际问题。
技能目标:1. 能够运用数值分析方法解决实际工程问题,具备数值计算编程能力;2. 能够运用所学软件(如MATLAB等)进行数值实验,分析实验结果,优化算法;3. 能够对给定数值问题进行误差分析,提出改进措施,提高计算精度。
情感态度价值观目标:1. 培养学生严谨的科学态度,认识到数值分析在工程技术领域的重要性;2. 激发学生对数值分析的兴趣,培养其主动探索、创新的精神;3. 增强学生的团队协作意识,提高沟通与交流能力。
本课程针对合肥工业大学数值分析课程设计,结合大三年级学生特点,注重理论与实践相结合,培养学生的数值计算能力和实际应用能力。
课程目标旨在使学生在掌握基本理论知识的基础上,能够解决实际问题,提高学生的综合素质,为未来的学术研究或工程实践打下坚实基础。
通过对课程目标的分解,教师可以更好地进行教学设计和评估,确保学生达到预期学习成果。
二、教学内容本章节教学内容主要包括以下几部分:1. 数值分析基本概念:介绍数值分析的定义、研究内容及其在工程中的应用。
- 教材章节:第1章 数值分析引论2. 插值法:讲解拉格朗日插值、牛顿插值、样条插值等方法。
- 教材章节:第2章 插值法3. 数值微积分:介绍数值积分和数值微分的基本原理及方法。
- 教材章节:第3章 数值微积分4. 常微分方程数值解:讲解初值问题和边值问题的数值解法。
- 教材章节:第4章 常微分方程数值解5. 线性方程组的迭代法:介绍雅可比迭代、高斯-赛德尔迭代等方法。
- 教材章节:第5章 线性方程组迭代法6. 数值算法性能分析:分析算法的稳定性、收敛性等性能指标。
数值分析课程设计95分
数值分析课程设计95分一、教学目标本节课的教学目标是让学生掌握数值分析的基本概念和方法,培养学生运用数值分析解决实际问题的能力。
具体目标如下:1.知识目标:(1)了解数值分析的基本概念和研究对象;(2)掌握数值逼近、数值积分和数值解方程等基本方法;(3)了解数值分析在工程和科学计算中的应用。
2.技能目标:(1)能够运用数值分析方法解决实际问题;(2)能够正确选择合适的数值方法并分析其优缺点;(3)能够编写简单的数值计算程序。
3.情感态度价值观目标:(1)培养学生对数值分析的兴趣和好奇心;(2)培养学生勇于探索、严谨治学的科学态度;(3)培养学生团队协作、交流分享的合作精神。
二、教学内容本节课的教学内容主要包括数值分析的基本概念、数值逼近、数值积分和数值解方程等。
具体安排如下:1.数值分析的基本概念:介绍数值分析的研究对象、特点和方法。
2.数值逼近:包括插值法、函数逼近法和数值微积分。
3.数值积分:介绍数值积分的基本方法和误差分析。
4.数值解方程:包括线性方程组的求解、非线性方程的求解和最优化问题。
三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法相结合的方式。
具体方法如下:1.讲授法:用于讲解数值分析的基本概念、原理和方法。
2.案例分析法:通过分析实际案例,让学生了解数值分析在工程和科学计算中的应用。
3.实验法:让学生动手编写数值计算程序,培养实际操作能力。
4.讨论法:学生分组讨论,促进学生间的交流与合作。
四、教学资源为了支持教学内容和教学方法的实施,本节课将采用以下教学资源:1.教材:《数值分析教程》;2.参考书:《数值分析与应用》;3.多媒体资料:数值分析相关视频、动画等;4.实验设备:计算机、编程环境等。
通过以上教学资源的使用,丰富学生的学习体验,提高学生的学习效果。
五、教学评估本节课的评估方式包括平时表现、作业和考试等,以全面反映学生的学习成果。
具体评估方式如下:1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估学生的学习态度和理解程度。
《数值分析》教案
讲授新 进展内容
介绍等距节点插值公式在工程设计上的应用,例如在微电机设计在设计上的 应用。
课后总结
5
河北工程大学教师授课教案(5)
学院(部): 数理学院 教师姓名:
课程名称
数值分析
授课专业和班级
授课时间:
学术型研究生
授课内容
2.5 埃尔米特插值
授课学时 2 学时
教材
《数值分析》,周少玲,张振辉编,西安交通大学出版社。
6
河北工程大学教师授课教案(6)
学院(部): 数理学院 教师姓名:
课程名称
数值分析
授课专业和班级
授课时间:
学术型研究生
授课内容
2.6 曲线拟合的最小二乘法
授课学时 2 学时
教材
《数值分析》,周少玲,张振辉编,西安交通大学出版社。
教学目的和要求
1. 掌握最小二乘法的基本原理;2. 掌握多项式拟合方法; 3. 了解可化为多项 式拟合的最小二乘方法。
课后总结
8
河北工程大学教师授课教案(8)
学院(部): 数理学院 教师姓名:
课程名称
数值分析
授课专业和班级
授课时间:
学术型研究生
授课内容
3.2 牛顿--柯特斯公式
授课学时 2 学时
教材
《数值分析》,周少玲,张振辉编,西安交通大学出版社。
教学目的和要求 1. 掌握牛顿--柯特斯公式; 2. 了解低阶牛顿--柯特斯公式的截断误差。
1、复习旧课(15 分钟)
回顾差商的定义。
2、讲授部分(25 分钟)
引入重节点的差商,并于 Taylor 展开式联系,介绍两者的关系(难点)。
3、复习部分(5 分钟)
数值分析课程设计
数值分析课程设计摘要数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。
在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。
学习数值分析这门课程可以让我们学到很多的数学建模方法。
运用数值分析解决问题的过程:实际问题→数学模型→数值计算方法→程序设计→上机计算求出结果数值分析这门学科有如下特点:1.面向计算机2.有可靠的理论分析3.要有数值实验本文主要通过 Matlab 软件,对数值分析中的 LU 分解法、Lagrange插值法、复化Simpon积分方法和Runge-Kutta方法进行编程,并利用这些方法在MATLAB 中对一些问题进行求解,并得出结论。
关键词:数值分析;计算机;编程;MATLAB;目录一 LU分解法 (1)1.1实验目的 (1)1.2实验基本原理 (1)1.3算法程序 (3)1.4实例及结果 (4)二 Lagrange插值法 (6)2.1实验目的 (6)2.2实验基本原理 (6)2.3算法程序 (8)2.4实例及结果 (8)三复化Simpon积分 (10)3.1实验目的 (10)3.2实验基本原理 (10)3.3算法程序 (11)3.4实例及结果 (11)四 Runge-Kutta方法 (13)4.1实验目的 (13)4.2实验基本原理 (13)4.3算法程序 (14)4.4实例及结果 (14)总结 (16)参考文献 (17)一 LU分解法1.1实验目的1.了解LU分解法解线性方程组的基本原理。
2.熟悉计算方法的技巧和过程,能用LU分解法解决问题。
3.用matlab实现LU分解。
1.2实验基本原理1.设A为n阶矩阵,如果A的顺序主子式(i=,n-1),则A可分解为一个单位下三角矩阵L和一个上三角矩阵U的乘积,且这种分解是唯一的。
2.在满足1的条件下可推导得出以下公式(1)(2)(3)(4)3.LU分解的具体过程如下:(1)第一步分解:(2)第二步分解:(3)第三步分解:(4)第n步分解:依次计算:、、,1.3算法程序function [L,U,x]=Lu_x(A,d)[n,m]=size(A);if n~=merror('The rows and columns of matrix A must be equal!'); retirn;endfor ii=1:nfor i=1:iifor j=1:iiAA(i,j)=A(i,j);endendif(det(AA)==0)error('The matrix can not be divided by LU!')return;endendA[n,n]=size(A);L=zeros(n,n);U=zeros(n,n);for i=1:nL(i,i)=1;endfor k=1:nfor j=k:nU(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)');endfor i=k+1:nL(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k); endy(1)=d(1);for i=2:nfor j=1:i-1d(i)=d(i)-L(i,j)*y(j);endy(i)=d(i);endx(n)=y(n)/U(n,n);for i=(n-1):-1:1for j=n:-1:i+1y(i)=y(i)-U(i,j)*x(j);endx(i)=y(i)/U(i,i);end1.4实例及结果1.MATLAB命令窗口输入如下:>> A=[3 5 6 2;7 3 7 5;2 7 3 6;3 2 5 8] >> b=[20 15 16 19]';>> [L,U,x]=Lu_x(A,b)得到结果如下:A =3 5 6 27 3 7 52 73 63 2 5 81.0000 0 0 02.3333 1.0000 0 00.6667 -0.4231 1.0000 01.0000 0.3462 -0.3592 1.0000U =3.0000 5.0000 6.0000 2.0000 0 -8.6667 -7.0000 0.3333 0 0 -3.96154.8077 0 0 0 7.6117x =-2.4171 0.7105 3.6824 0.8023 2.MATLAB命令窗口输入如下:>> A=[3 2 1;6 5 4;5 8 7]>> b=[16 17 18]';>> [L,U,x]=Lu_x(A,b)得到结果如下:A =3 2 16 5 45 8 7A =3 2 16 5 45 8 7L =1.0000 0 02.0000 1.0000 01.6667 4.6667 1.0000U =3.0000 2.0000 1.00000 1.0000 2.00000 0 -4.0000x =-0.0000 15.6667 -15.3333二 Lagrange插值法2.1实验目的1.了解拉格朗日插值的基本概念。
数值分析课程设计课程设计
数值分析课程设计一、课程设计目的和意义数值分析课程设计是通过选择数值分析中的一些基础算法,设计并编写计算机程序来解决实际的算法问题。
课程设计有助于学生更好地理解和掌握数值分析的基础理论知识,同时对于提高学生的编程能力以及培养学生解决实际问题的能力都具有很大的意义。
二、课程设计内容1.矩阵求解矩阵运算是数值分析中的一项基础知识,但学生在初学阶段往往会遇到矩阵运算方面的问题。
因此,在本课程的矩阵求解部分,学生将会学会如何利用数值分析算法对矩阵进行求解。
2.牛顿迭代法牛顿迭代法是数值分析中常用的一种迭代算法,它可以用来求解函数的根。
在课程设计的牛顿迭代法部分,学生将会深入学习该算法的理论知识,并通过编程实践来深化对其的理解。
3.插值和拟合对于实际问题中的数据,我们需要通过插值和拟合等方法来求取相关的函数。
因此,在课程设计的插值和拟合部分,学生将会学习到常用的插值和拟合算法,并通过实现相应的程序来加深对该算法的理解。
4.数值微积分数值微积分是数值分析中的一项基础知识,它是计算机科学中的一个重要组成部分。
在课程设计的数值微积分部分,学生将会在学习理论知识的基础上,通过编写相应的程序来巩固和加深对该算法的理解。
三、课程设计流程1.熟悉课程设计要求在开始课程设计之前,学生应该熟悉课程设计的要求和流程,明确自己需要完成的任务,并制定相应的计划。
2.确定课程设计题目根据课程设计的要求和个人兴趣,学生可以选择一些自己感兴趣的题目,并请教老师和同学进行相关意见的讨论和确认。
3.学习相关理论知识学生在开始进行课程设计之前,需要对所选择的算法进行深入的学习,并完成必要的理论知识的掌握。
4.开始进行编程在掌握相关的理论知识之后,学生开始进行计算机程序的编写,并不断尝试改进和优化。
5.进行结果验证在完成计算机程序的编写之后,学生需要对其进行一定程度的结果验证,并分析测试结果。
6.撰写课程设计报告在完成验证工作之后,学生需要根据要求撰写课程设计报告,并逐步改进报告的质量和便于理解程度。
(完整版)数值分析教案.doc
(完整版)数值分析教案.doc§1 插值型数值求积公式教学目的 1. 会求插值型数值求积公式及Gauss型数值求积公式并会讨论它们的代数精度;2. 理解复化梯形数值求积公式及复化Simpson数值求积公式和余项的推导的基础上掌握它们;3. 理解数值微分公式推导的基础上掌握一阶、二阶数值微分公式及余项;4.了解外推原理。
教学重点及难点重点是插值型数值求积公式及Gauss 型数值求积公式的求解及它们代数精度的讨论;难点是Gauss 型数值求积公式节点的求解方法的推导及求解方法。
教学时数12 学时教学过程1. 1 一般求积公式及其代数精度设(x) 是 ( a, b) 上的权函数, f ( x) 是 [ a, b] 上具有一定光滑度的函数。
用数值方逑下积分b(x) f ( x) dxa的最一般方法是用 f (x) 在节点 a x0 x1 x n b 上函数值的某种线性组合来近似b n(x) f ( x) dx A i f ( x i )ai 0其中 A i ,i 0, , n 是独立于函数 f ( x) 的常数,称为积分系数,而节点x i , i 0,1, , n 称为求积节点。
我们也可将( 1. 2)写成带余项的形式b n(x) f ( x) dx A i f ( x i ) R[ f ]ai0(1.2)和(1.3)都称之为数值求积公式或机械求积公式。
更一般些的求积公式还可以包含函数 f ( x) 在某些点的低阶导数值。
在( 1.3)中余项R[ x] 也称为求积公式的截断误差。
一个很自然的想法是数值求积公式要对低次多项式精确成立这就导出了求积公式数精度的概念。
定义1 若求积公式(1.2)对任意不高于m次的代数多项式都精确成立,而对 x m 1 不能精确成立,则称该求积公式具有m 次代数精度。
一个求积公式的代数精度越高,就会对越多的代数多项式精确成立。
例 1 确定求积公式1 1 4 f (0) f (1)]f (x)dx [ f ( 1)1 3的代数精度。
《数值分析》课程设计
问题的提出3.3 用SOR 方法解下列方程组(去松弛因子w=1.2),要求14||||10k k X X +-∞-<。
12142145x x x x +=⎧⎨-=⎩ 3.4 设 411011A ⎛⎫= ⎪⎝⎭,计算()cond A ∞。
3.5 用选列主元Gauss 消元法求解方程组12312312334721320x x x x x x x x x -+=⎧⎪-+-=-⎨⎪-+=⎩3.6 用追赶法解三对角方程组12345210001121000012100001210000120x x x x x -⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪⎪ ⎪ ⎪=-- ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭ 3.7 用三角分解法解方程组123248541816862207x x x -⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪--= ⎪⎪ ⎪ ⎪⎪ ⎪--⎝⎭⎝⎭⎝⎭3.8 用选主元消元法计算下列行列式126324951。
一、问题分析1. 超松弛法是迭代方法的一种加速方法,其计算公式简单,但需要选择合适的松弛因子,以保证迭代过程有较快的收敛速度。
2. A 的条件数计算首先要获得A 的逆,而求A 的逆可以转化为求n 个方程组。
3. 完全主元消元法在计算过程中花费了大量的时间用于寻找主元。
同时,各变量的位置在消元过程中也可能会发生变化。
而列选主元法则可消除这个弊病。
4. 追赶法主要是解三对角方程组。
所谓追指消元过程,赶指回代过程。
5. Gauss 消元法是通过逐步消元过程,将方程组的系数矩阵A 转变为一个上三角矩阵。
三角分解法,就是把系数矩阵分解为两个三角阵。
6.将某一向量坐标同乘以某非零实数,加到另一向量上,行列式的值不变。
用选主元法将行列式矩阵变为三角阵,对角线上的数值相乘即为行列式的值。
二、编程解决3.3Sor法c语言编程:#include<stdio.h>#include<math.h>#include<stdlib.h>#define omega 1.2 //取值不合适结果可能发散void main(){double a[5][5];double b[5],x[5],f,t,y[5]={0,0,0,0,0};int i,j,n,cnt=0;printf("阶数:");scanf("%d",&n);printf("请输入%d阶的A矩阵\n",n);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%lf",&a[i][j]);printf("请输入B矩阵\n");for(i=0;i<n;i++)scanf("%lf",&b[i]);printf("count\t");for(i=0;i<n;i++)printf("x[%d]\t\t",i);printf("收敛程度\n");do{for(i=0;i<n;i++)x[i]=y[i];for(i=0;i<n;i++){t=0;for(j=0;j<n;j++)t=t+a[i][j]*(j<i?y[j]:x[j]);y[i]=x[i]+omega*(b[i]-t)/a[i][i];printf("%d",cnt++);for(i=0;i<n;i++)printf("\t%lf",x[i]);f=0;for(i=0;i<n;i++)f+=fabs(y[i]-x[i]);printf("\t%g\n",f);}while(f>1e-4 && cnt<100);}所得结果:3.4 求逆、算条件数编程:#include <stdio.h>#include <math.h>#include <stdlib.h>#define N 5 //可修改,以改变可解决的最大维数。
12级数值分析课程设计
12级数值分析课程设计一、课程目标知识目标:1. 理解数值分析的基本概念,掌握数值计算的基本方法,如插值、数值微积分、常微分方程数值解等;2. 掌握误差分析的基本理论,了解数值稳定性和收敛性的概念;3. 掌握线性代数、微积分等数学基础知识在数值分析中的应用。
技能目标:1. 能够运用数值分析方法解决实际问题,如求解非线性方程、线性方程组、优化问题等;2. 能够运用编程语言(如MATLAB、Python等)实现数值算法,并进行调试和优化;3. 能够运用误差分析理论评估数值算法的准确性和稳定性。
情感态度价值观目标:1. 培养学生对数值分析的兴趣和热情,激发学生主动探索数值方法解决实际问题的欲望;2. 培养学生的团队协作意识,学会与他人合作共同解决问题;3. 培养学生的创新精神和批判性思维,敢于对现有数值方法提出质疑,勇于尝试改进和创新。
课程性质:本课程为专业基础课,旨在培养学生运用数值方法解决实际问题的能力。
学生特点:12级学生已具备一定的数学基础和编程能力,具有较强的逻辑思维和分析能力。
教学要求:结合课程性质和学生特点,注重理论与实践相结合,强化上机实践和案例分析,提高学生的实际操作能力和问题解决能力。
通过本课程的学习,使学生能够熟练运用数值分析方法,为后续专业课程学习和未来从事相关工作打下坚实基础。
二、教学内容1. 数值分析基本概念:包括数值计算的误差、稳定性、收敛性等;教材章节:第一章 数值分析引论内容:误差分析、稳定性与收敛性、数值方法的分类与特点。
2. 数值微积分:包括数值积分和数值微分;教材章节:第二章 数值微积分内容:梯形公式、辛普森公式、高斯公式、数值微分方法。
3. 插值与逼近:包括拉格朗日插值、牛顿插值、样条插值等;教材章节:第三章 插值与逼近内容:线性插值、多项式插值、样条插值、最佳逼近问题。
4. 解非线性方程:包括二分法、牛顿法、弦截法等;教材章节:第四章 解非线性方程内容:迭代法、牛顿法、弦截法、非线性方程组的求解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文主要通过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)。
即[a 11⋯a 1n ⋮⋱⋮a n1⋯a nn ]=[1⋯0⋮⋱⋮l n1⋯1][u 11⋯u 1n⋮⋱⋮0⋯u nn] (1.2) 称上述分解为矩阵A 的LU 分解,也称为直接三角分解。
在式(1.2)中,利用矩阵L 的第一行与矩阵U 的各列相乘,可以得到矩阵U 的第1行u 1j =a 1j (j =1,2,…,n) (1.3)。
利用矩阵L 的各行与矩 阵U 的第1列相乘,得到矩阵L 的第1列l i1=ai1u i1(i =2,3,…,n) (1.4)。
假设已确定出矩阵U 的第1行到第k-1行与矩阵L 的第1列到第k-1列,现在来求矩阵U 的第k 行和L 的第k 列。
利用式(1.2)中矩阵L 的第k 行与矩阵U 的第j(j ≥k) 列相乘, 得到矩阵U 的第k 行u kj =a kj −∑l kq u qj k;1q<1 (j =k,k +1,…,n) (1.5) 。
利用矩阵 L 的第i(i >k)行与矩阵U 的第k 列相乘,得到矩阵L 的第k 列l ik =(a ik −∑l iq u qk )/u kk k;1q<1 (i =k +1,k +2,…,n ) (1.6)。
显然,式(1.5)和式(1.6)对于k=2,3,…,n 都成立。
若矩阵A 有分解:A=LU ,其中L 为单位下三角阵,U 为上三角阵,则称该分解为LU 分解,可以证明,当A 的各阶顺序主子式均不为零时,LU 分解可以实现并且唯一。
1.3实验内容(1)算法设计由式(1.1),将方程组Ax=b改写为L(Ux)=b则方程组求解可分成两部分完成。
令y=Ux,则方程组可改写成方程组Ly=b和Ux=y由上式得到y k=b k−∑l kj y jk;1j<1(k=1,2,…,n)x k=(y k−∑u kj x jnj<k:1)u kk(k=n,n−1, (1)(2)利用MATLAB编写代码矩阵的LU分解:function[L,U,index]=LU_Decom(A)[n,m]=size(A);if n~=merror('The rows and columns of matrix A must be equal!');return;endL=eye(n);U=zeros(n);index=1;for k=1:nfor j=k:nz=0;for q=1:k-1z=z+L(k,q)*U(q,j);endU(k,j)=A(k,j)-z;endif abs(U(k,k))<epsindex=0;return;endfor i=k+1:nz=0;for q=1:k-1z=z+L(i,q)*U(q,k);endL(i,k)=(A(i,k)-z)/U(k,k);endend用矩阵的LU分解求解方程组function [x,y]=bxzylu(A,b)n=length(A);[L,U,index]=LU_Decom(A);y=L\b;x=U\y;1.4数据来源数据来源于《数值分析》教材第5章第153页例5。
用直接三角分解法求解:[489371265][x1x2x3]=[101824]1.5实验结论(1)将矩阵A进行LU分解在matlab命令窗口输入:>>A=[4 8 9;3 7 1;9 1 5];>> [L,U,index]=LU_Decom(A)输出结果为:L =1.0000 0 00.7500 1.0000 02.2500 -17.0000 1.0000U =4.0000 8.0000 9.00000 1.0000 -5.75000 0 -113.0000index =1由index=1可知计算成功,得到了相应的分解矩阵。
(2)用矩阵的LU分解求解方程组在matlab中输入:>>A=[4 8 9;3 7 1;9 1 5];b=[101824];>> [x,y]=bxzylu(A,b)输出结果为:x =3.40271.3407-1.5929y =10.000010.5000180.0000二.Lagrange插值2.1实验目的[1] 熟悉Lagrange插值的基本原理;[2] 能编程实现Lagrange 插值,并求解函数多项式的值;[3] 运用Matlab 编程,根据实例中给定的函数值表求出插值多项式和函数在某一点的近似值。
2.2基本原理构造n 次多项式L n (x )=y 0l 0(x )+y 1l 1(x )+⋯+y n l n (x),其中基函数l k (x)=(x −x 0)…(x −x k;1)(x −x k:1)…(x −x n )(x k −x 0)…(x k −x k;1)(x k −x k:1)…(x k −x n )显然l k (x )满足l k (x i )={1(i =k)0(i ≠k),此时L n (x )≈f(x)。
误差R n (x )=f (x )−L n (x )=f n:1(ξ)()w n:1(x)其中ξ∈(a,b)且依赖于x ,w n:1(x )=(x −x 0)(x −x 1)…(x −x n ),显然,当n=1时,即插值结点只有两个x 0,x 1时,L 1(x )=y 0x −x 101+y 1x −x 0102.3实验内容function yi=Lagrange(x,y,xi) % Lagrange 插值多项式,其中, % x 为向量,全部的插值节点; % y 为向量,插值节点处的函数值; % xi 为标量,被估计函数的自变量: % yi 为xi 处的函数估计值. n=length(x);m=length(y); %输入的插值点与它的函数值应有相同的个数 if n~=merror('The lengths of X and Y must be equal!'); return; endp=zeros(1,n); %生成n 个零元素的行矩阵for k=1:nt=ones(1,n); %生成n个1的行矩阵for j=1:nif j~=k % 输入的插值节点必须互异if abs(x(k)-x(j))< eps % eps为浮点相对精度error('the DATA is error!');return;endt(j)=(xi-x(j))/(x(k)-x(j));endendp(k)=prod(t); %向量t元素总乘积endyi=sum(y.*p); %y和p两数组在同一位置上的元素相乘2.4数据来源已知数据如下:求解f,1,2,5,7,9-的近似值。
2.5实验结论在matlab命令窗口中输入程序:x=[1 2 5 7 9];y=[3 9 13 15 20];xi=5;yi=Lagrange(x, y, xi)输出结果为:yi =13故近似值f ,1,2,5,7,9-=13。
三.复化simpon 积分3.1实验目的[1]学会并熟练掌握复化Simpson 求积公式的的编程与应用;[2]进一步掌握Matlab 数学软件,尤其是提供计算积分的各种函数的使用方法;3.2基本原理将区间[a,b]N 等分,子区间的长度为ℎN =b;a N,在每个子区间上采用Simpson公式,在用Simpson 公式时,还需要将子区间再二等分,因此有2N+1个分点,即X k =X 0+kℎN 2(k =0,1,…,2N;X 0=A)。
经推导得到∫f(x)dx ≈ℎNba[f (a )+f (b )+2∑f (X 2k )+4∑f(X 2k;1)Nk<1N;1k<1]≝S N称S N 为复化simpon 值,称如上式子为复化simpon 公式。