贵州大学2014级数值分析上机实验

合集下载

贵州大学数值分析上机实验

贵州大学数值分析上机实验

数值分析上机实验报告课程名称:数值分析上机实验学院:机械工程学院专业:机械制造姓名:张法光学号:2012021691 年级:12级任课教师:代新敏老师2012年12月30日一.已知A 与b12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823-3.125432 -1.012345 2.1897361.563849-0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.1135842.189736 2.031454 4.10101119.8979180.431637-3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.10345814.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -25.173417 0.84671695 1.784317 -86.612343 1.1101230 4.719345 -5.6784392]TB ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。

数值分析上机报告

数值分析上机报告

数值分析上机实习报告专业:土木工程班级:学号:姓名:指导老师:联系电话:2015.12.12序言随着本学期逐渐接近尾声,我也逐渐掌握了数值分析的一些基本理论•本次上机作业是理论与实践的结合•本次作业使用了matlab与C++两种语言•其中matlab具有编程效率高,用户使用方便,方便的绘图功能的优点。

而C++是一种基本的编程语言,在实际的工程中也有广泛的应用。

本次作业根据题目的特点,结合两种语言各自的优势,采用了不同的方法。

其中牛顿法,Steffensen加速法采用了c语言。

插值与多项式拟合使用了两种语言。

Ru n ge-Kutt a 4阶算法仅使用了matlab编程。

本次作业注重问题的计算过程,分析总结,及编程。

由于所涉及原理课本均有详细陈述,在此不再赘述。

第一题 (3)1.1题目 (3)1.2计算过程和结果 (3)1.3结果分析 (3)第二题 (4)2.1题目 (4)2.2计算过程和结果 (4)2.3结果分析 (8)第三题 (8)3.1题目 (8)3.2问题求解及过程 (8)3.3结果分析 (9)总结 (10)附件 (11)第一题 (11)1.1.1第一问牛顿法 (11)1.1.2 第一问牛顿-Steffensen法 (11)1.2.1第二问牛顿法 (12)1.2.2 第二问牛顿-Steffensen法 (13)第二题 (14)2.1.1最小二乘法求解 (14)2.2.1拉格朗日差值多项式拟合 (15)2.2.2牛顿插值 (15)第三题 (17)3.1.1Runge-Kutta 4 阶算法 (17)1.1题目分别用牛顿法,及基于牛顿算法下的Steffe nsen加速法⑴求ln(x+sin x)=0的根。

初值x0分别取0.1, 1,1.5, 2, 4进行计算。

(2)求sin x=0的根。

初值x0分别取1,1.4,1.6, 1.8,3进行计算。

分析其中遇到的现象与问题。

1・2计算过程和结果1.对方程In(x+sinx)=O,可求解x+sinx=1的解。

数值分析上机实验报告(插值)

数值分析上机实验报告(插值)

数值分析第一次上机练习实验报告——Lagrange 插值与三次样条插值一、 问题的描述设()2119f x x =+, []1,1x ∈-,取15iix =-+,0,1,2,...,10i =.试求出10次Lagrange 插值多项式()10L x 和三次样条插值函数()S x (采用自然边界条件),并用图画出()f x ,()10L x ,()S x .二、 方法描述——Lagrange 插值与三次样条插值我们取15i ix =-+,0,1,2,...,10i =,通过在i x 点的函数值()2119i i f x x =+来对原函数进行插值,我们记插值函数为()g x ,要求它满足如下条件:()()21,0,1,2,...,1019i i ig x f x i x ===+ (1) 我们在此处要分别通过Lagrange 插值(即多项式插值)与三次样条插值的方法对原函数()2119f x x=+进行插值,看两种方法的插值结果,并进行结果的比较。

10次的Lagrange 插值多项式为:()()10100i i i L x y l x ==∑ (2)其中:()21,0,1,2,...,1019i i i y f x i x ===+以及()()()()()()()()()011011......,0,1,2,...,10......i i n i i i i i i i n x x x x x x x x l x i x x x x x x x x -+-+----==----我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange 插值。

理论上我们根据区间[]1,1-上给出的节点做出的插值多项式()n L x 近似于()f x ,而多项式()n L x 的次数n 越高逼近()f x 的精度就越好。

但实际上并非如此,而是对任意的插值节点,当n →+∞的时候()n L x 不一定收敛到()f x ;而是有时会在插值区间的两端点附近会出现严重的()n L x 偏离()f x 的现象,即所谓的Runge 现象。

数值分析上机实验报告

数值分析上机实验报告

数值分析上机实验报告摘要:本报告是对数值分析课程上机实验的总结和分析,涵盖了多种算法和数据处理方法,通过对实验结果的分析,探究了数值计算的一般过程和计算的稳定性。

1. 引言数值计算是数学的一个重要分支,广泛应用于物理、金融、工程等领域。

本次实验是对数值分析课程知识的实际应用,通过上机实现算法,探究数值计算的可靠性和误差分析。

2. 实验方法本次实验中,我们实现了多种算法,包括:(1)牛顿迭代法求方程的根;(2)高斯消元法求线性方程组的解;(3)最小二乘法拟合数据点;(4)拉格朗日插值法估计函数值;(5)梯形公式和辛普森公式求积分近似值。

对于每个算法,我们都进行了多组数值和不同参数的实验,并记录了相关数据和误差。

在实验过程中,我们着重考虑了算法的可靠性和计算的稳定性。

3. 实验结果与分析在实验中,我们得到了大量的实验数据和误差分析,通过对数据的展示和分析,我们得到了以下结论:(1)牛顿迭代法求解非线性方程的根能够对算法的初始值和迭代次数进行适当的调整,从而达到更高的稳定性和可靠性。

(2)高斯消元法求解线性方程组的解需要注意到矩阵的奇异性和精度的影响,从而保证计算的准确性。

(3)最小二乘法拟合数据点需要考虑到拟合的函数形式和数据的误差范围,采取适当的数据预处理和拟合函数的选择能够提高计算的准确性。

(4)拉格朗日插值法估计函数值需要考虑到插值点的选择和插值函数的阶数,防止出现龙格现象和插值误差过大的情况。

(5)梯形公式和辛普森公式求积分近似值需要考虑到采样密度和拟合函数的选择,从而保证计算的稳定性和收敛速度。

4. 结论通过本次实验的分析和总结,我们得到了深入的认识和理解数值计算的一般过程和算法的稳定性和可靠性,对于以后的数值计算应用也提供了一定的指导和参考。

优质文档精选——数值分析上机实验报告

优质文档精选——数值分析上机实验报告

数值分析上机实验报告《数值分析》上机实验报告1.用Newton 法求方程 X 7-X 4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。

1.1 理论依据:设函数在有限区间[a ,b]上二阶导数存在,且满足条件{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列迭代过程由则对任意初始近似值达到的一个中使是其中上不变号在区间],[0)(3,2,1,0,)(')()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f ab c f x f b a x f b f x f k k k k k k ==-==∈≤-≠>+令)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3225333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f故以1.9为起点⎪⎩⎪⎨⎧='-=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。

当前后两个的差<=ε时,就认为求出了近似的根。

本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C 语言程序原代码:#include<stdio.h>#include<math.h> main(){double x2,f,f1;double x1=1.9; //取初值为 1.9 do{x2=x1;f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数 printf("计算结果:x=%f\n",x1);}1.3 运行结果:1.4 MATLAB 上机程序function y=Newton(f,df,x0,eps,M) d=0;for k=1:Mif feval(df,x0)==0d=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))<=epsd=1;breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey= '奇异'endfunction y=df(x)y=7*x^6-28*4*x^3;Endfunction y=f(x)y=x^7-28*x^4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newton('f','df',x0,eps,M);>> vpa(x,7)1.5 问题讨论:1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。

数值分析上机实验报告

数值分析上机实验报告

数值分析上机实验理学院11级统计01班41108030125鲁庆实验报告一一.实验名称误差与误差估计二.实验目的掌握数值运算的误差估计方法三.数学原理 1.绝对误差(*)e x设某一量的准确值为x ,近似值为x*,则x*与x 之差叫做近似值x*的绝对误差(简称误差),记为*(*)*e e x x x ==- 2.绝对误差限适当小的正数,使|(*)||*|*e x x x ε=-≤则称*ε为近似值 x * 的绝对误差限。

(有时用*x x ε*=±表示近似值x *的精度或准确值的所在范围。

3.相对误差(*)r e x绝对误差与准确值之比*(*)*(*),0r r e x x xe e x x x x-===≠称为x *的相对 误差。

4.相对误差限(*)r x ε若指定一个适当小的正数 (*)r x ε,使|(*)||(*)|(*)||r r e x e x x x ε=≤则称(*)r x ε为近似值 x *的相对误差限。

5.有效数字若近似值x*的绝对误差限是某一位的半个单位,该位到x*的第一位非零数字一共有n 位,则称近似值x*有n 位有效数字,或说x*精确到该位。

6.绝对误差的运算:)()()(2121x x x x εεε+=± )()()(122121x x x x x x εεε+≈22122121+=x x x x x x x )()()(εεε (f(x))()(x)f x εε'≈四.实验内容1. 计算I n=e 1-⎰10nxe x 2dx (n=0,1,...)并估计误差。

解: >> I0 = exp(-1)*quad('(x.^0).*exp(x.^2)',0,1,10^(-10));>> vpa(I0,10) ans =.5380795069>> I1= exp(-1)*quad('(x.^1).*exp(x.^2)',0,1,10^(-10)); >> vpa(I1,10) ans =.3160602794>> I2 = exp(-1)*quad('(x.^2).*exp(x.^2)',0,1,10^(-10)); >> vpa(I2,10) ans =.2309602465>> I3 = exp(-1)*quad('(x.^3).*exp(x.^2)',0,1,10^(-10)); >> vpa(I3,10) ans =.1839397206>> I4 = exp(-1)*quad('(x.^4).*exp(x.^2)',0,1,10^(-10)); >> vpa(I4,10) ans =.1535596302>> I5 = exp(-1)*quad('(x.^5).*exp(x.^2)',0,1,10^(-10)); >> vpa(I5,10) ans =.1321205588>> I6 = exp(-1)*quad('(x.^6).*exp(x.^2)',0,1,10^(-10)); >> vpa(I6,10) ans =.1161009245>> I7 = exp(-1)*quad('(x.^7).*exp(x.^2)',0,1,10^(-10)); >> vpa(I7,10) ans =.1036383235>> I8 = exp(-1)*quad('(x.^8).*exp(x.^2)',0,1,10^(-10)); >> vpa(I8,10) ans =.9364676413e-1>> I9 = exp(-1)*quad('(x.^9).*exp(x.^2)',0,1,10^(-10)); >> vpa(I9,10) ans =.8544670595e-1 2.计算x255的值。

数值分析上机第七章+第九章

数值分析上机第七章+第九章

数值分析第三次上机实验报告学院班级:学生学号:学生姓名:同作者:实验日期:1.实验题目: P232 3.(1) 一、实验目的:设f(x)=1/x,(1)求f(x)在[1,2] 上的零次和一次最佳一致逼近多项式。

(2)求f(x)在[1,2] 上的零次和一次最佳平凡逼近多项式。

二、实验环境:1.matlab2014b/macOS Seirra2.G 楼机房三、实验内容及实验原理:1.零次最佳逼近多项式 原理1: ()()02M m P x +=所以f(x)=1/x 在[1,2]上的零次最佳一致逼近多项式()01132P 24x +== 原理2:()()()0000,,f P x ϕϕϕ=()101P x a a x =+f(x)=1/x 在[1,2]上的零次最佳平方逼近多项式()()()210020011,ln 2,dx f x P x dxϕϕϕ===⎰⎰ 2. 一次最佳逼近多项式 (1)一次最佳一致逼近多项式: 解:21'()f x x =- ,32''()0f x x =>∴ 1,2为交错点,设101P ()x a a x =+111()()12212f b f a a b a --===---且由112111'(),2f x x x =-=-=1111(1()()()322224f a f x a a xa-+++ =-==故得131P()42x x+=-(2)一次最佳平方逼近多项式解:设10101P(),1,x c c x xϕϕ=+==001000011111(,)(,)(,)=(,)(,)(,)c fc fϕϕϕϕϕϕϕϕϕϕ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦由0111,,x fxϕϕ===得:2001(,)1dxϕϕ==⎰221117(,)3x dxϕϕ==⎰2100113(,)(,)2xdxϕϕϕϕ===⎰2011(,)ln2f dxxϕ==⎰211(,)1f dxϕ==⎰得到法方程组:01013ln2237123c cc c⎧+=⎪⎪⎨⎪+=⎪⎩解之得:**01c8.9782,c0.4766==1P()8.97820.4766x x∴=+四、实验结果及其分析:经拟合结果无误。

数值分析上机实验报告

数值分析上机实验报告

数值分析上机实验报告导言:本次上机实验主要是针对数值分析课程中的一些基本算法进行实验验证。

实验内容包括迭代法、插值法、数值积分和常微分方程的数值解等。

在实验过程中,我们将会使用MATLAB进行算法的实现,并对结果进行分析。

一、迭代法迭代法是解决函数零点、方程解等问题的常用方法。

我们将选择几个常见的函数进行迭代求根的实验。

(1)二分法二分法是一种简单而有效的迭代求根法。

通过函数在区间两个端点处的函数值异号来确定函数在区间内存在零点,并通过不断缩小区间来逼近零点。

(2)牛顿法牛顿法利用函数的一阶导数和二阶导数的信息来逼近零点。

通过不断迭代更新逼近值,可以较快地求得零点。

实验结果表明,对于简单的函数,这两种迭代法都具有很好的收敛性和稳定性。

但对于一些复杂的函数,可能会出现迭代失效或者收敛速度很慢的情况。

二、插值法插值法是在给定一些离散数据点的情况下,通过构造一个插值函数来逼近未知函数的值。

本实验我们将使用拉格朗日插值和牛顿插值两种方法进行实验。

(1)拉格朗日插值拉格朗日插值通过构造一个多项式函数来逼近未知函数的值。

该多项式经过离散数据点,并且是唯一的。

该方法简单易懂,但插值点越多,多项式次数越高,插值函数的精度也就越高。

(2)牛顿插值牛顿插值利用差商的概念,通过构造一个插值多项式来逼近未知函数的值。

与拉格朗日插值相比,牛顿插值的计算过程更加高效。

但同样要求插值点的选择要合理,否则可能出现插值函数不收敛的情况。

实验结果表明,这两种插值方法都能够很好地逼近未知函数的值。

插值点的选择对插值结果有很大的影响,过多或者过少的插值点都可能导致插值结果偏离真实函数的值。

三、数值积分数值积分是一种将定积分问题转化为数值求和的方法。

本实验我们将使用复合梯形求积法和复合辛普森求积法进行实验。

(1)复合梯形求积法复合梯形求积法将定积分区间等分为若干小区间,然后使用梯形公式对每个小区间进行近似求积,最后将结果相加得到整个定积分的近似值。

2014级硕士研究生数值分析上机实习报告(答案)

2014级硕士研究生数值分析上机实习报告(答案)

2014级硕士研究生数值分析上机实习 (第一次)姓名: 学号: 学院:实习题目:分别用二分法和Newton 迭代法求方程02010223=-++x x x 的根. 实习目的:掌握两种解法,体会两种解法的收敛速度.实习要求:用C 程序语言编程上机进行计算,精确到8位有效数字. 报告内容:1. 确定实根的个数以及所在区间.2. 将最后两次计算结果填入下表(保留8位数字):3. 实习过程中遇到哪些问题?如何解决?有何心得体会?4. 两种解法的计算程序(此页写不下时可以加页):【二分法】#include <stdio.h>#include <math.h>float getvalue(float x){return x*x*x+2*x*x+10*x-20;}void main(){float a=0,b=2,c;c=(a+b)/2;while(fabs(getvalue(c))>0.00001 && fabs(a-b)>0.00001){if(getvalue(c)*getvalue(b)<0) a=c;if(getvalue(a)*getvalue(c)<0) b=c;c=(a+b)/2;}printf("%0.7f\n",c);}【牛顿迭代法】#include "stdio.h"#include "math.h"main(){float x,f,f1;x=8; // x的初值可为任意值do{f=x*x*x+2*x*x+10*x-20; f1=3*x*x+4*x+10; x=x-f/f1;}while(fabs(f)>0.000001);printf("x=%f,f=%f\n",x,f);}2014级硕士研究生数值分析上机实习(第二次)姓名:学号:学院:实习题目:计算8阶三对角矩阵)tridiag235A的行列式.,=.0(235.0,.1274实习目的:掌握计算行列式的方法.实习要求:首先选择一种算法,然后用C程序语言编程上机进行计算.报告内容:1. 简单描述所采用的算法:2. 计算结果:=A3. 实习过程中遇到哪些问题?如何解决?有何心得体会?4. 写出C语言计算程序(此页写不下时可以加页):#include<stdio.h>#include<math.h>int main(){int n,i,j,k,m,l,SwarpNum=0;double a[10][10],b,temp,result=1;printf("输入行列式阶数:");scanf("%d",&n);printf("输入各值:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)scanf("%lf",&a[i][j]);}for(k=0;k<n-1;k++){if(a[k][k]==0){for(m=n-1;m>k;m--){if(a[m][k]!=0){for(l=0;l<n;l++){temp=a[k][l];a[k][l]=a[m][l];a[m][l]=temp;}SwarpNum++;break;}}}for(i=k+1;i<n;i++){b=-a[i][k]/a[k][k];for(j=k;j<n;j++)a[i][j]=a[k][j]*b+a[i][j];}printf("\n");}for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j)result*=a[i][j];}result=pow(-1,SwarpNum)*result; printf("result=%f\n\n",result);return 0;}2014级硕士研究生数值分析上机实习 (第三次)姓名: 学号: 学院:实习题目:分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解线性方程组⎪⎩⎪⎨⎧=++=++=++9.14.35.16.84.22.78.17.27.64.38.91.2z y x z y x z y x 实习目的:感受两种迭代法的收敛速度.实习要求:首先构造收敛的Jacobi 迭代法和Gauss-Seidel 迭代法,然后用C 程序语言编程上机进行求解,初始值均取为0,精确到4位小数.报告内容:1. 写出收敛的Jacobi 迭代法和Gauss-Seidel 迭代法:2. 将最后一次迭代次数k与相应的迭代结果填入下表3. 实习过程中遇到哪些问题?如何解决?有何心得体会?4. C语言计算程序:Jacobi迭代法#include <stdio.h>#include <math.h>int function(float y[3],float x[3]); /*判断是否收敛*/float x[3]={0,0,0},z; /*定义初始向量x*/ int i,j,k,n=3;main(){floata[3][3]={{ 8.6,1.5,3.4},{2.1,9.8,3.4},{2.7,1.8,7.2}}, b[3]={1.9,6.7,2.4 };float y[3],sum;int flag;for (k=0;k<100;k++) /*迭代的次数*/{for(i=0;i<n;i++){sum=0;for(j=0;j<n;j++){if(j!=i)sum=sum+a[i][j]*x[j];}y[i]=(b[i]-sum)/a[i][i]; /*算出该迭代时的y[i]*/}for(i=0;i<n;i++){printf("x%d=%-10.6f",i+1,y[i]);}printf("\n"); flag=function(y,x); /*调用函数function*/if(flag==1) /*结束循环*/break; } } int function(float y[3],float x[3]) /*判断是否收*/ { int flag=0;/*标志主函数中的循环是否要结束*/z=fabs(y[0]-x[0]); for(i=0;i<n;i++) if(z<fabs(y[i]-x[i])) z=fabs(y[i]-x[i]); if(z<10e-6) { flag=1; printf("die dai de ci shu shi k=%d\n",k+1); /*输出得到最后结果迭代的次数*/printf("zui hou de jie guo shi:\n"); for(i=0;i<n;i++) printf("x%d=%-10.6f",i+1,y[i]);/*输出方程组的解*/printf("\n"); } else for(i=0;i<n;i++) /*将y[i]的值赋给x[i]进行下一步的迭代*/ x[i]=y[i]; return (flag); }} Gauss-Seidel 迭代法#include<stdio.h> #include<math.h> #include<iostream.h> #define N 3 double Compare(double a[N],double b[N]) { double c=0; int i;for(i=0;i<=N-1;i++) c+=fabs(a[i]-b[i]); return c; } void Gauss_seidel(double A[N][N],doublex[N],double b[N],double precesion) { int i,j,k; double x2[N],x3[N],sum; for(i=0;i<=N-1;i++) { x2[i]=x[i]; x3[i]=x[i]; } k=1; //k 为迭代次数 while(1) { for(i=0;i<=N-1;i++) {sum=0; for(j=0;j<=N-1;j++) {if(j!=i) sum+=A[i][j]*x2[j]; } x[i]=(b[i]-sum)/A[i][i]; x2[i]=x[i];} //输出每一次迭代的结果 printf("第%d 次迭代:\n",k); printf("x3= "); for(i=0;i<=N-1;i++)printf("%lf ",x3[i]); printf("\n");printf("x= ");for(i=0;i<=N-1;i++)printf("%lf ",x[i]); printf("\n"); //判断是否达到度迭代精 if(Compare(x3,x)<=precesion) { printf("达到迭代精度的方程组的解为:\n"); printf("x= ");for(i=0;i<=N-1;i++) printf("%lf ",x[i]); printf("\n"); break;}else{for(i=0;i<=N-1;i++) x3[i]=x[i];k++;continue; }}}void main(){doubleA[N][N]={{ 8.6,1.5,3.4},{2.1,9.8,3.4},{2.7,1.8,7.2} },x[N]={0},b[N]={ 1.9,6.7,2.4 };Gauss_seidel(A,x,b,1e-10);}2014级硕士研究生数值分析上机实习 (第四次)姓名: 学号: 学院:实习题目:分别用复化梯形公式和复化Simpson 公式计算积分dx x xI x⎰=2e2sin 的近似值n I 和m S .实习目的:体会两种复化求积公式的收敛性与收敛速度.实习要求:用C 程序语言编程上机进行计算,结果要有八位有效数字. 报告内容:1. 写出求n I 和m S 的复化求积公式:2. 写出具有八位有效数字的计算结果: =n ;n I = =m ;m S =3. 实习过程中遇到哪些问题?如何解决?有何心得体会?哈尔滨工业大学(威海)实验报告纸4. C语言计算程序(此页写不下时可以加页):- 11 -。

2014数值分析MATLAB上机实验.docx

2014数值分析MATLAB上机实验.docx

数值分析实习报告
姓名:gestepoA
学号:201*******
班级:***班
序言
随着计算机技术的迅速发展,数值分析在工程技术领域中的应用越来越广泛,并且成为数学与计算机之间的桥梁。

要解决工程问题,往往需要处理很多数学模型,不仅要研究各种数学问题的数值解法,同时也要分析所用的数值解法在理论上的合理性,如解法所产生的误差能否满足精度要求:解法是否稳定、是否收敛及熟练的速度等。

而且还能减少大量的人工计算。

由于工程实际中所遇到的数学模型求解过程迭代次数很多,计算量很大,所以需要借助如MATLAB,C++,VB,JAVA的辅助软件来解决,得到一个满足误差限的解。

本文所计算题目,均采用MATLAB进行编程,MATLAB被称为第四代计算机语言,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来MATLAB最突出的特点就是简洁,它用更直观的、符合人们思维习惯的代码。

它具有以下优点:
1友好的工作平台和编程环境。

MATLAB界面精致,人机交互性强,操作简单。

2简单易用的程序语言。

MATLAB是一个高级的矩阵/阵列语言,包含控制语言、函数、数据结构,具有输入、输出和面向对象编程特点。

用户可以在命令窗口中将输入语句与执行命令同步,也可以先编好一个较大的复杂的应用程序(M 文件)后再一起运行。

3强大的科学计算机数据处理能力。

包含大量计算算法的集合,拥有600多个工程中要用到的数学运算函数。

4出色的图像处理功能,可以方便地输出二维图像,便于我们绘制函数图像。

数值分析上机实践报告

数值分析上机实践报告

数值分析上机实践报告班级:计算机1002姓名:陈斯琪学号:20102686课题三A . 实验题目:线性方程组的迭代法B . 实验要求(1) 应用迭代法求解线性方程组,并与直接法作比较;(2) 分别对不同精度要求,如5-4-3-10,10,10=ε,利用所需迭代次数体会该迭代法的收敛快慢;(3) 对方程组(2),(3)使用SOR 方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试观察对算法收敛性的影响,并找出你所选用松弛因子的最佳值;(4) 编制出各种迭代法的程序并给出计算结果。

C . 目的和意义(1) 通过上机了解迭代法求解线性方程组的特点;掌握求解线性方程组的各类迭代法;(2) 体会上机计算时,终止准则‖X^(k+1)-X^k ‖∞<ε,对控制迭代精度的有效性; (3) 体会初始值和松弛因子的选择,对迭代收敛速度的影响 D . 实验方程组(1)线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡1-421534100368-24-3-81-012029137-2621-234179-11-1003524-31-23-6217758-6233-761-62911-31-512-301-231-2-2010563-5-6000121-3-2416084-0484⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125精确解T x )2,1,1,3,0,2,1,0,1,1(*--=.(2) 对称正定线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡45152211236601924-3-360024-3-36014110-3-5211144-3-310-4221-8-13-4-1-612-53-8-1141-2312-1-204204-2004204-2487654321x x x x x x x x 精确解T *)2,0,1,1,2,0,1,1(--=x . (3)三对角线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡554141262135741-000000001-000000041-0000001-41-0000001-41-0000001-41-0000001-41-0000001-41-0000001-41-0000001-400000001-000000001-410987654321x x x x x x x x x x 精确解T x )1,1,0,3,2,1,0,3,1,2(*---=.E . 实验程序代码及截图(1) 应用Jacobi 迭代法求解方程组 代码如下:#include<iostream.h> #include<math.h>#define N 10 //十阶矩阵static double A[N][N]={4,2,-3,-1,2,1,0,0,0,0,8,6,-5,-3,6,5,0,1,0,0,4,2,-2,-1,3,2,-1,0,3,1,0,-2,1,5,-1,3,-1,1,9,4,-4,2,6,-1,6,7,-3,3,2,3,8,6,-8,5,7,17,2,6,-3,5,0,2,-1,3,-4,2,5,3,0,1,16,10,-11,-9,17,34,2,-1,2,2,4,6,2,-7,13,9,2,0,12,4,0,0,-1,8,-3,-24,-8,6,3,-1};//方程组左侧系数矩阵 static double B[N]={5,12,3,2,3,46,13,38,19,-21}; //右侧值。

数值分析上机实验

数值分析上机实验

数值分析上机实验⽬录1 绪论 (1)2 实验题⽬(⼀) (2)2.1 题⽬要求 (2)2.2 NEWTON插值多项式 (3)2.3 数据分析 (4)2.3.1 NEWTON插值多项式数据分析 (4)2.3.2 NEWTON插值多项式数据分析 (6)2.4 问答题 (6)2.5 总结 (7)3 实验题⽬(⼆) (8)3.1 题⽬要求 (8)3.2 ⾼斯-塞德尔迭代法 (8)3.3 ⾼斯-塞德尔改进法—松弛法 (9)3.4 松弛法的程序设计与分析 (9)3.4.1 算法实现 (9)3.4.2 运算结果 (9)3.4.3 数据分析 (11)4 实验题⽬(三) (13)4.1 题⽬要求 (13)4.2 RUNGE-KUTTA 4阶算法 (13)4.3 RUNGE-KUTTA 4阶算法运算结果及数值分析 (14)总结 (16)附录A (17)1绪论数值分析是计算数学的⼀个主要部分,它主要研究各类数学问题的数值解法,以及分析所⽤数值解法在理论上的合理性。

实际⼯程中的数学问题⾮常复杂,所以往往需要借助计算机进⾏计算。

运⽤数值分析解决问题的过程:分析实际问题,构建数学模型,运⽤数值计算⽅法,进⾏程序设计,最后上机计算求出结果。

数值分析这门学科具有⾯向计算机、可靠的理论分析、好的计算复杂性、数值实验、对算法进⾏误差分析等特点。

本学期开设了数值分析课程,该课程讲授了数值分析绪论、⾮线性⽅程的求解、线性⽅程组的直接接法、线性⽅程组的迭代法、插值法、函数逼近与曲线拟合、数值积分和数值微分、常微分⽅程初值问题的数值解法等内容。

其为我们解决实际数学问题提供了理论基础,同时我们也发现课程中很多问题的求解必须借助计算机运算,⼈⼯计算量太⼤甚⾄⽆法操作。

所以学好数值分析的关键是要加强上机操作,即利⽤计算机程序语⾔实现数值分析的算法。

本报告就是基于此⽬的完成的。

本上机实验是通过⽤计算机来解答数值分析问题的过程,所⽤的计算⼯具是⽐较成熟的数学软件MATLAB。

数值分析实验2014讲解

数值分析实验2014讲解

数值分析实验(2014,9,16~10,28)信计1201班,人数34人数学系机房数值分析计算实习报告册专业学号姓名2014~2015年第一学期实验一 数值计算的工具 Matlab1.解释下MATLAB 程序的输出结果 程序: t=0.1 n=1:10 e=n/10-n*te 的结果:0 0 -5.5511e-017 0 0 -1.1102e-016 -1.1102e-016 0 0 0 2.下面MATLAB 程序的的功能是什么? 程序:x=1;while 1+x>1,x=x/2,pause(0.02),end 用迭代法求出x=x/2,的最小值x=1;while x+x>x,x=2*x,pause(0.02),end 用迭代法求出x=2*x,的值,使得2x>X x=1;while x+x>x,x=x/2,pause(0.02),end 用迭代法求出x=x/2,的最小值,使得2x>X3.考虑下面二次代数方程的求解问题02=++c bx ax公式a acb b x 242-+-=是熟知的,与之等价地有ac b b c x 422-+-=,对于1,100000000,1===c b a ,应当如何选择算法。

应该用aacb b x 242-+-=计算,因为b做分母4.函数)sin(x 有幂级数展开...!7!5!3sin 753+-+-=x x x x x利用幂级数计算x sin 的MATLAB 程序为 function s=powersin(x) s=0; t=x; n=1;while s+t~=s; s=s+t ;t=-x^2/((n+1)*(n+2))*t ; n=n+2; end t1=cputime; pause(10); t2=cputime; t0=t2-t1(a)解释上述程序的终止准则。

当s+t=s ,终止循环。

(b)对于2/21,2/11,2/πππ=x 计算的进度是多少?分别计算多少项? X=pi/2时,s =1.0000 x=11pi/2时,s=-1.0000 x=21pi/2时,s =0.9999 Cputime 分别是0.1563 0.0469 0.01565.考虑调和级数∑∞=11n n,它是微积分中的发散级数,在计算机上计算该级数的部分和,会得到怎么样的结果,为什么?function s=fun(n) s=0; t=1/n;for i=1:n s=s+1/i; end当n=100时s =5.1874 当n=80时s =4.9655 当n=50时,s =4.4992 当n=10时,s =2.92906.指数函数的级数展开...!3!2132++++=x x x e x,如果对于0<x ,用上述的级数近似计算指数函数的值,这样的算法结果是否会好,为什么?function s=powerexp(x) s=1; n=1; t=1;while s+t~=s;t=(x^n)/factorial(n); s=s+t; n=n+1; end当x=-1时,s =0.3679 当x=-2时,s =0.1353 当x=-3时,s =0.04987.考虑数列n i x i ,...2,1,=,它的统计平均定义为∑==ni i x n x 11,标准差2121)(11⎥⎦⎤⎢⎣⎡--=∑=x x n n i i σ数学上等价于21221)(11⎥⎥⎦⎤⎢⎢⎣⎡--=∑=x n x n n i i σ作为标准差的两种算法,你将如何评价他们的得与失。

数值分析上机实验报告

数值分析上机实验报告

一、实验目的通过本次上机实验,掌握数值分析中常用的算法,如二分法、牛顿法、不动点迭代法、弦截法等,并能够运用这些算法解决实际问题。

同时,提高编程能力,加深对数值分析理论知识的理解。

二、实验环境1. 操作系统:Windows 102. 编程语言:MATLAB3. 实验工具:MATLAB数值分析工具箱三、实验内容1. 二分法求方程根二分法是一种常用的求方程根的方法,适用于连续函数。

其基本思想是:从区间[a, b]中选取中点c,判断f(c)的符号,若f(c)与f(a)同号,则新的区间为[a, c],否则为[c, b]。

重复此过程,直至满足精度要求。

2. 牛顿法求方程根牛顿法是一种迭代法,适用于可导函数。

其基本思想是:利用函数在某点的导数值,求出函数在该点的切线方程,切线与x轴的交点即为方程的近似根。

3. 不动点迭代法求方程根不动点迭代法是一种迭代法,适用于具有不动点的函数。

其基本思想是:从初始值x0开始,不断迭代函数g(x)的值,直至满足精度要求。

4. 弦截法求方程根弦截法是一种线性近似方法,适用于可导函数。

其基本思想是:利用两点间的直线近似代替曲线,求出直线与x轴的交点作为方程的近似根。

四、实验步骤1. 二分法求方程根(1)编写二分法函数:function [root, error] = bisection(a, b, tol)(2)输入初始区间[a, b]和精度要求tol(3)调用函数计算根:[root, error] = bisection(a, b, tol)2. 牛顿法求方程根(1)编写牛顿法函数:function [root, error] = newton(f, df, x0, tol)(2)输入函数f、导数df、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = newton(f, df, x0, tol)3. 不动点迭代法求方程根(1)编写不动点迭代法函数:function [root, error] = fixed_point(g, x0, tol)(2)输入函数g、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = fixed_point(g, x0, tol)4. 弦截法求方程根(1)编写弦截法函数:function [root, error] = secant(f, x0, x1, tol)(2)输入函数f、初始值x0和x1,以及精度要求tol(3)调用函数计算根:[root, error] = secant(f, x0, x1, tol)五、实验结果与分析1. 二分法求方程根以方程f(x) = x^2 - 2 = 0为例,输入初始区间[a, b]为[1, 3],精度要求tol 为1e-6。

贵州大学数值分析上机实验答案

贵州大学数值分析上机实验答案

数值分析上机实验报告课程名称:数值分析上机实验学院:机械工程学院专业:机械制造姓名:******* 学号:********** 年级:12级任课教师:***老师2012年12月30日一.已知A 与b12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823 -3.125432 -1.012345 2.189736 1.563849-0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.1135842.189736 2.031454 4.10101119.8979180.431637-3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.10345814.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124-1.010103-0.0375851.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -25.173417 0.84671695 1.784317 -86.612343 1.11012304.719345 -5.6784392]T B ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。

贵大研究生数值分析上机

贵大研究生数值分析上机

20 年月日实验标准题已知如下数据:且端点约束条件为f’(-1)=5,f’(3.50)=29.16,用三次样条插值的三弯矩法求f (-0.02)和f (2.56)。

一、理论依据:三次样条函数点a=X 0<X 1<X 2<...<X n-1<X n =b 将区间[a,b]分成n 个小区间,若函数S(x)满足:(1)在每个子区间[x i ,x i+1](i=0,1,2,3,n-1)上S(x)是三次多项式 (2) S(x)∈C 2[a,b]则称S(x)是区间[a,b]上的三次样条函数。

求f(x)在[a,b]上的三次样条函数,可设S(x)=a i x 3+b i x 2+c i x+d i ,x ∈[x i ,X i+1](i=0,1,2,...n-1)其中,a i ,b i ,C i ,d;为待定常数。

二、操作原理:依据给定的x 、f (x )数据点计算下面各项的值:()()[]()11111i 111i ,,6,,6)1,,2,1(1+--+++++=-+=-⋅⋅⋅=+=-=+=i i i i i i i ii ii i i i ii ix x x f x x f x x f h h d n i h h h h h h μλμ()()⎥⎦⎤⎢⎣⎡-'=⎥⎦⎤⎢⎣⎡'-=-n n n nx x f f h d f x x f h d ,6,61n 01010⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡----n n n d d d M M M M 1n 101n 1011n 11d 212212λμλμ三弯矩方程组可以统一写成AM=d 的形式,系数矩阵A 为三对角矩阵,可以使用追赶法求解M 。

将所求的M 带入下面的式子计算出三次样条插值函数:121111121131131i )6()6(6)(6)()(+++++++++++--+--+-+-=i i i i j i i i i i i i i i i h x x h M f h x x h M f h x x M h x x M x S 三、实验代码: 主函数:b=[-1. -0.54 0.13 1.12 1.89 2.06 2.54 2.82 3.5;-2.46 -5.26 -1.87 0.05 1.65 2.69 4.56 7.89 10.31]; fa=5;fb=29.16; c=[-0.02;2.54]; [sx] = scyt(b,fa,fb,c) 调用函数:LU 求解三对角方程: function [z]=lux(a,b)% lux 追赶法求解三对角函数% a 系数矩阵 b 列向量,z 为求解结果 [l,u]=lu(a); [n,~]=size(b); z=zeros(n,1);z(1)=b(1); for i=2:nz(i)=b(i)-l(i,i -1)*z(i -1); endz(n)=z(n)/u(n,n);for j=(n -1):-1:1 %计算x 值 z(j)=(z(j)-u(j,j+1)*z(j+1))/u(j,j); end end三次样条函数插值函数: function [sx] = scyt(b,fa,fb,c)% scyt三次样条函数插值% b已知数据2*1 fa为下端约束条件fb为上端约束条件c为需要计算的列% sx为计算出的某点插值函数值b=b';[f,y]=size(b);for i=2:f-1b(i,y+1)=b(i,1)-b(i-1,1); %h1b(i+1,y+1)=b(i+1,1)-b(i,1); %h2b(i,y+2)=b(i,y+1)/(b(i,y+1)+b(i+1,y+1)); %计算出μb(i,y+3)=6*((b(i+1,2)-b(i,2))/b(i+1,y+1)-(b(i,2)-b(i-1,2))/b(i,y+1))/(b(i,y+1)+b(i+1,y+1)); %计算出dend[f,y]=size(b);b(1,y)=6/b(2,3)*((b(2,2)-b(1,2))/b(2,3)-fa); %补齐d0,dnb(f,y)=6/b(f,3)*(fb-(b(f,2)-b(f-1,2))/b(f,3));a=2*eye(f);a(1,2)=1;a(f,f-1)=1;s=1; %系数矩阵建立afor j=2:f-1a(j,s)=b(j,4);a(j,s+2)=1-b(j,4);s=s+1;endd=b(:,y); %非齐次项常数项dm=lux(a,d); %求解待定常数m弯矩值[t,~]=size(c);st=0;for g=1:t %判断计算数字所用方程式并计算for h=1:fif c(g,1)>b(h,1)st=st+1;endendif st==fst=st-1;endif st==0st=1;endk=st+1;x=c(g,1);st=0;x1=b(k-1,1);x2=b(k,1);h=b(k,3);m1=m(k-1,1);m2=m(k,1);f1=b(k-1,2);f2=b(k,2);sx(g,1)=(m1*(x2-x)^3+m2*(x-x1)^3)/(6*h)+(f1-m1*h^2/6)*(x2-x)/h+(f2-m2*h^2/6)*( x-x1)/h;endend四、求解结果:sx =[-3.1058;4.7834]所以求f(-0.02)=-3.1058、f(2.56)=4.7834用Romberg 算法求以下积分,允许误差eps=0.00001,()dx x x x x 24.131sin 753+⎰。

数值分析上机实验报告一

数值分析上机实验报告一

实验报告一题目: 数值运算中误差分析的方法与原则摘要:在我们的日常生活与学习中,很多具体问题抽象成数学模型都可以解决,而求解这些数学模型就要用到数值分析,本实验讨论的是数值分析中的误差。

前言:(目的和意义)掌握误差来源,会对误差进行分析,了解简化计算步骤的基本原理和应用。

数学原理:误差会随着计算步骤的增加而积累,计算步骤越多,误差越大。

为了减小数值计算结果的误差,应该尽量减少计算步骤,并对误差做好分析与处理。

程序设计一:(1)计算110n x n I e x e dx -=⎰ (0,1,...)n =并估计误差。

本实验采用Matlab 的M 文件编写,程序如下:I=1-exp(-1);n=input('请输入n 的值');format longfor N=1:nI=1-n*I;endI当n=17时,I= -4.769577843020550e+020程序设计二:(2)计算多项式11110()...n n n n n P x a x a xa x a --=++++( 03a = 123k k a a -=+)并计算100(0.5)P 与150(13)P 的值本实验采用Matlab 的M 文件编写,程序如下:n=input('请出入n 的值');x=input('请出入x 的值');a=3;p=3;for i=1:na=2*a+3;b=x^i;p=p+a*b;endp计算结果:150(13)P = 1.099478611479765e+213100(0.5)P =600结果分析和讨论:(1) 计算时,要防止大数“吃”掉小数(2) 要避免除数绝对值远远小于被除数绝对值;(3) 要避免两相近数相减;(4) 注意简化计算步骤,减少运算次数。

同样一个计算问题,若能减少运算次数,不但可以节省计算时间,还能减小舍入误差。

例如上述第二题,如果要直接计算n n a x 的值再逐项相加,那么一共要做(1)(1) (212)n n n n ++-+++=次乘法和n 次加法。

数值分析实验报告(0001)

数值分析实验报告(0001)

数值分析实验报告数值分析实验报告计1310 陈万全学号:132852实验一一.实验内容:用两种不同的顺序计算644834.11000012≈∑=-nn,分析其误差的变化。

二.实验目的:1. 通过上机编程,复习巩固以前所学程序设计语言;2. 通过上机计算,了解舍入误差所引起的数值不稳定性。

3. 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。

三.算法描述取float类型数据从大到和从小到大的累加。

然后输入结果四.源程序:/*********** 实验一********/#include <iostream>using namespace std;float shunxi(){float sum=0;for(int i=1;i<10001;i++){sum=sum+1.0/float(i*i);}return sum;}float daoxu(){float sum=0;for(int i=10000;i>0;i--){sum=sum+1.0/float(i*i);}return sum;}int main(){cout.precision(10);cout<<"第一个顺序方法的值:"<<shunxi()<<endl;cout<<"第二个倒序方法的值:"<<daoxu()<<endl;return 0;}五、程序结果六.实验体会这个程序还是比较简单的,仅仅需要一个循环就可以完成,只要细心就不会有错。

从这个实验里我也看到了计算机毕竟不是万能的,由于机器字长的问题对于一些特殊的计算会出错——即大数吃小数这样的计算,这样会让人们在日常的生产生活中产生一些意想不到的问题。

不过只要稍微对计算方法做一下改动就可以改正这种错误——改变算术的顺序。

至于从哪个方向计算更好,那就要具体问题具体分析了.对于程序上的解决了,cout输出的小数保留的位数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、用Newton法求方程:x7-28x4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001.)程序编写:#include <stdio.h>#include <math.h>main(){double x0,x1,y,y0,y1;printf("x0=");scanf("%lf",&x0);do{y0=pow(x0,7)-28*pow(x0,4)+14;y1=7*pow(x0,6)-112*pow(x0,3);x1=x0-y0/y1;y=fabs(x1-x0);x0=x1;}while(y>=0.00001);printf("x=%lf\n",x1);}二、已知函数值如下表:#include<stdio.h>#include<math.h>#define N 9void main(){double x[N+1]={1,2,3,4,5,6,7,8,9,10},y[N+1]={0,0.69314718,1.0986123,1.3862944,1.6094378,1.7917595,1.9459101,2.079445,2.1 972246,2.3025851},h[N+1],d[N+1],a[N+1],c[N+1],b[N+1]={2,2,2,2,2,2,2,2,2,2},s[N+1],t[N+1],l[N+1],M[N+1],f,f1;int i;for(i=1;i<=N;i++)h[i-1]=x[i]-x[i-1];d[0]=6/h[0]*((y[1]-y[0])/h[0]-1);d[N]=6/h[N-1]*(0.1-(y[N]-y[N-1])/h[N-1]);for(i=1;i<=N-1;i++){d[i]=6/(h[i-1]+h[i])*((y[i+1]-y[i])/h[i]-(y[i]-y[i-1])/h[i-1]);a[i]=h[i-1]/(h[i-1]+h[i]);c[i]=1-a[i];}c[0]=1;a[N]=1;s[0]=b[0];t[0]=d[0];for(i=0;i<=N-1;i++){l[i+1]=a[i+1]/s[i];s[i+1]=b[i+1]-l[i+1]*c[i];t[i+1]=d[i+1]-l[i+1]*t[i];}M[N]=t[N]/s[N];for(i=N-1;i>=0;i--)M[i]=(t[i]-c[i]*M[i+1])/s[i];f=M[3]*pow((x[4]-4.563),3)/6/h[3]+M[4]*pow((4.563-x[3]),3)/6/h[3]+(y[3]-M[3]*h[3]*h[3]/6)*(x[4]-4.563)/h[3]+(y[4]-M[4]*h[3]*h[3]/6)*(4.563-x[3])/h[3];f1=-3*M[3]*pow((x[4]-4.563),2)/6/h[3]+3*M[4]*pow((4.563-x[3]),2)/6/h[3]-(y[3]-M[3]*h[3]*h[3]/6)/h[3]+(y[4]-M[4]*h[3]*h[3]/6)/h[3];printf("f(4.563)=%lf f'(4.563)=%lf\n",f,f1); }三,用Romberg算法求3 1.4213(57)sinx x x x dx+⎰(允许误差ε=0.000 01)。

程序:#include<stdio.h>#include<math.h>float f(float x){float f=0.0;f=pow(3.0,x)*pow(x,1.4)*(5*x+7)*sin(x*x);return (f);}main(){int i=1,j,k,n=12;float T[12],a=1.0,b=3.0,s=0.0; T[0]=0.5*(b-a)*(f(a)+f(b)); for(j=1;j<n-1;j++) { for(k=1;k<=pow(2,j-1);k++)s+=f(a+(2*k-1)*(b-a)/pow(2,j));T[j]=0.5*(T[j-1]+(b-a)*s/pow(2,j-1)); s=0.0;}T[11]=(4*T[1]-T[0])/(float)3;for(;fabs(T[11]-T[0])>0.00001;i++) { T[0]=T[11];for(j=1;j<n-1-i;j++) T[j]=(pow(4,i)*T[j+1]-T[j])/(pow(4,i)-1); T[11]=(pow(4,i+1)*T[1]-T[0])/(pow(4,i+1)-1); }printf("%f\n",T[11]);}4. 用定步长四阶Runge-Kutta 求解⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧===--===0)0(0)0(0)0(10010001000//1/321323321y y y y y dt dy ydt dy dt dy h =0.0005,打印y i (0.025) , y i (0.045) , y i (0.085) , y i (0.1) ,(i =1,2,3)#include <stdio.h>#include <math.h>double F(double x,double y[4],double f[4]){f[1]=0*x+0*y[1]+0*y[2]+0*y[3]+1;f[2]=0*x+0*y[1]+0*y[2]+1*y[3]+0;f[3]=0*x+0*y[1]-1000*y[2]-100*y[3]+1000;return(1);}void main(){double F(double x,double y[4],double f[4]);double h=0.0005,x=0,Y[4],k[5][4],s[4],f[4],det,m[4]={0.025,0.045,0.085,0.1};int i,j,t;for(t=0;t<=3;t++) /*龙格—库塔算法*/ {for(j=0;j<=3;j++)Y[j]=0; //每求一组值后将初值条件还原为0 for(i=1;i<=int(m[t]/h);i++){for(j=1;j<=3;j++)s[j]=Y[j];det=F(x,s,f);for(j=1;j<=3;j++)k[1][j]=h*f[j]; /*四阶古典公式中的k值和求和的计算*/ for(j=1;j<=3;j++)s[j]=Y[j]+0.5*k[1][j];det=F(x+0.5*h,s,f);for(j=1;j<=3;j++)k[2][j]=h*f[j];for(j=1;j<=3;j++)s[j]=Y[j]+0.5*k[2][j];det=F(x+0.5*h,s,f);for(j=1;j<=3;j++)k[3][j]=h*f[j];for(j=1;j<=3;j++)s[j]=Y[j]+k[3][j];det=F(x+h,s,f);for(j=1;j<=3;j++)k[4][j]=h*f[j];for(j=1;j<=3;j++)Y[j]=Y[j]+(k[1][j]+2*k[2][j]+2*k[3][j]+k[4][j])/6;x+=h;}for(j=1;j<=3;j++)printf("y[%d](%f)=%f ",j,m[t],Y[j]);printf("\n");}}5.⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=40.00001 4.446782 2.213474- 0.238417 1.784317 0.037585- 1.010103- 3.123124 2.031743- 4.446782 30.719334 3.123789 1.103456- 2.121314 0.71828- 0.336993 1.112348 3.067813 2.213474- 3.123789 14.7138465 0.103458- 3.111223- 2.101023 1.056781- 0.784165- 1.7423820.238417 1.103456- 0.103458- 9.789365 0.431637 3.741856- 1.836742 1.563849 0.718719 1.7843172.1213143.111223- 0.431637 19.8979184.101011 2.031454 2.189736 0.113584-0.037585- 0.71828- 2.101023 3.741856- 4.101011 27.108437 3.123848 1.012345- 1.112336 1.010103- 0.336993 1.056781- 1.836742 2.031454 3.123848 15.567914 3.125432- 1.061074- 3.123124 1.112348 0.784165- 1.563849 2.189736 1.012345- 3.125432- 19.141823 2.115237 2.031743- 3.067813 1.742382 0.718719 0.113584- 1.112336 1.061074- 2.115237 12.38412A Tb )5.6784392- 4.719345 1.1101230 86.612343- 1.784317 0.84671695 25.173417- 33.992318 2.1874369(= 用列主元消去法求解Ax=b 。

#include "math.h" #include "stdio.h" void main() { double u[9],x1[9],y[9],q[9],b1[9][10],x[9],a[9][9]={{12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743},{2.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-0.784165,1.112348,3.123124},{-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-1.010103}, {1.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-0.037585}, {-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.784317}, {0.718719,1.563849,1.836742,-3.741856,0.431637,9.789365,-0.103458,-1.103456,0.238417}, {1.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.713846,3.123789,-2.213474}, {3.067813,1.112348,0.336993,-0.71828,2.121314,-1.103456,3.123789,30.719334,4.446782},{-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-2.213474,4.446782,40.00001}};int sign(double x);double k,t,s,w,e,c,z;int i,j,n,r;doubleb[9]={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345,-5.6784392};for(r=0;r<=6;r++) /*Household 变换*/{e=0.0;for(i=r+1;i<=8;i++)e=e+a[i][r]*a[i][r];s=sqrt(e);t=s*s+fabs(a[r+1][r])*s;for(i=0;i<=r;i++) u[i]=0;c=a[r+1][r]; /*求u[i]的值*/u[r+1]=a[r+1][r]+s*sign(c);for(i=r+2;i<=8;i++)u[i]=a[i][r];for(i=0;i<=8;i++){y[i]=0;for(j=0;j<=8;j++)y[i]+=a[i][j]*u[j]/t;} /*求出y向量*/ k=0;for(i=0;i<9;++i)k+=0.5*(u[i]*y[i])/t;for(i=0;i<=8;i++)q[i]=y[i]-k*u[i];for(i=0;i<=8;i++)for(j=0;j<=8;j++)a[i][j]=a[i][j]-(q[j]*u[i]+u[j]*q[i]);} /*求结果*/printf("Household变换:\n");for(i=0;i<9;++i)for(j=0;j<9;++j) /*打印转化后的矩阵*/ {if (j%9==0)printf("\n");printf("%-9.5f",a[i][j]);}printf("\n");printf("超松弛变量法得解:\n");w=1.4; /*超松弛法*/for(i=0;i<9;i++)x1[i]=0;for(i=0;i<9;i++)for(j=0;j<9;j++){if(i==j)b1[i][j]=0;else b1[i][j]=-a[i][j]/a[i][i];} /*求出矩阵b1[9][9]和b1[i][9]的值*/ for(i=0;i<9;i++)b1[i][9]=b[i]/a[i][i];for(n=0;n<9;n++)for(i=0;i<9;i++){z=0;for(j=0;j<9;j++)z=z+b1[i][j]*x1[j]; /*执行本算法*/z=z+b1[i][9];x1[i]=x1[i]*(1-w)+w*z;}for(i=0;i<9;i++){if (i==5)printf("\n");printf("x%d=%-10.6f",i,x1[i]);}printf("\n");printf("列主元消去法得解:\n");u[0]=a[0][0]; /*以下是消去法*/y[0]=b[0];for(i=1;i<9;i++){q[i]=a[i][i-1]/u[i-1];u[i]=a[i][i]-q[i]*a[i-1][i];y[i]=b[i]-q[i]*y[i-1];}x[8]=y[8]/u[8]; /*执行本算法*/for(i=7;i>=0;i--)x[i]=(y[i]-a[i][i+1]*x[i+1])/u[i]; /*求出x的值*/ for(i=0;i<9;i++){if (i==5)printf("\n");printf(" x%d=%-10.6f",i,x[i]);}printf("\n");}int sign(double x){int z;z=(x>=(1e-6)?1:-1);return(z);}。

相关文档
最新文档