数值计算方法实验5
- 格式:doc
- 大小:125.00 KB
- 文档页数:3
《数值计算方法》数值积分实验报告y=zeros(1,N+1);%y为预分配inte=zeros(1,N);%与分配每个区间的积分值for i=0:Ny(i+1)=double(subs(fun,(a+i*h)));%每一个y值endfor j=0:N-1inte(j+1)=(y(j+1)+y(j+2))*h/2;%计算积分endInteg=sum(inte);输出结果:(2)编写辛普森法数值积分的积分函数和牛顿-科特斯数值积分的积分函数,计算积分并比较不同方法的结果。
辛普森法数值积分:function res=simpson(fun,n,a,b)format long;if b<ac=b;b=a;a=c;endh=(b-a)/n;d=fun(a);for i=a+h:h:b-hd=d+(2*fun(i));endfor i=a+h/2:h:b-h/2d=d+(4*fun(i))endd=d+fun(b);res=(d*h/6);end输出结果:牛顿-科特斯数值积分:function y=f(x)y=sin(x);function Cn = Cn(a,b,n)format longh = (b-a)/n;sum1 = 0;sum2 = 0;for i = 0:n-1sum1 = sum1 +32*f(a+(i+1/4).*h)+12*f(a+(i+1/2).*h)+32*f(a+(i+3/4).*h); endfor j = 1:n-1sum2 = sum2 + 14*f(a+j.*h);endCn = h/90*(7*f(a)+sum1+sum2+7*f(b));输出结果:从上述结果可以看出这两个数值积分的结果差不多。
结论分析与心得体会(出现的问题及解决方案):通过本次实验我学会了复合梯形公式法、辛普森数值积分方法和牛顿-科特斯数值积分方法并实现积分的计算。
而且辛普森数值积分方法和牛顿-科特斯数值积分方法运行出来的结果差不多,但是如果精确值越高,这俩个的结果就会显示出较大的差异。
本科实验报告课程名称:计算机数值方法实验项目:方程求根、线性方程组的直接解法、线性方程组的迭代解法、代数插值实验地点:专业班级:学生姓名:指导教师:实验一方程求根}五、实验结果与分析二分法实验结果迭代法实验结果结果分析:本题目求根区间为[1,2],精度满足|x*-x n|<0.5×10-5,故二分法用公式|x*-x n|<(b-a)/ 2n,可求得二分次数并输出每次结果。
对迭代法首先要求建立迭代格式。
迭代格式经计算已输入程序之中,故直接给初值便可利用迭代法求出精度下的解。
六、讨论、心得每次的实验都是对已学过的理论知识的一种实战。
通过本次实验,我将二分法与迭代法的思路清晰化并且将其变成计算机设计语言编写出来,运用到了实际解决问题上感觉很好。
我自认为本次跟其他同学比较的优点在于我在二分法实现的时候首先利用换底公式将需要的二分次输输出,如此便很清晰明了的知道接下来每一步的意思。
迭代法给我的感觉便是高度的便捷简化,仅用几行代码便可以同样解决问题。
相比较二分法来说,我更喜欢迭代的思路。
实验二线性方程组的直接解法for(k=n-2;k>=0;k--){sum=0;for(j=k+1;j<n;j++)sum=sum+a[k][j]*x[j];x[k]=(b[k]-sum)/a[k][k];}for(i=0;i<n;i++)printf("x[%d]=%f ",i,x[i]); printf("\n"); //输出解向量x}五、实验结果与分析结果结果分析:如上图所示,输入线性方程组元数n=3,则会要求输入3*3的系数矩阵A与向量b构成的增广矩阵。
根据算法需要将系数矩阵A消元成上三角矩阵。
随后根据矩阵乘法公式变形做对应的回代。
六、讨论、心得本次实验在编写时候感觉还好,感觉将思路变成了程序设计语言,得以实现题目的要求。
但是在运行以及结果分析的时候,感觉到了本实验的一些不足之处:就是我的实验虽然可以实现不同的元数的线性方程组求解,但是缺少了分析初始条件——主元素不能为零。
数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。
本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。
二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。
本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。
2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。
本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。
3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。
本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。
4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。
本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。
三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。
在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。
在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。
在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。
在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。
四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。
在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。
数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。
二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。
1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。
2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。
3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。
三、实验步骤
1. 熟悉Python语言的基本语法。
首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。
2. 学习numpy库的使用方法。
其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。
3. 学习matplotlib库的使用方法。
实验报告一、实验目的二、实验内容三、实验环境四.实验方法五、实验过程1实验步骤2 关键代码及其解释3 调试过程六、实验总结1.遇到的问题及解决过程2.产生的错误及原因分析3.体会和收获。
七、程序源代码:八、教师评语实验报告一.试验目的:练习用数值方法求解给定的非线性方程。
二.实验内容:求解人口方程: )1(5.43e 1004.156-+=λλλe要求误差小于410-。
三.实验环境:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。
四.实验方法:牛顿法牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:,2,1,0,)()(1='-=+k x f x f x x k k k k ,当数列{}k x 收敛时,其极限值x 即为方程的解。
定理:给定方程],[,0)(b a x x f ∈=1)设0)()(<b f a f ;2))(x f ''在],[b a 上不变号,且],[,0)(b a x x f ∈≠'; 3)选取],[0b a x ∈,满足0)()(00>''x f x f ;则牛顿法产生的序列{}k x 收敛于0)(=x f 在],[b a 内的唯一解x 。
五.实验过程:1.编程: 用C 语言编出牛顿法的源程序。
2. 开机, 打开C 语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正确运行.六.实验总结:(1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得不当而使迭代不收敛或收敛慢,但若能保证)()(1+>K K x f x f (称为下山条件),则有可能收敛。
把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。
(2)牛顿法要求)(x f '在x 附近不为零。
亦即x 只能是单根, 不能求重根。
可用重根加速收敛法求重根。
(3)牛顿法的每一步迭代中,都要计算一次导数值,若计算)(x f '比计算函数的近似值要麻烦的多。
数值计算方法(一)实验指导书一、基本情况·课程名称:数值计算方法(一)·课程编号:01024002, 01025002, 01825059, 01826059·课程学时:授课 50学时,上机实验 20学时·适用专业:信息与计算科学、数学与应用数学、数学物理力学综合班等理科本科生·使用教材:《数值计算方法(一)》上海大学数学系编·数值实验:1)Lagrange插值多项式2)Newton差商插值法3)Aitken逐次线性插值法4)等距节点情况下的Newton差分插值法5)两点三次Hermite插值法6)Lagrange插值余项的极小化法求近似最佳一致逼近多项式7)Newton-cotes型求积公式8)Romberg算法9)Gauss型求积公式10)Remes算法(机动)·实验环境:装有FORTRAN 4.0以上系统或C语言系统的微型计算机·实验要求:在上机实验时完成相应实验的算法的程序编制,并上机运行,学会应用这些算法于实际问题,以便对算法有更进一步的认识和理解。
考察和体会数值计算中出现的一些问题和现象:误差的估计,算法的稳定性、收敛性、收敛速度以及迭代初值对收敛的影响等。
二、实验内容(一)实验一:Lagrange插值多项式1、目的:学会Lagrange插值算法,并应用算法于实际问题;观察Lagrange插值的龙格现象。
2、例题:1)取正弦函数x x f sin )(=;2)取函数 ]5,5[,15)(2-∈+=x xx f3、要求:要求用键盘输入,程序具有通用性.1)以0.32,0.34,0.36为节点,分别用线性插值和抛物插值求正弦函数在0.3367处的近似值;线性插值场合,比较内插与外插.2)分别取节点数 20,10,5===n n n 的等距节点为插值点,构造出 )(x L n ,并画出其图形,与 )(x f 的图形比较;观察在5±=x 附近的现象,写出分析结果。
《计算方法》实验报告材料引言:计算方法是一门应用数学的基础课程,通过实验教学,能够帮助学生更好地理解和掌握各种数值计算的方法和技巧。
本次实验旨在通过编程实现一些常用的数值计算方法,并通过对比分析实验结果,验证方法的有效性和可行性。
实验一:插值算法插值算法是利用已知的数据点,构建一个连续函数以逼近数据的方法。
本次实验中使用的插值算法为拉格朗日插值和牛顿插值。
通过编程实现这两种算法,并选取若干个数据点进行测试,得到插值函数的结果。
通过比较原始数据和插值函数的结果,可以验证插值算法的准确性和可行性。
实验二:方程求解方程求解是数值计算中的一个重要问题,求解非线性方程、线性方程组和特征值问题等都需要采用相应的迭代方法。
本次实验中,我们实现了常用的牛顿迭代法和二分法,并选择数学问题进行求解。
通过比较实验结果和理论值的误差,可以验证求解方法的精确性和可行性。
实验三:数值积分数值积分是利用数值方法对定积分进行近似求解的过程。
本次实验中,我们实现了矩形法、梯形法和辛普森法等常用的数值积分方法,并选取若干函数进行数值积分的计算。
通过比较数值积分的结果和解析解或数值解的误差,可以验证数值积分方法的准确性和可行性。
实验四:常微分方程求解常微分方程求解是数值计算中的一个重要问题,常常涉及到物理、化学、生物等科学领域。
本次实验中,我们实现了欧拉方法和龙格-库塔方法等常用的常微分方程求解算法,并选取若干常微分方程进行求解。
通过比较数值解和解析解或数值解的误差,可以验证常微分方程求解方法的精确性和可行性。
实验五:线性方程组求解线性方程组求解是数值计算中的一个重要问题,常常涉及到矩阵的运算和迭代方法。
本次实验中,我们实现了高斯消元法和追赶法等常用的线性方程组求解算法,并选择一些矩阵进行求解。
通过比较数值解和解析解或数值解的误差,可以验证线性方程组求解方法的精确性和可行性。
结论:通过本次实验,我们掌握了插值算法、方程求解、数值积分、常微分方程求解和线性方程组求解等常用的计算方法。
数值分析实验五一、实验名称迭代函数对收敛性的影响二、实验目的初步了解非线性方程组的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛三、实验内容用简单迭代法求方程3()210f x x x =--= 的根。
方案一:化3()210f x x x =--=为等价方程x =方案二:化3()210f x x x =--=为等价方程321x x =-四、实验要求(1)分别对方案一、方案二取初值 00x = ,迭代10次,观察其计算值,并加以分析。
(2)用MATLAB 内部函数solve 直接求出方程的所有根,并与(1)的结果进行比较。
五、实验结果方案一10次迭代计算结果为:x1 =Columns 1 through 90 0.7937 0.9644 0.9940 0.9990 0.9998 1.0000 1.0000 1.0000Column 101.0000方案一10次迭代计算结果为:x2 =1.0e+153 *Columns 1 through 90 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.0247 -InfColumn 10-Inf方案一的结果收敛,而方案二的结果发散(2)用MATLAB内部函数solve直接求出方程的所有根为:x =1-1/2+1/2*i-1/2-1/2*i与(1)的结果比较可知方案一的结果更接近精确解,而方案二却反差很大Matlab程序:(1)x1=zeros(1,10);for n=1:9x1(n+1)=((x1(n)+1)/2)^(1/3);endx1x2=zeros(1,10);for k=1:9x2(k+1)=2*(x2(k))^3-1;endx2(2)x=solve('2*x^3-x-1',x)。
数值分析第五章数值实验之数值拟合1. 实验目的:学会用最小二乘法求拟合数据的多项式,并应用算法于实际问题2. 实验内容:给定数据点x yj如下:3. 实验要求:(1)编写程序用最小二乘法求拟合数据的多项式,并求平方误差,作出离散函数(X, y i)和拟合函数的图形。
(2)用MATLAB勺内部函数polyfit 求解上面最小二乘法曲线拟合多项式的系数及平方误差,并用MATLAB勺内部函数plot作出其图形,并与(1)的结果进行比较。
4. 实验步骤:(1)首先根据上述表格中给定的数据点(为$),用MATLAB?序画出散点图。
在MATLA工作窗口输入程序>>x=[0 0.5 0.6 0.7 0.8 0.9 1.0];y=[1 1.75 1.96 2.19 2.44 2.71 3.00];plot(x,y,'r*'),legend(' 数据点(xi,yi )'),x1abel('x'),y1abel('y'),title(' 本实验的数据点(xi,yi )的散点图')运行后屏幕显示数据的散点图,如下图1-1图1-1表中给出的数据的散点图因为数据的散点图1-1的变化趋势与二次多项式很接近,所以取组函数1,x,x2,令 f (x^ a1x2 a2x a3(1-1)用作线性最小二乘拟合的多项式拟合的MATLAB程序求待定系数a k(k =1,2,3).输入程序x=[0 0.5 0.6 0.7 0.8 0.9 1.0]; a=polyfit(x,y,2)运行后输出(1-1 )式的系数a=1.0000 1.0000 1.0000故拟合多项式为f (x) = x2 x 1用MATLA程序估计其误差,并作出拟合曲线和数据的图形。
输入程序:>>xi=[0 0.5 0.6 0.7 0.8 0.9 1.0];y=[1 1.75 1.96 2.19 2.44 2.71 3.00];n=le ngth(xi);f=xi.A2+xi+1;x=0:0.001:1.0;F=x.A2+x+1;fy=abs(f-y);fy2=fy.A2;Ew=max(fy),E1=sum(fy)/n,E2=sqrt((sum(fy2))/n),plot(xi,y,'r*',x,F,'b-'),legend('数据点(xi,yi)',' 拟合曲线y=f(x)'),x1abel('x'),y1abel('y'),title(' 本实验的数据点(xi,yi)和拟合曲线y=f(x)的图形')运行后屏幕显示数据(冷%)与拟合函数f的最大误差E w,平均误差E1和均方根误差E2及其数据点(xi,yi)和拟合曲线y二f (x)的图形,见图1-2.Ew=4.4409e-016E1 =6.3441e-017E2=1.6785e-016图1-2数据散点图和拟合曲线⑵用MATLA的内部函数polyfit求解上面最小二乘法曲线拟合多项式的系数输入程序为:>> x=[0 0.5 0.6 0.7 0.8 0.9 1.0];y=[1 1.75 1.96 2.19 2.44 2.71 3.00];a=polyfit(x,y,2)a=1.0000 1.0000 1.0000>> x=[0 0.5 0.6 0.7 0.8 0.9 1.0];y=[1 1.75 1.96 2.19 2.44 2.71 3.00];a=polyfit(x,y,3)a =-0.0000 1.0000 1.0000 1.0000由此可知拟合的多项式为二次多项式,其系数为a=1.0000 1.0000 1.0000拟合的多项式为f(X)= X2■ x 1求拟合多项式的平方误差,输入程序为xi=[0 0.5 0.6 0.7 0.8 0.9 1.0];y=[1 1.75 1.96 2.19 2.44 2.71 3.00];n=le ngth(xi);f=xi.A2+xi+1;fy=abs(f-y);E1=sum(fy )/n运行后屏幕显示数据(x,yj与拟合函数f的平均误差E1:E1=6.3441e-017用MATLAB勺内部函数plot作出其图形输入程序为:>>x=[0 0.5 0.6 0.7 0.8 0.9 1.0];y=[1 1.75 1.96 2.19 2.44 2.71 3.00];Plot(x,y)运行后拟合多项式的图形如图1-3.5. 实验分析:编写程序用最小二乘法求拟合曲线的多项式的过程中,求出的数据(x,y)与拟合函数f的最大误差Ew=4.4409e-016,平均误差E仁6.3441e-017和均方根误差E2=1.6785e-016非常小都达到了很高的精度要求,及其通过散点求得的拟合曲线y二f (X)的图形比较光滑而用MATLAB勺内部函数polyfit 求解的曲线拟合多项式和平方误差与程序求得的相同,还有就是虽然求解过程简单了,但用MATLAB勺内部函数plot作出的图形有明显的尖点,不够光滑。
数值计算⽅法实验报告《数值计算⽅法》实验报告实验题⽬⼆分法求⾮线性⽅程的根专业班级11级数学师范⼆班姓名李洪学号201102024056指导⽼师李梦联系电话188********⼀、实验⽬的熟悉⼆分法求⽅程近似根的数值⽅法,与⽤计算器解出的值进⾏⽐较,并学会误差分析。
⼆、实验原理⼆分法的基本思路是通过计算隔根区间的中点,逐步将隔根区间缩⼩,从⽽可得⽅程的近似根数列}{n x 。
(≤-+1*k x x ?)三、实验内容已知0)()3(3=-=-e x x f 在[]1,0上有⼀个实根*x ,0)1(0)0(>本实验中的⽤到的求根⽅法有①⼆分法,②计算器求根。
四、实验步骤1.输⼊:a ,b 值及精度控制?量;2.if 0)()(>b f a f then 返回第1步,重新输⼊a ,b 值else 转第3步;3.while ?>-b a 时做(1))(21b a x +=,计算)(x f ;if )(x f =0 then 输出x ,停机。
(2)if0)()(4.输出)(21b a x +=。
五、 Matlab 源程序1.erfen.m:function [c,err,yc]=erfen(f,a,b,delta)ya = feval(f,a);yb = feval(f,b);if ya * yb > 0 ,return,endmax1 = 1+round((log(b-a)-log(delta))/log(2));for k=1:max1c=(a+b)/2;yc=feval(f,c);if yc==0a=c;b=c;elseif yb * yc > 0b=c;yb=yc;elsea=c;ya=yc;endif b-aendc=(a+b)/2;err=abs(b-a);yc=feval(f,c);2.f.m:function f=f(x);f=x^3-exp(-x);六、运⾏结果七、计算机计算结果⼋、实验分析1、⼆分法和计算器均能解出⽅程的根。
实验五 MATLAB 数值运算一、实验目的掌握 MATLAB 的数值运算及其运算中所用到的函数,掌握结构数组和细胞数组的操作。
二、实验内容:(1) 多项式运算。
(2) 多项式插值和拟合。
(3) 数值微积分。
(4) 离散傅里叶变换。
三、实验步骤:1. 多项式运算(1) 多项式表示。
在MATLAB 中,多项式表示成向量的形式。
如:在MATLAB 中表示为>>S=[ 1 3 -5 0 9](2) 多项式的加减法相当于向量的加减法,但须注意阶次要相同。
如不同,低阶的要补0。
如多项式与多项式相加。
>>S1=[0 0 2 3 11 ]>>S2=[1 3 -5 4 7 ]>>S3=S1+S2(3) 多项式的乘、除法分别用函数conv 和deconv 实现>>S1=[ 2 3 11 ]>>S2=[1 3 -5 4 7 ]>>S3=conv(S1,S2)>>S4=deconv(S3,S1)(4) 多项式求根用函数roots>> S1=[ 2 4 2 ]>> roots(S1)(5) 多项式求值用函数polyval>> S1=[ 2 4 1 -3 ]>> polyval(S1,3) %计算x=3 时多项式的值>> x=1:10>> y=ployval(S1,x) %计算x 向量对应的值得到y 向量练习:2. 多项式插值和拟合有一组实验数据如附表1-1 所示。
请分别用拟合(二阶至三阶)和插值(线性和三次样条)的方法来估测 X=9.5 时Y 的值。
以下是实现一阶拟合的语句。
>>x=1:10>>y=[16 32 70 142 260 436 682 1010 1432 1960]>>p1=ployfit(x,y,1) %一阶拟合>>y1=ployval(p1,9.5) %计算多项式p1 在x=9.5 时的值3. 数值微积分(1) 差分使用diff 函数实现。
抢渡长江摘要本文主要解决的是一个竞渡过程中游泳者如何选择最佳路线问题。
这事实上是一个非线性规划问题,它涉及的目标是单一的,即最短的渡江时间。
我们以费马最小时间原理为理论基础,证明了当一条轨迹为花费时间最小的时候,恒有c/sinα(其中c为v=一常数,v为合速度,α为合速度与垂直方向的夹角),从而建立了复杂程度逐渐递进的三个模型,来解决抢渡长江问题。
首先,我们在仅考虑水流速度和游泳者速度大小和方向均不改变的情况下,建立了初等模型,依据该模型,利用水流速度不变时,直线运动时间最短理论,我们计算出2002年第一名竞赛者速度为1.54米/秒,方向为与沿上游方向成52.57度的夹角,并为一个速度大小恒为1.5米/秒的游泳者选择了与沿上游方向成31.75度夹角的渡江方向和估计了他的成绩(15分10秒)。
基于模型一,考虑到人的速度存在上限,我们断言游泳者以与河岸垂直的方向游不可能到达终点,并论证了1934年和2002年成功到达终点人数百分比悬殊的主要原因是:最低渡江速度的不同。
最后给出了游泳者能到达终点的必备条件。
模型一的水流速度假设是实际问题的一种简化,而模型二则考虑了水流速为一个分段函数的情况,这更接近于实际。
基于模型二,我们利用非线性规划方法为速度大小保持不变的游泳者设计了一个三段直折线路径的渡江方案,并估计出他的成绩(15分4秒)。
模型三考虑了流速为一个连续性分布的函数,这样更加逼近现实。
基于该前提,我们首先给出了理论模型,它要求竞赛者时刻调整方向到合适的角度,但实际中却难于操作,所以在建立理论模型之后,本文又给出了实用简化模型及其解法。
通过对以上各种情形的分析与求解,我们得出了以下主要结论:(1) 若水流速度和游泳者速度大小都不变,则必须沿直线行进,才可使所费时间最省。
(2) 若水流速度成阶段性分布且游泳者速度大小不变,则必须沿某一直折线行进,才可使所费时间最省。
(3) 若水流速度成连续性分布且游泳者速度大小不变,则必须沿某一平滑曲线行进,才可使所费时间最省。
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
数值计算方法实验指导书陕西科技大学信息与计算科学教研室目录实验1代数插值实验〔一〕 (1)实验2代数插值实验〔二〕 (4)实验3数据拟合实验7实验4数值积分实验9实验5解非线性方程实验 (11)实验6解线性方程组实验 (13)实验7解非线性方程组实验 (15)实验8解常微分方程组---导弹跟踪问题仿真实验 (17)实验0 Matlab根底实验专业班级学号姓名成绩.实验类型:●验证性实验○综合性实验○设计性实验实验目的:熟悉MATLAB系统的启动、退出、演示系统、帮助系统、MATLAB的运行环境,掌握Matlab矩阵及其运算根底知识实验内容:矩阵的建立、矩阵的拆分、特殊矩阵、矩阵求逆,求行列式的值,矩阵算符及其表达式表示和计算、常用数学函数、画图函数应用实验报告:根据实验情况和结果撰写并递交实验报告。
1实验1代数插值实验〔一〕型:●性○合性○性目的:一步熟掌握Lagrange插算法,提高程能力和解决插的践技能。
内容:依照Lagrange算法写基于N+!个点的(x k,y k)N k0的N次Lagrange插多式系数算的程序原理N+!个点的(x k,y k)k N0N N算Lagrange插基函数L N,K(x)((x x j))/((x k x j)(k=0,⋯,N)j0j0jk算N次Lagrange插多式函数P(x)=Ny k L N,k(x)k 0明需要建立两个数X,Y分存放〔x1,⋯,x n),〔y1,⋯,y n)需要考多式乘运算的算法或者函数。
步要求上机前先写出程序代入程序程序并程中出的及修改程序的程反复后,运行程序并程序运行是否正确。
运行的入和出。
实验报告:根据实验情况和结果撰写并递交实验报告。
参考程序〔MATLAB程序〕function[C,L]=lagran(X,Y)%Input -Xisavectorthatcontainsalistofabscissas% -Yisavectorthatcontainsalistofordinates%Output-Cisamatrixthatcontainsthecoefficentsof% theLagrangeinterpolatorypolynomial% -LisamatrixthatcontainstheLagrange% coefficientpolynomials%NUMERICALMETHODS:MatlabPrograms(c)2004byJohnH.MathewsandKurtisD.FinkComplementarySoftwaretoaccompanythetextbook:NUMERICALMETHODS:UsingMatlab,FourthEdition2ISBN:0-13-065248-2Prentice-HallPub.Inc.OneLakeStreetUpperSaddleRiver,NJ07458w=length(X);n=w-1;L=zeros(w,w);%FormtheLagrangecoefficientpolynomialsfork=1:n+1V=1;forj=1:n+1ifk~=jV=conv(V,poly(X(j)))/(X(k)-X(j));endendL(k,:)=V;end%DeterminethecoefficientsoftheLagrangeinterpolator%polynomial C=Y*L;3实验2代数插值实验〔二〕型:●性○合性○性目的:一步熟掌握spline(条)插算法,提高程能力和解决插的践技能。
1
实验报告
学院(系)名称:
姓名 学号 专业
班级 实验项目 线性方程组的解法
课程名称 数值计算方法 课程代码
实验时间 实验地点
批改意见:
成绩
教师签字:
实验目的:
编写列选主元高斯消去法、雅可比和高斯-塞德尔迭代法的算法程序,上机调试通过。
实验环境:
硬件环境:IBM-PC或兼容机
软件环境:Windows操作系统
编程语言:C语言
实验内容:
一. 用列主元高斯消去法求解下列线性方程组
二. 用高斯-塞德尔迭代方法求解线性方程组
要求误差为
实验步骤:
一.列主元高斯消去法
高斯消去法分为消元过程与回代过程,消元过程将所给方程组加工成上三角形方程组,再经回代
过程求解
列选主元法
1. 列选主元是当消元到第k步时,从k列的akk以下(包括akk)的各元素中选出绝对值最大的,
然后通过行交换将其交换到akk的位置上。交换系数矩阵中的两行(包括常数项),只相当于两个方
程的位置交换了,因此列选主元不影响求解的结果
2. 列选主元比全选主元的运算量小,但一般可以满足精度要求,所以列选主元更常被采用
3. 在列主元消去法中,未知数仍然是顺序地消去的,但是把各方程中要消去的那个未知数的系
数按绝对值最大值作为主元素,然后用顺序消去法的公式求解
列主元高斯消去法的流程图:
主程序部分 列选主元部分
52262342321321321xxx
xxx
xxx
7910431017210424321321321xxx
xxx
xxx
51021
2
二.高斯-塞德尔迭代法
高斯-塞德尔迭代法的思想
1. 迭代收敛时,新值xi (k+1) 比老值xi (k) 更准确
2. 算出新值xi (k+1)后,用新值xi (k+1)代替用于后面计算的老值xi (k) ,使每次迭代计算,都
是利用“最新求解信息”
3. 这样,必然会使迭代求解的速度加快
高斯-塞德尔(Seidel)迭代公式
),,2,1(,)(11)(11)1()1(nixaxabax
nijkjijijkjijiiiki
高斯-塞德尔迭代的流程图
实验结果:
一. 列主元消去法
输入各个数据,最终使用列选主元法,得到结果为:
x1=x2=x3=1
二. 高斯-赛德尔迭代法
输入各个数据,输出每一步迭代数据,最终结果为:x1=0.285716,x2=2.142855,x3=-3.285712
附录(源程序及运行结果)
一. 列主元高斯消去法
#include
#include
void print(double a[3][3],int n,double b[3]){
printf("输出矩阵:\n");
for(int i=0;i
printf("%lf",b[i]);
printf("\n");
}
}
void liezhuyuan(double a[3][3],double b[3],int k,int n){
double d,t;
int l=k,i=k+1;
d=a[k][k];
while(i!=n){
if(fabs(a[i][k])>fabs(d)){
d=a[i][k];
l=i;
}
i++;
}
printf("选出主元:%lf\n",d);
if(d==0)
printf("矩阵奇异!\n");
else if(l!=k){
for(int j=k;j
}
t=b[l]; b[l]=b[k]; b[k]=t;
}
}
void main(){
double a[3][3]={2,1,1,1,3,2,1,2,2},
b[3]={4,6,5};
int k=0,i,j,n=3;
3
print(a,n,b); while(k!=n-1){ liezhuyuan(a,b,k,n); for(i=k+1;i
int n=3,i;
do{
e=0;
i=0;
do{
t=x[i];
s=0;
for(int j=0;j
s=s+a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];
if(fabs(x[i]-t>e))
e=fabs(x[i]-t);
i++;
}while(i!=n);
for(i=0;i
printf("\n");
}while(e>e0);
}
运行结果: