《数值分析》课程设计

《数值分析》课程设计
《数值分析》课程设计

问题的提出

3.3 用SOR 方法解下列方程组(去松弛因子w=1.2),要求14||||10k k X X +-∞-<。 1214

2145x x x x +=??

-=? 3.4 设 411011A ??= ???

计算()cond A ∞。

3.5 用选列主元Gauss 消元法求解方程组

1231231

2334721320x x x x x x x x x -+=??-+-=-??-+=?

3.6 用追赶法解三对角方程组

12345210001121000012100001210000120x x x x x -?????? ? ? ?-- ? ? ?

? ? ?=-- ? ? ?-- ? ? ? ? ? ?-????

?? 3.7 用三角分解法解方程组

123248541816862207x x x -?????? ??? ?--= ??? ? ??? ?--??????

3.8 用选主元消元法计算下列行列式

126

324951

一、问题分析

1. 超松弛法是迭代方法的一种加速方法,其计算公式简单,但需要选择合适的松弛因子,以保

证迭代过程有较快的收敛速度。

2. A 的条件数计算首先要获得A 的逆,而求A 的逆可以转化为求n 个方程组。

3. 完全主元消元法在计算过程中花费了大量的时间用于寻找主元。同时,各变量的位置在消元

过程中也可能会发生变化。而列选主元法则可消除这个弊病。

4. 追赶法主要是解三对角方程组。所谓追指消元过程,赶指回代过程。

5. Gauss 消元法是通过逐步消元过程,将方程组的系数矩阵A 转变为一个上三角矩阵。三角分

解法,就是把系数矩阵分解为两个三角阵。

6.将某一向量坐标同乘以某非零实数,加到另一向量上,行列式的值不变。用选主元法将行列

式矩阵变为三角阵,对角线上的数值相乘即为行列式的值。

二、编程解决

3.3Sor法c语言编程:

#include

#include

#include

#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

for(j=0;j

scanf("%lf",&a[i][j]);

printf("请输入B矩阵\n");

for(i=0;i

scanf("%lf",&b[i]);

printf("count\t");

for(i=0;i

printf("x[%d]\t\t",i);

printf("收敛程度\n");

do

{

for(i=0;i

x[i]=y[i];

for(i=0;i

{

t=0;

for(j=0;j

t=t+a[i][j]*(j

y[i]=x[i]+omega*(b[i]-t)/a[i][i];

printf("%d",cnt++);

for(i=0;i

printf("\t%lf",x[i]);

f=0;

for(i=0;i

f+=fabs(y[i]-x[i]);

printf("\t%g\n",f);

}while(f>1e-4 && cnt<100);

}

所得结果:

3.4 求逆、算条件数编程:

#include

#include

#include

#define N 5 //可修改,以改变可解决的最大维数。但会浪费更多的空间double a[N][N],b[N][N],c[N][N];

void input()

{

int i,j;

do

{

printf("阶数:");

scanf("%d",&n);

if(n>N || n<=0) //宏定义中N规定了数组的最大维数,超过则出错printf("溢出,请重新输入!\n");

}while(n>N || n<=0);

printf("请输入%d阶的A矩阵\n",n);

for(i=0;i

for(j=0;j

{

if(i==j)

b[i][j]=1;

else

b[i][j]=0;

scanf("%lf",&a[i][j]);

c[i][j]=a[i][j];

}

}

void watch()

{

int i,j;

for(i=0;i

{

for(j=0;j

printf("%4.2lf\t",a[i][j]);

for(j=0;j

printf("%4.2lf\t",b[i][j]);

printf("\n");

}

system("pause");

}

void swap(double *p,double *q)

{

double tmp;

tmp=*p;

*p=*q;

}

void swap_x(int s,int t) //S<==>T

{

int j;

for(j=0;j

{

swap(&a[s][j],&a[t][j]);

swap(&b[s][j],&b[t][j]);

}

}

void self_x(int i,double s) //I=I/s

{

int j;

for(j=0;j

{

a[i][j]=a[i][j]/s;

b[i][j]=b[i][j]/s;

}

}

void inter_x(int i,int r,double t) //I=I-R*t

{

int j;

for(j=0;j

{

a[i][j]=a[i][j]-a[r][j]*t;

b[i][j]=b[i][j]-b[r][j]*t;

}

}

void sort(int k)

{

int i,maxi=k;

double max;

max=fabs(a[k][k]); //进入循环前先假定首数最大for(i=k;imax)

{

maxi=i;

max=fabs(a[i][k]);

}

/*将最大的一个数放到首数位置*/

if(maxi!=k)

swap_x(maxi,k);

}

void inv()

{

int i,k;

for(k=0;k

{

sort(k); //消元之前先排序

if(a[k][k]==0)

{

flag=0;

return;

}

self_x(k,a[k][k]);

for(i=k+1;i

inter_x(i,k,a[i][k]);

watch();

}

for(k=n-1;k>0;k--) //向上消元过程

{

for(i=0;i

inter_x(i,k,a[i][k]);

watch();

}

}

void output()

{

int i,j;

if(flag)

{

printf("A的逆矩阵如下:\n");

for(i=0;i

{

for(j=0;j

printf("%4.2lf\t",b[i][j]);

printf("\n");

}

}

else

printf("A矩阵不可逆\n");

}

double cond() //求条件数

{

double u[N],v[N],t,max1,max2;

int i,j;

for(i=0;i

{

t=0;

for(j=0;j

{

t+=fabs(b[i][j]);

}

u[i]=t;

}

for(i=0;i

{

t=0;

for(j=0;j

{

t+=fabs(c[i][j]);

}

v[i]=t;

}

max1=u[0];

max2=v[0];

for(i=0;i

{

if(u[i]>max1)

max1=u[i];

if(v[i]>max2)

max2=v[i];

}

return(max1*max2);

}

void main()

{ double cond();

input();

inv(); //求逆矩阵

output();

printf("the cond is:%lf",cond()); //求条件数printf("\n");

}

输出结果:

3.5 选列主元gauss消元法编程:#include

#include

#include

#define N 5

double a[N][N];

double b[N],x[N];

int n,flag=1;

void input()

{

int i,j;

do

{

printf("阶数:");

scanf("%d",&n);

if(n>N)

printf("溢出,请重新输入!\n");

}while(n>N);

printf("请输入%d阶的A矩阵\n",n);

for(i=0;i

for(j=0;j

scanf("%lf",&a[i][j]);

printf("请输入B矩阵\n");

for(i=0;i

scanf("%lf",&b[i]);

}

void swap(double *p,double *q)

{

double tmp;

tmp=*p;

*p=*q;

*q=tmp;

}

void swap_x(int s,int t)

{

int i;

for (i=t;i

swap(&a[s][i],&a[t][i]);

swap(&b[s],&b[t]);

}

void sort(int k)

{

int i,maxi=k;

double max;

max=fabs(a[k][k]); //进入循环前先假定首数最大for(i=k;i

if(fabs(a[i][k])>max)

{

maxi=i;

max=fabs(a[i][k]);

}

/*将最大的一个数放到首数位置*/

if(maxi!=k)

swap_x(maxi,k);

}

void gauss()

{

int i,j,k;

double t;

for(k=0;k

{

sort(k); //消元之前先排序

if(a[k][k]==0) //若发现排序后首数为0,终止!

{

flag=0;

break;

}

for(i=k+1;i

{

t=a[i][k]/a[k][k];

a[i][k]=0;

for(j=k+1;j

a[i][j]=a[i][j]-a[k][j]*t;

b[i]=b[i]-b[k]*t;

}

for(i=0;i

{

for(j=0;j

printf("%6.3lf\t",a[i][j]);

printf("%6.3lf\n",b[i]);

}

system("pause");

}

if(a[k][k]==0) //回代之前发现系数为0,终止!

flag=0;

else

{

x[n-1]=b[n-1]/a[n-1][n-1]; //回代

for(i=n-2;i>=0;i--)

{

t=0;

for(j=i+1;j

t+=a[i][j]*x[j];

x[i]=(b[i]-t)/a[i][i];

}

}

}

void output()

{

int i;

if(flag)

for(i=0;i

printf("x[%d]=%6.3lf\t",i+1,x[i]);

else

printf("消元过程被强行终止!");

printf("\n");

}

void main()

{

input();

gauss();

output();

}

输出结果:

3.6追赶法编程:

#include

#include

#define N 5

int n;

double a[N],b[N],c[N],d[N],u[N],q[N],x[N];

void input()

{

int i;

do

{

printf("阶数:");

scanf("%d",&n);

if(n>N)

printf("溢出,请重新输入!\n");

}while(n>N);

printf("a=");

for(i=1;i

scanf("%lf",&a[i]);

printf("b=");

for(i=0;i

scanf("%lf",&b[i]);

printf("c=");

for(i=0;i

scanf("%lf",&c[i]);

printf("d=");

for(i=0;i

scanf("%lf",&d[i]);

}

void chase()

{

int i,j;

//变换成上三角矩阵

u[0]=c[0]/b[0];

q[0]=d[0]/b[0];

for(i=1;i

{

u[i]=c[i]/(b[i]-u[i-1]*a[i]);

q[i]=(d[i]-q[i-1]*a[i])/(b[i]-u[i-1]*a[i]);

}

for(i=0;i

for(j=0;j

{

if(ji+1)

printf("0\t");

else if(i==j)

printf("1\t");

else

printf("%4.2lf\t",u[i]);

}

printf("%lf\n",q[i]);

}

//回代过程

x[n-1]=q[n-1];

for(i=n-2;i>=0;i--)

x[i]=q[i]-u[i]*x[i+1];

}

void output()

{

int i;

for(i=0;i

printf("x[%d]=%6.3lf\t",i,x[i]); }

void main()

{

input();

chase();

output();

}

输出结果:

3.7三角分解法解方程组

程序:

#include

#include

#define N 6 //定义一个维数N,以应用于6维以下double a[N][N],b[N],X[N],Y[N],u[N][N],v[N][N],c[N][N];

int n;

void input() //输入a系数矩阵,b常数矩阵

{

int i,j;

printf("please input the dimension(less than 7):\n"); //输入维数scanf("%d",&n);

printf("please input the matrix a[n][n]:\n");

for(i=0;i

for(j=0;j

scanf("%lf",&a[i][j]);

printf("please input the matrix b[n]:\n");

for(i=0;i

scanf("%lf",&b[i]);

}

void solveUandV() //求解u和v三角矩阵

{

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

{

temp1+=u[j][k]*v[k][i];

}

u[j][i]=a[j][i]-temp1;

temp2=0;

for(k=i+1;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

{

for(j=0;j

printf("%lf\t",u[i][j]);

printf("\n");

}

printf("下三角v:\n");

for(i=0;i

{

for(j=0;j

printf("%lf\t",v[i][j]);

printf("\n");

}

}

void substituting() //回代

{

int i,j;

double temp1,temp2;

printf("the 中间解Y is:\n");

for(i=n-1;i>=0;i--) //回代求出Y矩阵的值

{

temp1=0;

for(j=i+1;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

temp2=0;

for(j=0;j

{

temp2+=X[j]*v[i][j];

}

X[i]=Y[i]-temp2;

}

}

void verification() //验证拆分的正确性

{

int i,j,k;

double t;

for(i=0;i

{

for(j=0;j

{

t=0;

for(k=0;k

t+=u[i][k]*v[k][j];

c[i][j]=t;

}

}

printf("the 验证的a1 is:\n"); //输出验证得到的矩阵for(i=0;i

{

for(j=0;j

printf("%lf\t",c[i][j]);

printf("\n");

}

}

void output() //输出解x

{

int i;

printf("the value of these equations is:\n");

for(i=0;i

printf("x[%d]= %lf\n",i,X[i]);

}

void main()

{

input(); //输入

solveUandV(); //拆分a为u、v上三角和下三角矩阵

substituting(); //回代求出y(中间解)和x

verification(); //验证拆分的正确性

output(); //输出解

}

结果:

3.8选主元消元法编程:

#include

#include

#include

#define N 5 //可修改,以改变可解决的最大维数。但会浪费更多的空间double a[N][N];

int n,flag=1;

void input()

{

int i,j;

do

{

printf("阶数:");

scanf("%d",&n);

if(n>N) //宏定义中N规定了数组的最大维数,超过则出错printf("溢出,请重新输入!\n");

}while(n>N);

printf("请输入%d阶的A矩阵\n",n);

for(i=0;i

for(j=0;j

scanf("%lf",&a[i][j]);

}

void swap(double *p,double *q)

{

double tmp;

tmp=*p;

*p=*q;

*q=tmp;

}

void swap_x(int s,int t)

{

int i;

for (i=t;i

swap(&a[s][i],&a[t][i]);

}

void swap_y(int s,int t)

{

int i,tmp;

for(i=0;i

swap(&a[i][s],&a[i][t]);

}

void sort(int k)

{

int i,j,maxi=k,maxj=k;

double max;

max=fabs(a[k][k]); //进入循环前先假定首数最大for(i=k;i

for(j=k;j

if(fabs(a[i][j])>max)

{

maxi=i;

maxj=j;

max=fabs(a[i][j]);

}

/*将最大的一个数放到首数位置*/

if(maxi!=k)

swap_x(maxi,k);

if(maxj!=k)

swap_y(maxj,k);

}

void gauss()

{

int i,j,k;

double t;

for(k=0;k

{

sort(k); //消元之前先排序

if(a[k][k]==0) //若发现排序后首数为0,终止!

{

flag=0;

break;

}

for(i=k+1;i

{

t=a[i][k]/a[k][k];

a[i][k]=0;

for(j=k+1;j

a[i][j]=a[i][j]-a[k][j]*t;

}

for(i=0;i

{

for(j=0;j

printf("%6.3lf\t",a[i][j]);

printf("\n");

}

system("pause");

}

}

void determinant() //求行列式

{

double t=1.0;

int i;

for(i=0;i

{

t=t*a[i][i];

printf("%lf\t",t);

}

printf("the determinant is:\n%lf",t);

}

void main()

{

input();

gauss();

determinant();

}

输出结果:

三、总结

程序编的太长如果把思路全部写出来,时间花的太多,因此具体总结在此就不写了。

数值分析典型习题

特别声明:考试时需带计 算器作辅助计算 1.2015x *=是经四舍五入得到的近似值,则其相对误差* r e ≤-31 104 ?. 2. 01(),(), ,()n l x l x l x 是以01,, ,n x x x 为节点的拉格朗日插值基函数,则 3.设(0)1(1)3(2)4(3)2f =,f =,f =,f =,[0123]f =,,,1 3 - . 4. 利用Simpson 公式求?2 1 2dx x = 7.3 5. 设求积公式1 0()d (),(1)n k k k f x x A f x n ≈≥∑?=是Gauss 型求积公式,则3 n k k k A x == ∑1 .4 6. 数值微分公式(2)(2) ()i i i f x h f x h f x h +≈ --'的截断误差为 2().O h 7. 设1101A ?? = ??? ,则A 的谱半径()A ρ= 1 ,A 的条件数1cond ()A = 4. 8. 用牛顿下山法求解方程3 03 x x -=根的迭代公式是 2 13 3(1),3n n n n x x x x x λ+-=-- 下山条件是 1()().n n f x f x +< 9.对任意初始向量(0)x 及任意向量f ,线性方程组的迭代公式(1)()(0,1,2,)k k k +=+=x Bx f ,迭代序列()k x 收敛于方程组的精确解x *的充分必要条件是()1.ρ

2020年数值分析模拟试卷(三)

数值分析模拟试卷(三)班级学号姓名一、填空题(共2分,每题2分) 1、设x*=3149578…,取5位有效数字,则所得的近似值x=_______________ ; . 2、设一阶差商,,则二阶差商__________ ; 3、数值微分中,已知等距节点的函数值,则由三点的求导公式,有_______________ ; 4、求方程的近似根,用迭代公式,取初始值,那么x1=_________ ; 5、解初始值问题近似解的梯形公式是yk+1=_________ ; 6、,则A的谱半径______ ,cond (A)=______ ; 7、设,则______ , ______ ; 8、若线性代数方程组AX=b 的系数矩阵A为严格对角占优阵,则雅可比迭代和高斯-塞德尔迭代都_______ ; 9、解常微分方程初值问题的欧拉(Euler)方法的局部截断误差为_____ 1、设,当____________时,必有分解式A=LLT,其中L为下三角阵.二、计算题(共6分,每题15分) 1、(1)设试求f(x)在上的三次Hermite插值多项式使满足; (2)写出余项的表达式. 2、已知,满足,试问如何利用构造一个收敛的简单迭代函数,使…收敛? 3、试确定常数A,B,C和a,使得数值积分公式有尽可能高的代数精度.所得的数值积分公式代数精度是多少?是否为Gauss型的? 4、推导常微分方程的初值问题的数值解公式 三、证明题(共2分,每题1分) 1、设,(1)写出解 f(x)=的Newton迭代格式; (2)证明此迭代格式是线性收敛的. 2、设R=I-CA,如果,证明 (1)A、C都是非奇异的矩阵; (2)

数值分析课程设计

淮海工学院计算机工程学院课程设计报告书 课程名:《数值分析》 题目:数值分析课程设计 班级: 学号: 姓名:

数值分析课程设计 课程设计要求 1、研究第一导丝盘速度y与电流周波x的关系。 2、数据拟合问题运用样条差值方法求出温度变化的拟合曲线。 课程设计目的 1、通过编程加深对三次样条插值及曲线拟合的最小二乘法的理解; 2、学习用计算机解决工程问题,主要包括数据处理与分析。 课程设计环境 visual C++ 6.0 课程设计内容 课程设计题目1: 合成纤维抽丝工段中第一导丝盘的速度对丝的质量有很大的影响,第一丝盘的速度和电流周波有重要关系。下面是一组实例数据: 其中x代表电流周波,y代表第一导丝盘的速度 课程设计题目3: 在天气预报网站上获得你家乡所在城市当天24小时温度变化的数据,认真观察分析其变化趋势,在此基础上运用样条差值方法求出温度变化的拟合曲线。然后将该函数曲线打印出来并与原来的温度变化数据形成的曲线进行比较,给出结论。写出你研究的心得体会。 课程设计步骤 1、利用最小二乘法写出题1的公式和算法; 2、利用excel表格画出数据拟合后题1的图像; 3、在Visual C++ 6.0中编写出相应的代码; 4、搜索11月12日南通当地一天的温度变化数据; 5、在Visual C++ 6.0中编写出相应的代码; 6、利用excel表格画出数据拟合后题3的图像 课程设计结果 课程设计题目1 数值拟合

解:根据所给数据,在excel窗口运行: x=[49.2 50.0 49.3 49.0 49.0 49.5 49.8 49.9 50.2 50.2] y=[16.7 17.0 16.8 16.6 16.7 16.8 16.9 17.0 17.0 17.1] 课程设计题目3 数据为:X=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]; Y=[12,12,11,12,12,12,12,12,13,15,16,17,17,18,17,17,17,16,15,15,15,15,14,14]; 源代码为: 第一题: #include #include"math.h" using namespace std; //double x[100],y[100]; int main(){ int i; double k,b; double sum1=0,sum2=0,sum3=0,sum4=0; double x[10]={49.2,50.0,49.3,49.0,49.0,49.5,49.8,49.9,50.2,50.2}; double y[10]={16.7,17.0,16.8,16.6,16.7,16.8,16.9,17.0,17.0,17.1}; for(i=0;i<10;i++){ sum1+=x[i]*y[i]; sum2+=x[i];

数值计算方法比较

有限差分方法(FDM:Finite Difference Method)是计算机数值模拟最早采用的方法,至今仍被广泛运用。该方法将求解域划分为差分网格,用有限个网格节点代替连续的求解域。有限差分法以Taylor级数展开等方法,把控制方程中的导数用网格节点上的函数值的差商代替进行离散,从而建立以网格节点上的值为未知数的代数方程组。有限差分法主要集中在依赖于时间的问题(双曲型和抛物型方程)。有限差分法方面的经典文献有Richtmeyer & Morton的《Difference Methods for Initial-Value Problems》;R. LeVeque《Finite Difference Method for Differential Equations》;《Numerical Methods for C onservation Laws》。 注:差分格式: (1)从格式的精度来划分,有一阶格式、二阶格式和高阶格式。 (2)从差分的空间形式来考虑,可分为中心格式和逆风格式。 (3)考虑时间因子的影响,差分格式还可以分为显格式、隐格式、显隐交替格式等。 目前常见的差分格式,主要是上述几种形式的组合,不同的组合构成不同的差分格式。差分方法主要适用于有结构网格,网格的步长一般根据实际地形的情况和柯朗稳定条件来决定。 构造差分的方法: 构造差分的方法有多种形式,目前主要采用的是泰勒级数展开方法。其基本的差分表达式主要有三种形式:一阶向前差分、一阶向后差分、一阶中心差分和二阶中心差分等,其中前两种格式为一阶计算精度,后两种格式为二阶计算精度。通过对时间和空间这几种不同差分格式的组合,可以组合成不同的差分计算格式。 有限差分法的不足:由于采用的是直交网格,因此较难适应区域形状的任意性,而且区分不出场函数在区域中的轻重缓急之差异,缺乏统一有效的处理自然边值条件和内边值条件的方法,难以构造高精度(指收敛阶)差分格式,除非允许差分方程联系更多的节点(这又进一步增加处理边值条件韵困难)。另外它还有编制不出通用程序的困难。 有限差分法的优点:该方法是一种直接将微分问题变为代数问题的近似数值解法,数学概念 直观,表达简单,精度可选而且在一个时间步内,对于一个给定点来说其相关的空间点只是 与该相邻的几点,而不是全部的空间点。是发展较早且比较成熟的数值方法 广义差分法(有限体积法)(GDM:Generalized Difference Method):1953年,Mac—Neal 利用积分插值法(也称积分均衡法)建立了三角网格上的差分格 式,这就是以后通称的不规划网格上的差分法.这种方法的几何误差小,特别是给出了处理自然边值条件(及内边值条件)的有效方法,堪称差分法的一大进步。1978年,李荣华利用有限元空间和对偶单元上特征函数的推广——局部Taylor展式的公项,将积分插值法改写成广义Galerkin法形式,从而将不规则网格差分法推广为广义差分法.其基本思路是,将计算区域划分为一系列不重复的控制体积,并使每个网格点周围有

数值分析典型例题

第一章典型例题 例3 ln2=0.…,精确到10-3的近似值是多少 解 精确到10-3=,即绝对误差限是=, 故至少要保留小数点后三位才可以。ln2 第二章典型例题 例1 用顺序消去法解线性方程组 ??? ??1 -=4+2+4=+2+31 -=4++2321 321321x x x x x x x x x 解 顺序消元 ?? ?? ??????---???→???????????---????→???????????--=-?+-?+-?+1717005.555.00141 25.025.105.555.001412142141231412]b A [)3()2/1()2/3(231312r r r r r r M 于是有同解方程组 ?? ? ??-==--=++17175.555.0142332321x x x x x x 回代得解 x 3=-1, x 2=1,x 1=1,原线性方程组的解为X =(1,1,-1)T 例2 取初始向量X (0)=(0,0,0)T ,用雅可比迭代法求解线性方程组 ??? ??5 =+2+23=++1=2-2+321 321321x x x x x x x x x 解 建立迭代格式 ???????+--=+--=++-=+++5223122) (2)(1)1(3 ) (3)(1)1(2 ) (3)(2)1(1k k k k k k k k k x x x x x x x x x (k =1,2,3,…)

第1次迭代,k =0 X (0)=0,得到X (1)=(1,3,5)T 第2次迭代,k =1 ???????-=+?-?-=-=+--==+?+?-=3 532123 351515232)2(3) 2(2)2(1x x x X (2)=(5,-3,-3)T 第3次迭代,k =2 ???????=+-?-?-==+---==+-?+-?-=1 5)3(2521 3)3(511)3(2)3(2)2(3) 3(2)3(1x x x X (3)=(1,1,1)T 第4次迭代,k =3 ???????=+?-?-==+--==+?+?-=1 512121 311111212)2(3) 2(2)2(1x x x X (4)=(1,1,1)T 例4 证明例2的线性方程组,雅可比迭代法收敛,而高斯-赛德尔迭代法发散。 证明 例2中线性方程组的系数矩阵为 A =?? ?? ? ?????-122111221 于是 D =?? ?? ??????100010001 D -1=D ??????????=022001000L ~ ????? ?????-=000100220U ~ 雅可比迭代矩阵为

数值分析报告模拟试卷1,2,3

数值分析模拟试卷1 一、填空(共30分,每空3分) 1 设??? ? ??-=1511A ,则A 的谱半径=)(a ρ______,A 的条件数)(1A cond =________. 2 设 Λ ,2,1,0,,53)(2==+=k kh x x x f k ,则 ],,[21++n n n x x x f =________, ],,[321+++n n n n x x x x f ,=________. 3 设?????≤≤-++≤≤+=2 1,121 0,)(232 3x cx bx x x x x x S ,是以0,1,2为节点的三次样条函数,则 b=________,c=________. 4 设∞ =0)]([k k x q 是区间[0,1]上权函数为x x =)(ρ的最高项系数为1的正交多项式族,其中1)(0=x q ,则 ?=1 )(dx x xq k ________,=)(2x q ________. 5 设 ?? ?? ? ?????=11001a a a a A ,当 ∈ a ________时,必有分解式 ,其中L 为下三角阵,当其对角线元素 )3,2,1(=i L ii 满足条件________时,这种分解是唯一的.

二、(14分)设4 9,1,41,)(2102 3 === =x x x x x f , (1)试求)(x f 在]4 9,41[上的三次Hermite 插值多项式)(x H 使满足 2,1,0),()(==i x f x H i i ,)()(11x f x H '='. (2)写出余项)()()(x H x f x R -=的表达式. 三、(14分)设有解方程0cos 2312=+-x x 的迭代公式为n n x x cos 3 2 41+ =+, (1) 证明R x ∈?0均有?∞ →=x x n x lim (? x 为方程的根); (2) 取40=x ,用此迭代法求方程根的近似值,误差不超过 ,列出各次迭代值; (3)此迭代的收敛阶是多少?证明你的结论.

数值计算课程设计任务书

数值计算课程设计任务书 学院信息与计算科学/应用数学专业班级学生: 题目:典型数值算法的C++语言程序设计 课程设计从2017 年 6 月12 日起到2017 年7月 1 日 1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等): 每人需作10个算法的程序、必做6题、自选4题。 对每个算法要求用C++语言进行编程。 必选题: 1、高斯列主元法解线性方程组 2、牛顿法解非线性方程组 3、经典四阶龙格库塔法解一阶微分方程组 4、三次样条插值算法(压紧样条)用C++语言进行编程计算 依据计算结果,用Matlab画图并观察三次样条插值效果。 5、龙贝格求积分算法 6、M次多项式曲线拟合,据计算结果,用Matlab画图并观察拟合效果。 自选题:自选4道其他数值算法题目.每道题目重选次数不得超过5次. 2、对课程设计成果的要求〔包括图表、实物等硬件要求〕: 2.1 提交课程设计报告 按照算法要求,应用C++语言设计和开发算法程序,提交由: 1)每个算法的原理与公式说明; 2)每个算法相应的程序设计说明(程序中的主要变量语义说明,变量的数据类型说明,数据在内存中组织和存储结构说明,各函数的输入形参和输出形参说明,函数功能说明,函数中算法主要流程图,函数的调用方法说明); 3)每个程序使用的实例(引用的实例可以自拟,也可以借用相关数值计算参考书中的例题作为作为验证程序是否正确的实例,无论是自拟实例还是引用实例,实例都应详细写入报告的正文中); 4)每个算法的调试记录(包括程序调试(静态调试和动态调试)和程序修改记录、程序测试(可以手工计算进行测试、也可以利用Matlab的函数或

数值分析(计算方法)总结

第一章绪论 误差来源:模型误差、观测误差、截断误差(方法误差)、舍入误差 是的绝对误差,是的误差,为的绝对误差限(或误差限) 为的相对误差,当较小时,令 相对误差绝对值得上限称为相对误差限记为:即: 绝对误差有量纲,而相对误差无量纲 若近似值的绝对误差限为某一位上的半个单位,且该位直到的第一位非零数字共有n位,则称近似值有n位有效数字,或说精确到该位。 例:设x==…那么,则有效数字为1位,即个位上的3,或说精确到个位。 科学计数法:记有n位有效数字,精确到。 由有效数字求相对误差限:设近似值有n位有效数字,则其相对误差限为 由相对误差限求有效数字:设近似值的相对误差限为为则它有n位有效数字 令 1.x+y近似值为和的误差(限)等于误差(限)的 和 2.x-y近似值为 3.xy近似值为 4. 1.避免两相近数相减 2.避免用绝对值很小的数作除数 3.避免大数吃小数 4.尽量减少计算工作量 第二章非线性方程求根 1.逐步搜索法 设f (a) <0, f (b)> 0,有根区间为(a, b),从x0=a出发,按某个预定步长(例如h=(b-a)/N)

一步一步向右跨,每跨一步进行一次根的搜索,即判别f(x k)=f(a+kh)的符号,若f(x k)>0(而 f(x k-1)<0),则有根区间缩小为[x k-1,x k] (若f(x k)=0,x k即为所求根), 然后从x k-1出发,把搜索步长再缩小,重复上面步骤,直到满足精度:|x k-x k-1|0.将[a0,b0]对分,中点x0= ((a0+b0)/2),计算 f(x0)。 3.比例法 一般地,设[a k,b k]为有根区间,过(a k, f(a k))、(b k, f(b k))作直线,与x轴交于一点x k,则: 1.试位法每次迭代比二分法多算一次乘法,而且不保证收敛。 2.比例法不是通过使求根区间缩小到0来求根,而是在一定条件下直接构造出一个点列(递推公式),使该点列收敛到方程的根。——这正是迭代法的基本思想。 事先估计: 事后估计 局部收敛性判定定理: 局部收敛性定理对迭代函数的要求较弱,但对初始点要求较高,即初始点必须选在精确解的附近 Steffensen迭代格式: Newton法: Newton下山法:是下山因子 弦割法: 抛物线法:令 其中:

数值分析典型习题资料

数值分析典型习题

特别声明:考试时需带计 算器作辅助计算 1.2015x *=是经四舍五入得到的近似值,则其相对误差* r e ≤ -31 104 ?. 2. 01(),(),,()n l x l x l x L 是以01,,,n x x x L 为节点的拉格朗日插值基函数,则 3.设(0)1(1)3(2)4(3)2f =,f =,f =,f =,[0123]f =,,,1 3 - . 4. 利用Simpson 公式求?2 1 2dx x = 7.3 5. 设求积公式1 0()d (),(1)n k k k f x x A f x n ≈≥∑?=是Gauss 型求积公式,则3 n k k k A x == ∑1 .4 6. 数值微分公式(2)(2) ()i i i f x h f x h f x h +≈ --'的截断误差为 2().O h 7. 设1101A ?? = ??? ,则A 的谱半径()A ρ= 1 ,A 的条件数1cond ()A = 4. 8. 用牛顿下山法求解方程3 03 x x -=根的迭代公式是 2 13 3(1),3n n n n x x x x x λ+-=-- 下山条件是 1()().n n f x f x +< 9.对任意初始向量(0)x 及任意向量f ,线性方程组的迭代公式(1)()(0,1,2,)k k k +=+=L x Bx f ,迭代序列()k x 收敛于方程组的精确解x *的充分必要条件是()1.ρ

数值计算方法大作业

目录 第一章非线性方程求根 (3) 1.1迭代法 (3) 1.2牛顿法 (4) 1.3弦截法 (5) 1.4二分法 (6) 第二章插值 (7) 2.1线性插值 (7) 2.2二次插值 (8) 2.3拉格朗日插值 (9) 2.4分段线性插值 (10) 2.5分段二次插值 (11) 第三章数值积分 (13) 3.1复化矩形积分法 (13) 3.2复化梯形积分法 (14) 3.3辛普森积分法 (15) 3.4变步长梯形积分法 (16) 第四章线性方程组数值法 (17) 4.1约当消去法 (17) 4.2高斯消去法 (18) 4.3三角分解法 (20)

4.4雅可比迭代法 (21) 4.5高斯—赛德尔迭代法 (23) 第五章常积分方程数值法 (25) 5.1显示欧拉公式法 (25) 5.2欧拉公式预测校正法 (26) 5.3改进欧拉公式法 (27) 5.4四阶龙格—库塔法 (28)

数值计算方法 第一章非线性方程求根 1.1迭代法 程序代码: Private Sub Command1_Click() x0 = Val(InputBox("请输入初始值x0")) ep = Val(InputBox(请输入误差限ep)) f = 0 While f = 0 X1 = (Exp(2 * x0) - x0) / 5 If Abs(X1 - x0) < ep Then Print X1 f = 1 Else x0 = X1 End If Wend End Sub 例:求f(x)=e2x-6x=0在x=0.5附近的根(ep=10-10)

1.2牛顿法 程序代码: Private Sub Command1_Click() b = Val(InputBox("请输入被开方数x0")) ep = Val(InputBox(请输入误差限ep)) f = 0 While f = 0 X1 = x0 - (x0 ^ 2 - b) / (2 * b) If Abs(X1 - x0) < ep Then Print X1 f = 1 Else x0 = X1 End If Wend End Sub 例:求56的值。(ep=10-10)

数值分析典型例题

第一章典型例题 例3…,精确到10-3的近似值是多少? 解 精确到10-3=,即绝对误差限是?=, 故至少要保留小数点后三位才 可以。ln2? 第二章典型例题 例1 用顺序消去法解线性方程组 解 顺序消元 于是有同解方程组 回代得解 x 3=-1, x 2=1,x 1=1,原线性方程组的解为X =(1,1,-1)T 例2 取初始向量X (0)=(0,0,0)T ,用雅可比迭代法求解线性方程组 解 建立迭代格式 ??? ????+--=+--=++-=+++5223122)(2)(1)1(3) (3)(1)1(2 )(3)(2)1(1k k k k k k k k k x x x x x x x x x (k =1,2,3,…) 第1次迭代,k =0 X (0)=0,得到X (1)=(1,3,5)T 第2次迭代,k =1 X (2)=(5,-3,-3)T 第3次迭代,k =2 X (3)=(1,1,1)T 第4次迭代,k =3

X (4)=(1,1,1)T 例4 证明例2的线性方程组,雅可比迭代法收敛,而高斯-赛德尔迭 代法发散。 证明 例2中线性方程组的系数矩阵为 A =?? ?? ? ?????-122111221 于是 D =?? ?? ??????100010001 D -1 =D ?? ?? ? ?????=022001000L ~ ?? ?? ? ?????-=000100220U ~ 雅可比迭代矩阵为 B 0=?? ?? ? ?????--=??????????-??????????-=+--022101220022101220100010001)U ~L ~(D 1 得到矩阵B 0的特征根03,2,1=λ,根据迭代基本定理4,雅可比迭代法收敛。 高斯-赛德尔迭代矩阵为 G =-U ~ )L ~D (1-+ =-?? ?? ??????----=??????????-??????????---=??????????-??????????-2003202200001002201200110010001002201220110011 解得特征根为?1=0,?2,3=2。由迭代基本定理4知,高斯-赛德尔迭代发散。 例5 填空选择题: 1. 用高斯列主元消去法解线性方程组 作第1次消元后的第2,3个方程分别为 。

数值分析模拟试题

数值分析模拟试题 一、填空题(每小题3分,共30分) 1、已知近似值* 2.4560x =是由真值x 经四舍五入得到,则相对误差限为 。 2 、为减少舍入误差的影响,应将10改写成 。 3、设(1,1,2,3)T x =-,则12_______,_______,_______x x x ∞===。 4、设1123A -??=????,则1________,________F A A ==,A 的谱半径()A ρ=。 5、用Gauss-Seidel 迭代法解方程组1212423 x ax ax x +=??+=-?,其中a 为实数,则该方法收敛的充要 条件是a 满足 。 6、迭代法12213k k k x x x +=+收敛于*x =,此迭代格式是 阶收敛的。 7、设01(),(),,()n l x l x l x 是以01,, ,n x x x 为节点的Lagrange 插值基函数,则0()n i i l x ==∑。 8、设3()321f x x x =++,则差商[0,1,2,3]_____,[0,1,2,3,4]_____f f ==。 9、数值积分的辛普森公式为()b a f x dx ≈?。 10、数值积分公式0()()n b k k a k f x dx A f x =≈∑?中,0n k k A ==∑。 二、设函数2()(3)x x a x ?=+-,由迭代公式1()k k x x ?+=产生的序列为{}k x ,试讨论 ⑴当a 为何值时,序列{}k x 收敛; ⑵当a 取何值时,收敛速度最快,并指出迭代法收敛的阶。(12分) 三、设4()[0,2]f x C ∈,且(0)2,(1)1,(2)0,'(1)0f f f f ==-==,试求函数()f x 的三次 插值多项式()P x ,并求余项表达式。(14分) 四、用矩阵的直接三角分解法(即LU 分解)解方程组Ax b =,其中

《数值分析》课程设计报告

《数值分析》课程设计实验报告 龙格—库塔法分析Lorenz 方程 200820302033 胡涛 一、问题叙述 考虑著名的Lorenz 方程 () dx s y x dt dy rx y xz dt dz xy bz dt ?=-???=--???=-?? 其中s ,r ,b 为变化区域内有一定限制的实参数,该方程形式简单,表面上看并无惊人之处,但由该方程揭示出的许多现象,促使“混沌”成为数学研究的崭新领域,在实际应用中也产生了巨大的影响。 二、问题分析 Lorenz 方程实际上是一个四元一阶常微分方程,用解析法精确求解是不可能的,只能用数值计算,最主要的有欧拉法、亚当法和龙格- 库塔法等。为了得到较高精度的,我们采用经典四阶龙格—库塔方法求解该问题。 三、实验程序及注释 (1)算法程序 function [T]=Runge_Kutta(f,x0,y0,h,n) %定义算法,其中f 为待解方程组, x0是初始自变量,y0是初始函数 值,h 是步长,n 为步数 if nargin<5 n=100; %如果输入参数个数小于5,则步数 n=100 end r=size(y0);r=r(1); %返回初始输出矩阵的行列数,并将 值赋给r(1) s=size(x0);s=s(1); %返回初始输入矩阵的行列数,并 将值赋给s(1) r=r+s; T=zeros(r,n+1); T(:,1)=[y0;x0]; for t=2:n+1 %以下是具体的求解过程 k1=feval(f,T(1:r-1,t-1)); k2=feval(f,[k1*(h/2)+T(1:r-1,t-1);x0+h/2]); k3=feval(f,[k2*(h/2)+T(1:r-1,t-1);x0+h/2]); k4=feval(f,[k3*h+T(1:r-1,t-1);x0+h]); x0=x0+h; T(:,t)=[T(1:r-1,t-1)+(k1+k2*2+k3*2+k4)*(h/6);x0]; end

数值分析典型例题

数值分析典型例题 例1 对下列各数写出具有5位有效数字的近似值。236.478, 0.00234711, 9.000024, 9.0000343 10?. 解:按照定义,以上各数具有5位有效数字的近似值分别为:236.478, 0.0023471, 9.0000, 9.0000310?。 注意: *x =9.000024的5位有效数字是9.0000而不是9,因为9 是1位有效数字。 例2 指出下列各数具有几位有效数字。2.0004, -0.00200, -9000, 9310?, 23 10-?。 解:按照定义,以上各数的有效数字位数分别为5, 3, 4,1,1 例3 已测得某物体行程* s 的近似值s=800m ,所需时间* s 的近似值为t=35s ,若已知m s s s t t 5.0||,05.0||**≤-≤-,试求平均速度v 的绝对误差和相对误差限。 解:因为t s v /=,所以)()(1)()()(2t e t s s e t t e t v s e s v v e -=??+??≈ 从 而 05.00469.035 800 5.0351|)(||||)(|1|)(|22≤≈+?≤+≤t e t s s e t v e 同样v v e v e r )()(≈)()()()(t e s e t e v t t v s e v s s v r r r -=??+??= 所以00205.035 05 .08005.0|)(||)(||)(|≈+≤+≤t e s e v e r r r 因此绝对误差限和相对误差限分别为0.05和0.00205。 例4试建立积分20,,1,05 =+=n dx x x I n n 的递推关系,并研究它的误差 传递。 解:151 --= n n I n I ……………………………………………..…...(1) 5ln 6ln 0-=I ,计算出0I 后可通过(1)依次递推计算出1I ,…,20I 。 但是计算0I 时有误差0e ,由此计算出的1I ,…,20I 也有误差,由(1)可 知近似值之间的递推关系为 151 --= n n I n I ……………………………………………….…..(2) (1)-(2)可得 01)5(5e e e n n n -=-=-,由0I 计算n I 时误差被放大了n 5倍。所以(1)不稳 定。 (1) 可以改写为 n I I n n 51 511+ -=- ……………………………………… (3) 如果能先求出20I ,则依次可以求出19I ,…,0I ,计算20I 时有误差,这样根据(3)计算19I ,…,0I 就有误差,误差传播为 n n n e e ?? ? ??-=-511 ,误差依次减少。 例5 用二分法求解方程012)(23=+--=x x x x f 在区间[0,1]内的1个实根,要求有3为有效数字。 解:因为0)1()0(

数值分析2007第二学期期末考试试题与答案(A)

期末考试试卷(A 卷) 2007学年第二学期 考试科目: 数值分析 考试时间:120 分钟 学号 姓名 年级专业 一、判断题(每小题2分,共10分) 1. 用计算机求 1000 1000 1 1 n n =∑时,应按照n 从小到大的顺序相加。 ( ) 2. 为了减少误差,进行计算。 ( ) 3. 用数值微分公式中求导数值时,步长越小计算就越精确。 ( ) 4. 采用龙格-库塔法求解常微分方程的初值问题时,公式阶数越高,数值解越精确。( ) 5. 用迭代法解线性方程组时,迭代能否收敛与初始向量的选择、系数矩阵及其演变方式有 关,与常数项无关。 ( ) 二、填空题(每空2分,共36分) 1. 已知数a 的有效数为0.01,则它的绝对误差限为________,相对误差限为_________. 2. 设1010021,5,1301A x -????????=-=-????????-???? 则1A =_____,2x =______,Ax ∞ =_____. 3. 已知5 3 ()245,f x x x x =+-则[1,1,0]f -= ,[3,2,1,1,2,3]f ---= . 4. 为使求积公式 1 1231 ()((0)f x dx A f A f A f -≈++? 的代数精度尽量高,应使1A = ,2A = ,3A = ,此时公式具有 次的代数精度。 5. n 阶方阵A 的谱半径()A ρ与它的任意一种范数A 的关系是 . 6. 用迭代法解线性方程组AX B =时,使迭代公式(1) ()(0,1,2,)k k X MX N k +=+= 产 生的向量序列{ }() k X 收敛的充分必要条件是 . 7. 使用消元法解线性方程组AX B =时,系数矩阵A 可以分解为下三角矩阵L 和上三角矩

数值分析课程课程设计汇总

课 程 设 计 我再也回不到大二了, 大学是那么短暂 设计题目 数值分析 学生姓名 李飞吾 学 号 x x x x x x x x 专业班级 信息计x x x x x 班 指导教师 设 计 题 目 共15题如下 成绩

数值分析课程设计 1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很疲惫,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?(15621) 试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题 解:算法分析:解该问题主要使用递推算法,关于椰子数目的变化规律可以设起初的椰子数为0p ,第一至五次猴子在夜里藏椰子后,椰子的数目分别为01234,,,,p p p p p 再设最后每个人分得x 个椰子,由题: 14 (1)5 k k p p +=- (k=0,1,2,3,4)51(1)5 x p =- 所以551p x =+,11k k p p +=+利用逆向递推方法求解 15 1,4 k k p p +=+ (k=0,1,2,3,4) MATLAB 代码: n=input('n= '); n= 15621 for x=1:n p=5*x+1; for k=1:5 p=5*p/4+1; end if p==fix(p), break end end disp([x,p]) 1.2 设,1 5n n x I dx x =+? (1)从0I 尽可能精确的近似值出发,利用递推公式: 11 5(1,2,20)n n I I n n -=-+= 计算机从1I 到20I 的近似值; (2)从30I 较粗糙的估计值出发,用递推公式:

数值分析课程设计(最终版)

本文主要通过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 1 0完成实验过程的同时,也对复化Simpon 积分章节的知识进行了巩固。 实验四常微分方程数值解,本文选取Runge-Kutta 方法进行实验,通过实验了解Runge-Kutta 法的收敛性与稳定性同时学会了学会用Matlab 编程实现Runge-Kutta 法解常微分方程,并在实验的过程中意识到尽管我们熟知的四种方法,事实上,在求解微分方程初值问题,四阶法是单步长中最优秀的方法,通常都是用该方法求解的实际问题,计算效果比较理想的。 实验五数值方法实际应用,本文采用最小二乘法拟合我国2001年到2015年的人口增长模型,并预测2020年我国人口数量。 关键词:Matlab ;LU 分解法;最小二乘法;复化Simpon 积分;Runge-Kutta

数值分析教案

数值分析教案 土建学院 工程力学系 2014年2月 一、课程基本信息 1、课程英文名称:Numerical Analysis

2、课程类别:专业基础课程 3、课程学时:总学时32 4、学分:2 5、先修课程:《高等数学》、《线性代数》、《C 语言》 6、适用专业:工程力学 二、课程的目的与任务: 数值分析是工程力学专业的重要理论基础课程,是现代数学的一个重要分支。其主要任务是介绍进行科学计算的理论方法,即在计算机上对来自科学研究和工程实际中的数学问题进行数值计算和分析的理论和方法。通过本课程的学习,不仅使学生初步掌握数值分析的基本理论知识,而且使学生具备一定的科学计算的能力、分析问题和解决问题的能力,为学习后继课程以及将来从事科学计算、计算机应用和科学研究等工作奠定必要的数学基础。 三、课程的基本要求: 1.掌握数值分析的常用的基本的数值计算方法 2.掌握数值分析的基本理论、分析方法和原理 3.能利用计算机解决科学和工程中的某些数值计算应用问题,增强学生综合运用知识的能力 4.了解科学计算的发展方向和应用前景 四、教学内容、要求及学时分配: (一) 理论教学: 引论(2学时) 第一讲(1-2节) 1.教学内容: 数值分析(计算方法)这门课程的形成背景及主要研究内容、研究方法、主要特点;算法的有关概念及要求;误差的来源、意义、及其有关概念。数值计算中应注意的一些问题。 2.重点难点: 算法设计及其表达法;误差的基本概念。数值计算中应注意的一些问题。3.教学目标: 了解数值分析的基本概念;掌握误差的基本概念:误差、相对误差、误差限、相对误差限、有效数字;理解有效数字与误差的关系。学会选用相对较好的数值计算方法。

相关文档
最新文档