当前位置:文档之家› 数值分析课程设计程序代码

数值分析课程设计程序代码

数值分析课程设计程序代码
数值分析课程设计程序代码

包含数值分析大部分方法的c语言代码欧拉方法

#include

#include

void main()

{

int i;

double h=0.025,k,y[20],x[20],c1,c2,c3;

y[0]=0.0,x[0]=0.0;

k=0.3/h;

for(i=0;i<12;i++)

{

x[i+1]=(i+1)*h;

c1=x[i+1];

y[i+1]=h+(1-h)*y[i];

c2=exp(-c1);

c3=1-c2;

printf("%f",x[i+1]);

printf(" ");

printf("%f",y[i+1]);

printf(" ");

printf("%f\n",c3);

}

}

改进欧拉方法

#include

#include

double f(double x,double y)

{

return (1-y);

}

void main()

{

int k,N=6;

double h,x,t1,t2,y,y1,a=0,b=0.3,y0=0;

h=(b-a)/N;

x=a;

y=y0;

for(k=0;k

{

t1=y+h*f(x,y);

x=x+h;

y1=1-exp(-x);

t2=y+h*f(x,t1);

y=(t1+t2)/2;

printf("%f",x);

printf(" ");

printf("%f",y);

printf(" ");

printf("%f\n",y1);

}

}经典R-K法

#include

#include

double f(double x,double y)

{

return (1-y);

}

void main()

{

int k,N=6;

double h,x,k1,k2,k3,k4,y,y1,a=0,b=0.3,y0=0;

h=(b-a)/N;

x=a;

y=y0;

for(k=0;k

{

k1=f(x,y);

k2=f(x+h/2,y+(h*k1)/2);

k3=f(x+h/2,y+(h*k2)/2);

k4=f(x+h,y+h*k3);

y=y+h*(k1+2*k2+2*k3+k4)/6;

x=x+h;

y1=1-exp(-x);

printf("%f",x);

printf(" ");

printf("%f",y);

printf(" ");

printf("%f\n",y1);

}

}

雅可比迭代法

#include

#include

#define eps 0.0001

void main()

{

int n=3,n0=100,i,j,k;

double a[3][3]={10,-1,0,-1,10,-2,0,-2,5},b[3]={9,-5,12},x[3],y[3],sum=0,max=0,c;

for(i=0;i

{

x[i]=0;

}

for(k=0;k

{

for(i=0;i

{sum=0;

max=0;

for(j=0;j

{

if(i!=j)

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

}

y[i]=(b[i]-sum)/a[i][i];

c=fabs(x[i]-y[i]);

if(c>max)

max=c;

}

if(max

{printf("k=%d\n",k);

for(i=0;i

{

printf("y[i]=%f\n",y[i]);

}

break;

}

else

{for(i=0;i

x[i]=y[i];

}

}

赛德尔迭代法

#include

#include

#define eps 0.0001

void main()

{

int n=3,i,j,k,n0=100;

double a[3][3]={10,-1,0,-1,10,-2,0,-2,5},b[3]={9,-5,12},t,x[3],y[3],sum=0.0,e=0.0; for(i=0;i

{

x[i]=0;

}

for(k=0;k

{

for(i=0;i

{ sum=0;

e=0;

for(j=0;j

{

if(i!=j)

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

}

t=x[i];

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

if(fabs(x[i]-t)>e)

e=fabs(x[i]-t);

}

if(e

{

printf("k=%d\n",k);

for(i=0;i

{

printf("x[i]=%f\n",x[i]);

}

break;

}

}

赛德尔迭代2

#include

#include

#define eps 0.0001

void main()

{

int n=3,n0=100,i,j,k;

double a[3][3]={10,-2,-1,-2,10,-1,-1,-2,5},b[3]={3,15,10},x[3],y[3],sum=0,max=0,c;

for(i=0;i

{

x[i]=0;

}

for(k=0;k

{

for(i=0;i

{sum=0;

max=0;

for(j=0;j

{

if(i!=j)

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

}

y[i]=(b[i]-sum)/a[i][i];

c=fabs(x[i]-y[i]);

if(c>max)

max=c;

}

if(max

{printf("k=%d\n",k);

for(i=0;i

{

printf("y[i]=%f\n",y[i]);

}

break;

}

else

{for(i=0;i

x[i]=y[i];

}

}

}

二分法解方程代码

#include

#include

#define f(x) (sin(x)-0.25*x*x) void main()

{ float a=1.5,b=2,c,eps=1e-5;

while ((b-a)>eps)

{ c=(a+b)/2;

if(f(c)==0) break;

else if(f(a)*f(c)<0)

{printf("%f\n",f(c));

b=c;}

else {printf("%f\n",f(c));

a=c;}

}

printf("root=%f\n",c);

}

迭代法解方程代码

#include

using namespace std;

#define g(x) (x*x*x-1)

#define n 50

#include

#define err 0.000001

void main()

{

double x[n];

int i;

cout<<"Please input the x0:\n"; cin>>x[0];

for(i=0;i

{

x[i+1]=g(x[i]);

cout<

if(fabs(x[i+1]-x[i])

}

}

拉格朗日插值法代码

#include

void main()

{ float lx[10],ly[10];

int n,i,j;

float x,y=0,p;

printf("input n=");

scanf("%d",&n);

printf("input xi\n");

for(i=0;i<=n;i++)

scanf("%f",&lx[i]);

printf("input yi\n");

for(i=0;i<=n;i++)

scanf("%f",&ly[i]);

printf("input x=");

scanf("%f",&x);

for(i=0;i<=n;i++)

{

p=1;

for(j=0;j<=n;j++)

{

if(i!=j)

p=p*(x-lx[j])/(lx[i]-lx[j]);

}

y=y+p*ly[i];

}

printf("y=%f\n",y);

}

龙贝格

#include

#include

#define eps 0.00001

#define k0 100

void main()

{

double T[100][100],sum=0,a=0,b=1;

int k,i,m,l;

T[0][0]=((b-a)*(4/(1+a*a)+4/(1+b*b)))/2;

for(l=1;l<=100;l++)

{sum=0.0;

for(i=1;i<=pow(2,l-1);i++)

{sum=sum+4/(1+(a+(2*i-1)*(b-a)/pow(2,l))*(a+(2*i-1)*(b-a)/pow(2,l))); }

T[l][0]=T[l-1][0]/2+(b-a)/pow(2,l)*sum;

T[l-1][1]=(T[l][0]*pow(4,1)-T[l-1][0])/(pow(4,1)-1);

if(l>=2) T[l-2][2]=(T[l-1][1]*pow(4,2)-T[l-2][1])/(pow(4,2)-1);

if(l>=3) T[l-3][3]=(T[l-2][2]*pow(4,3)-T[l-3][2])/(pow(4,3)-1);

if(l>=4 && fabs(T[l-3][3]-T[l-4][3])

}

printf("l=%d",l);

printf("T[l-3][3]=%f",T[l-3][3]);

}

外推法

#include

#include

#define f(x) 4/(1+(x)*(x))

#define eps 0.001

#define k0 100

void main()

{

float a=0,b=1,T[100],h,y;

int k,i;

printf("input a=");

scanf("%f",&a);

printf("\n input b=");

scanf("%f",&b);

T[1]=((b-a)*(f(a)+f(b)))/2;

for(k=1;k<=k0;k++)

{ y=0;

for(i=1;i<=pow(2,k-1);i++)

{ h=f(a+((2*i-1)*(b-a))/pow(2,k));

y=h+y;

T[2]=T[1]/2+((b-a)/pow(2,k))*y;

}

if(fabs(T[2]-T[1])

{ printf("k=%d",k);

printf("T[2^k]=%f",T[2]);

break;

}

else

T[1]=T[2];

}

}

二次积分

#include

#include

double f(double x,double y)

{return ((x*x)+(y*y*y));}

void main()

{int n=4,m=4,i,j;

double a=2.0,b=2.2,c=1.2,d=1.4,h1,h2,x,y,sum,f1=0.0,f2=0.0,fa=0.0,fb=0.0; h1=(b-a)/n;

h2=(d-c)/m;

for(i=1;i<=n-1;i++)

{x=a+i*h1;

for(j=1;j<=m-1;j++)

{y=c+j*h2;

f1=f1+2*f(x,y);

}

f2=f2+f(x,c)+f(x,d);

}

f2=h2/2*(f1+f2);

for(j=1;j<=m-1;j++)

{y=c+j*h2;

fa=fa+h2/2*2*f(a,y);

fb=fb+h2/2*2*f(b,y);

}

sum=h1/2*(fa+2*f2+fb+h2/2*f(a,c)+h2/2*f(b,c)+h2/2*f(a,d)+h2/2*f(b,d));

printf("%f",sum);

}

高斯消元

#include

void main()

{

int i,j,k,n=3;

double m[20][20],x[20],a[3][3]={1,1,1,1,3,-2,2,-2,1},b[3]={6,1,1},sum;

for(k=0;k<=n-2;k++)

{

for(i=k+1;i<=n-1;i++)

{

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

for(j=k+1;j<=n-1;j++)

{

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

}

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

}

}

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

printf("%f\n",x[n-1]);

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

{

sum=0;

for(j=i+1;j<=n-1;j++)

{

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

}

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

printf("%f\n",x[i]);

}

}

雅可比迭代法

#include

#include

#define eps 0.0001

void main()

{

int n=3,n0=100,i,j,k;

double a[3][3]={10,-1,0,-1,10,-2,0,-2,5},b[3]={9,-5,12},x[3],y[3],sum=0,max=0,c;

for(i=0;i

{

x[i]=0;

}

for(k=0;k

{

for(i=0;i

{sum=0;

max=0;

for(j=0;j

{

if(i!=j)

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

}

y[i]=(b[i]-sum)/a[i][i];

c=fabs(x[i]-y[i]);

if(c>max)

max=c;

}

if(max

{printf("k=%d\n",k);

for(i=0;i

{

printf("y[i]=%f\n",y[i]);

}

break;

}

else

{for(i=0;i

x[i]=y[i];

}

}

}

赛德尔迭代法

#include

#include

#define eps 0.0001

void main()

{

int n=3,i,j,k,n0=100;

double a[3][3]={10,-1,0,-1,10,-2,0,-2,5},b[3]={9,-5,12},t,x[3],y[3],sum=0.0,e=0.0; for(i=0;i

{

x[i]=0;

}

for(k=0;k

{

for(i=0;i

{ sum=0;

e=0;

for(j=0;j

{

if(i!=j)

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

}

t=x[i];

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

if(fabs(x[i]-t)>e)

e=fabs(x[i]-t);

}

if(e

{

printf("k=%d\n",k);

for(i=0;i

{

printf("x[i]=%f\n",x[i]);

}

break;

}

}

}

赛德尔迭代2

#include

#include

#define eps 0.0001

void main()

{

int n=3,n0=100,i,j,k;

double a[3][3]={10,-2,-1,-2,10,-1,-1,-2,5},b[3]={3,15,10},x[3],y[3],sum=0,max=0,c; for(i=0;i

{

x[i]=0;

}

for(k=0;k

{

for(i=0;i

{sum=0;

max=0;

for(j=0;j

{

if(i!=j)

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

}

y[i]=(b[i]-sum)/a[i][i];

c=fabs(x[i]-y[i]);

if(c>max)

max=c;

}

if(max

{printf("k=%d\n",k);

for(i=0;i

{

printf("y[i]=%f\n",y[i]);

}

break;

}

else

{for(i=0;i

x[i]=y[i];

}

}

}

迭代法解方程代码

#include

using namespace std;

#define g(x) (x*x*x-1)

#define n 50

#include

#define err 0.000001

void main()

{

double x[n];

int i;

cout<<"Please input the x0:\n";

cin>>x[0];

for(i=0;i

{

x[i+1]=g(x[i]);

cout<

if(fabs(x[i+1]-x[i])

}

}

高斯消元

#include

void main()

{

int i,j,k,n=3;

double m[20][20],x[20],a[3][3]={1,1,1,1,3,-2,2,-2,1},b[3]={6,1,1},sum;

for(k=0;k<=n-2;k++)

{

for(i=k+1;i<=n-1;i++)

{

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

for(j=k+1;j<=n-1;j++)

{

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

}

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

}

}

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

printf("%f\n",x[n-1]);

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

{

sum=0;

for(j=i+1;j<=n-1;j++)

{

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

}

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

printf("%f\n",x[i]);

}

}

数值分析课程设计

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

数值分析课程设计 课程设计要求 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法形式,从而将不规则网格差分法推广为广义差分法.其基本思路是,将计算区域划分为一系列不重复的控制体积,并使每个网格点周围有

数值分析课程设计题目与要求

数值分析课程设计题目与要求 (10级应数及创新班) [设计题一] 编写顺序Gauss消去法和列主元Gauss消去法的函数,再分别调用这两个函数求解下面的84阶方程组: = , 然后考虑将方程组的阶数取为10至100之间多个值进行求解。将你的计算结果与方程组的精确解进行比较。从“快”、“准”、“省”三个方面分析以上两个算法,试提出改进的算法并加以实现和验证。 [设计题二] 编写平方根法和改进的平方根法(参见教材《计算方法》P54的例题2.5)的函数,然后分别调用这两个函数求解对称正定方程组Ax=b,其中A和b分别为: (1)系数矩阵A为矩阵(阶数取为10至100之间多个值): , 向量b随机地选取; (2)系数矩阵A为Hilbert矩阵(阶数取为5至40之间多个值),即A的第i行第j列元素,向量b的第i个分量取为。将你的计算结果与方程组的精确解进 行比较。 若出现问题,分析其原因,提出改进的设想并尝试实现之。

对于迭代法 ,......)2,1,0(99.021=-=+k x x x k k k , 它显然有不动点0* =x 。试设计2个数值实验 得到收敛阶数的大概数值(不利用判定收敛阶的判据定理): (1) 直接用收敛阶的定义; (2) 用最小二乘拟合的方法。 [设计题四] 湖水在夏天会出现分层现象,接近湖面温度较高,越往下温度变低。这种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。如果把水温T 看成深度x 的函数T(x),有某个湖的观测数据如下: 环境工程师希望: 1) 用三次样条插值求出T(x)。 2) 求在什么深度处dx dT 的绝对值达到最大( 即02 2=dx T d )。 [设计题五] 某飞机头部的光滑外形曲线的型值点坐标由下表给出: ...值y 及一阶、二阶导数值y ’,y ”。绘出模拟曲线的图形。

数值分析所有代码

实验一:拉格朗日插值多项式 命名(源程序.cpp及工作区.dsw):lagrange 问题: 4 //Lagrange.cpp #include #include #define N 4 int checkvalid(double x[], int n); void printLag (double x[], double y[], double varx, int n); double Lagrange(double x[], double y[], double varx, int n); void main () { double x[N+1] = {0.4, 0.55, 0.8, 0.9, 1}; double y[N+1] = {0.41075, 0.57815, 0.88811, 1.02652, 1.17520}; double varx = 0.5; if (checkvalid(x, N) == 1) { printf("\n\n插值结果: P(%f)=%f\n", varx, Lagrange(x, y, varx, N)); } else { printf("结点必须互异"); } getch(); } int checkvalid (double x[], int n) { int i,j; for (i = 0; i < n; i++) { for (j = i + 1; j < n+1; j++) { if (x[i] == x[j])//若出现两个相同的结点,返回-1 { return -1; } } }

数值计算课程设计任务书

数值计算课程设计任务书 学院信息与计算科学/应用数学专业班级学生: 题目:典型数值算法的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

实验一 误差分析 实验(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a 的全部根;而函数 poly(v)b =

的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve = ))20:1((ve poly roots + 上述简单的Matlab 程序便得到()的全部根,程序中的“ess ”即是()中的ε。 实验要求: (1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。 如果扰动项的系数ε很小,我们自然感觉()和()的解应当相差很小。计算中你有什么出乎意料的发现表明有些解关于如此的扰动敏感性如何 (2)将方程()中的扰动项改成18x ε或其它形式,实验中又有怎样的现象 出现 (3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将 方程()写成展开的形式, ) 3.1(0 ),(1920=+-= x x x p αα 同时将方程的解x 看成是系数α的函数,考察方程的某个解关于α的扰动是否敏感,与研究它关于α的导数的大小有何关系为什么你发现了什么现象,哪些根关于α的变化更敏感 思考题一:(上述实验的改进) 在上述实验中我们会发现用roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。

数值分析的MATLAB程序

列主元法 function lianzhuyuan(A,b) n=input('请输入n:') %选择阶数A=zeros(n,n); %系数矩阵A b=zeros(n,1); %矩阵b X=zeros(n,1); %解X for i=1:n for j=1:n A(i,j)=(1/(i+j-1)); %生成hilbert矩阵A end b(i,1)=sum(A(i,:)); %生成矩阵b end for i=1:n-1 j=i; top=max(abs(A(i:n,j))); %列主元 k=j; while abs(A(k,j))~=top %列主元所在行 k=k+1; end for z=1:n %交换主元所在行a1=A(i,z); A(i,z)=A(k,z); A(k,z)=a1; end a2=b(i,1); b(i,1)=b(k,1); b(k,1)=a2; for s=i+1:n %消去算法开始m=A(s,j)/A(i,j); %化简为上三角矩阵 A(s,j)=0; for p=i+1:n A(s,p)=A(s,p)-m*A(i,p); end b(s,1)=b(s,1)-m*b(i,1); end end X(n,1)=b(n,1)/A(n,n); %回代开始 for i=n-1:-1:1 s=0; %初始化s for j=i+1:n s=s+A(i,j)*X(j,1);

end X(i,1)=(b(i,1)-s)/A(i,i); end X 欧拉法 clc clear % 欧拉法 p=10; %贝塔的取值 T=10; %t取值的上限 y1=1; %y1的初值 r1=1; %y2的初值 %输入步长h的值 h=input('欧拉法please input number(h=1 0.5 0.25 0.125 0.0625):h=') ; if h>1 or h<0 break end S1=0:T/h; S2=0:T/h; S3=0:T/h; S4=0:T/h; i=1; % 迭代过程 for t=0:h:T Y=(exp(-t)); R=(1/(p-1))*exp(-t)+((p-2)/(p-1))*exp(-p*t); y=y1+h*(-y1); y1=y; r=r1+h*(y1-p*r1); r1=r; S1(i)=Y; S2(i)=R; S3(i)=y; S4(i)=r; i=i+1; end t=[0:h:T]; % 红线为解析解,'x'为数值解 plot(t,S1,'r',t,S3,'x')

数值计算方法大作业

目录 第一章非线性方程求根 (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)

数值分析课程设计

课程设计报告 课程名称 课题名称 专业 班级 学号 姓名 指导教师 年月日

湖南工程学院课程设计任务书 课程名称数值分析 课题 专业班级 学生姓名 学号 指导老师 审批 任务书下达日期2009 年 5 月 4 日任务完成日期2009 年 5 月18日

一、设计内容与设计要求 1.设计内容: 对课程《计算方法》中的常见算法进行综合设计或应用(具体课题题目见后面的供选题目)。 2.设计要求: ●课程设计报告正文内容 a.问题的描述及算法设计; b.算法的流程图(要求画出模块图); c.算法的理论依据及其推导; d.相关的数值结果(通过程序调试),; e.数值计算结果的分析; f.附件(所有程序的原代码,要求对程序写出必要的注释)。 ●书写格式 a.要求用A4纸打印成册 b.正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。 c.正文的内容:正文总字数要求在3000字左右(不含程序原代码)。 d.封面格式如下页。 ●考核方式 指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分: a.平时出勤(占10%) b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%) c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%) d.设计报告(占30%) 注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。 e.独立完成情况(占10%)。 ●课程验收要求 a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。

数值分析编程题c语言

上机实习题一 一、题目: 已知A 与b 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 A= -0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.784137 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.7138465,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 b={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345,-5.6784392} 1.用Household 变换,把A 化为三对角阵B (并打印B )。 2.用超松弛法求解BX=b (取松弛因子ω=1.4,X (0)=0,迭代9次)。 3.用列主元素消去法求解BX=b 。 二、解题方法的理论依据: 1 、用Householder 变换的理论依据 ﹝1﹞ 令A0=A,a(ij)1=a(ij),已知Ar_1即Ar_1=a(ij)r ﹝2﹞ Sr=sqrt(pow(a,2)) ﹝3﹞ a(r)=Sr*Sr+abs(a(r+1,r))*Sr ﹝4﹞ y(r)=A(r_1)*u?/a? ﹝5﹞ Kr=(/2)*Ur 的转置*Yr/a? ﹝6﹞ Qr=Yr-Kr*Ur ﹝7﹞ Ar=A(r-1)-(Qr*Ur 的转置+Ur*Qr 的转置) r=1,2,,……,n -2 2 、用超松弛法求解 其基本思想:在高斯方法已求出x (m),x (m-1) 的基础上,组合新的序列,从而加快收敛速度。 其算式: ??? ??? ?=+?=+-+----=][][0][0][~ ][]][[][]1[0]][[]1][[]1[]][[]1][[][~ i X i X i X i X w i X i i B i b i X i i B i i B i X i i B i i B i X 其中ω是超松弛因子,当ω>1时,可以加快收敛速度 3 、用消去法求解 用追赶消去法求Bx=b 的方法: ][]1[1i b i d =+ , ]][1[]2[1i i B i a +=+ , ][]1[]1][[][]][[]1[]1][[i b i X i i B i X i i B i X i i 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

数值分析——编程作业..docx

《数值分析》实验报告 第二章=解线性方程组的直接方法 2、试用MATLAB软件编程实现追赶法求解三对角方程组的算法, 并考虑梯形电阻电路问题,电路如下:

其中电路中的各个电流f2?…,珀}须满足下列线性方程组: 一耳十务一巧=0 一巧4■笃一為=0 一迢+呂一逼=0 一耳+兀_%=0 一爲+5% 一巧=0 -2f6+5f7-2f8 =0 -2i7+5r g=0 设F = 220V,氏= 27Q,运用求各段电路的电流量。 解:v!R = — ?8_1481 27 上述方程组可用矩阵表示为: ?2_2000000h81481 _25_200000h0 0_25-20000h0 00_25_2000h0 000-25_200h0 0000_25-20S0 00000-25_2h0 000000-25?8.0

認翟蚁蛊 X -p u a) A .H )q /(i p n .H )p T (.rH )p T 二—二丄岂4 晒口?〈狠* A8)q 、 (8)PH(8)p -p u a) -U —.H ) P *-H ) F (.H ) P A .H ) P 丄) y (.H )q A .H )q Q 丄)q/u)y(2 晒口§前厂< 00 勺:。 4 坦祖咽鱼磋£紙夜 lll < =0 0 0 0 0 0 0 T 畧 oo v p 二甲 d — d — 甲甲甲 d — v 。 二g g g g g g g d v q 氏 —甲 甲甲甲甲 d — O V B 曲恥 qedelN

寸 61—<10905 30p ^ s £0- S S I 黑理q 。脅 u) 旺=味蛋二

12级数值分析课程设计

数值分析课程设计题目与要求 (12级应数及创新班) [设计题一] 编写顺序Gauss消去法和列主元Gauss消去法的函数,再分别调用这两个函数求解下面的84阶方程组: = , 然后考虑将方程组的阶数取为10至100之间多个值进行求解。将你的计算结果与方程组的精确解进行比较。从“快”、“准”、“省”三个方面分析以上两个算法,试提出改进的算法并加以实现和验证。 [设计题二] 编写平方根法和改进的平方根法(参见教材《计算方法》P54的例题2.5)的函数,然后分别调用这两个函数求解对称正定方程组Ax=b,其中A和b分别为: (1)系数矩阵A为矩阵(阶数取为10至100之间多个值): , 向量b随机地选取; (2)系数矩阵A为Hilbert矩阵(阶数取为5至40之间多个值),即A的第i行第j列元素,向量b的第i个分量取为。将你的计算结果与方程组的精确解进 行比较。 若出现问题,分析其原因,提出改进的设想并尝试实现之。

对于迭代法 ,......)2,1,0(99.02 1=-=+k x x x k k k , 它显然有不动点0*=x 。试设计2个数值实验 得到收敛阶数的大概数值(不利用判定收敛阶的判据定理): (1) 直接用收敛阶的定义; (2) 用最小二乘拟合的方法。 [设计题四] 湖水在夏天会出现分层现象,接近湖面温度较高,越往下温度变低。这种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。如果把水温T 看成深度x 的函数T(x),有某个湖的观测数据如下: 环境工程师希望: 1) 用三次样条插值求出T(x)。 2) 求在什么深度处dx dT 的绝对值达到最大( 即02 2=dx T d )。 [设计题五] 某飞机头部的光滑外形曲线的型值点坐标由下表给出: ...值y 及一阶、二阶导数值y ’,y ”。绘出模拟曲线的图形。

数值计算方法》试题集及答案

《计算方法》期中复习试题 一、填空题: 1、已知3.1)3(,2.1)2(,0.1)1(===f f f ,则用辛普生(辛卜生)公式计算求得 ?≈3 1 _________ )(dx x f ,用三点式求得≈')1(f 。 答案:2.367,0.25 2、1)3(,2)2(,1)1(==-=f f f ,则过这三点的二次插值多项式中2 x 的系数为 ,拉 格朗日插值多项式为 。 答案:-1, )2)(1(21 )3)(1(2)3)(2(21)(2--------= x x x x x x x L 3、近似值*0.231x =关于真值229.0=x 有( 2 )位有效数字; 4、设)(x f 可微,求方程)(x f x =的牛顿迭代格式是( ); 答案 )(1)(1n n n n n x f x f x x x '--- =+ 5、对1)(3 ++=x x x f ,差商=]3,2,1,0[f ( 1 ),=]4,3,2,1,0[f ( 0 ); 6、计算方法主要研究( 截断 )误差和( 舍入 )误差; 7、用二分法求非线性方程 f (x )=0在区间(a ,b )内的根时,二分n 次后的误差限为 ( 1 2+-n a b ); 8、已知f (1)=2,f (2)=3,f (4)=5.9,则二次Newton 插值多项式中x 2系数为( 0.15 ); 11、 两点式高斯型求积公式?1 d )(x x f ≈( ?++-≈1 )] 321 3()3213([21d )(f f x x f ),代数精度 为( 5 ); 12、 为了使计算 32)1(6 )1(41310-- -+-+ =x x x y 的乘除法次数尽量地少,应将该表达 式改写为 11 ,))64(3(10-= -++=x t t t t y ,为了减少舍入误差,应将表达式1999 2001-

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

课 程 设 计 我再也回不到大二了, 大学是那么短暂 设计题目 数值分析 学生姓名 李飞吾 学 号 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 较粗糙的估计值出发,用递推公式:

数值分析课程设计分析方案

郑州轻工业学院 《数值分析》 课程设计报告 题目: 1.非线性方程求解 8.最小二乘法 姓名:杨君芳 院<系):数学与信息科学学院 专业班 级:信科 11-01 学号:541110010148 指导教 师:汪远征 时间:2018年12月30日至2018年1月4日

摘要 本文的内容主要属于数值代数问题的迭代解法和差值问题。 在VC++6.0环境下对非线性方程求根的三种迭代解法<即一般迭代法,牛顿迭代法和弦截法)的算法实现,将抽象问题转化为计算机编程的一般解法思想,实现运用计算机解非线性方程的根。同时完成了运用最小二乘法的思想解决实际问题的简单设计, 本文也对该程序设计的难点、解决技巧、每种方法的理论基础、程序的算法分析、功能分析、模块设计以及算法的优点、缺点和主要参考文献等进行了详细的作答。 ,

目录 《数值分析》1 课程设计报告1 摘要2 目录3 1 理论基础4 1.1 非线性方程的迭代解法4 1.2最小二乘法4 2 算法分析5 2.1 功能分析5 2.1.1非线性方程的迭代解法5 2.2 算法分析5 3 程序设计8 3.1 选单和主窗口设计8 3.1.1非线性方程的迭代解法8 3.1.2最小二乘法10 3.2 模块设计14 3.2.1非线性方程的迭代解法14 3.2.2 最小二乘法18 4 总结24 5 参考文献25

1 理论基础 1.1 非线性方程的迭代解法 1、 一般迭代法:首先将方程f

数值分析 matlab 实验4

(1) 解题过程如下: (1)MATLAB中创建复化梯形公式和复化辛普森公式的 M 文件:1)复化梯形公式文件: function s=T_fuhua(f,a,b,n) h=(b-a)/n; s=0; for k=1:(n-1) x=a+h*k; s=s+feval(f,x); end s=h*(feval(f,a)+feval(f,b))/2+h*s; 2)复化辛普森公式文件: function s=S_fuhua(f,a,b,n) h=0; h=(b-a)./(2*n); s1=0; https://www.doczj.com/doc/467257898.html, -5- s2=0; for k=1:n-1 x=a+h*2*k; s1=s1+feval(f,x); end for k=1:n x=a+h*(2*k-1); s2=s2+feval(f,x); end

s=h*(feval(f,a)+feval(f,b)+s1*2+s2*4)/3; 在MATLAB中输入: f=inline('x/(4+x^2)');a=0;b=1; %inline 构造内联函数对象 for n=2:10 s(n-1)=T_fuhua(f,a,b,n);s(n-1)=vpa(s(n-1),10); %调用复化梯形公式,生成任意精度的数值 end exact=int('x/(4+x^2)',0,1);exact=vpa(exact,10) %求出积分的精确值 输出结果:exact = .1115717755 s = Columns 1 through 6 0.1088 0.1104 0.1109 0.1111 0.1113 0.1114 Columns 7 through 9 0.1114 0.1114 0.1115 在MATLAB中输入以下函数用以画出计算误差与 n 之间的曲线: r=abs(exact-s); n=2:10; plot(double(n),double(r(n-1))) 得到结果如图所示: (2)在 MATLAB中输入以下程序代码: f=inline('x/(4+x^2)');a=0;b=1;n=9; %inline 构造内联函数对象 t=T_fuhua(f,a,b,n);t=vpa(t,10) s=S_fuhua(f,a,b,n);s=vpa(s,10)

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

本文主要通过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

相关主题
文本预览
相关文档 最新文档