当前位置:文档之家› 数值代数上机报告

数值代数上机报告

数值代数上机报告
数值代数上机报告

一、 目的意义:

把矩阵A 分解成一个下三角阵与一个上三角阵的乘积,即 A=LR ,其中L 为下

三角阵,R 为上三角阵,这样原线性方程组就可以化为?

??==y Rx b Ly 的求解问题,方

便求解。

二、 算法:

1) 输入系数矩阵 A ; 2) 利用公式

ij

i k ij ij ij r l a r ∑-=-=1

1

ki i k jk ji ji r

r l a l /)(1

1

∑-=-=交错进

行,计算得出矩阵L 和R ;

3) 回带到?

??==y Rx b

Ly 中得出原线性方程组的解。

三、 源程序:

#include

#include #include #include #define N 100 main() {

int i,j,k,s,n;

printf("请输入系数矩阵A 的阶数:n= "); scanf("%d",&n); float

a[N][N]={0},L[N][N]={0},R[N][N]={0},sigma1,sigma2,b[N],y[N],x[N];

/*为L 主对角线元素赋1*/ for(i=0;i

printf("请输入系数矩阵A :\n"); /*输入系数矩阵A*/

报告

1

Doolittle 分解

for(i=0;i

{

for(j=0;j

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

}

for(k=0;k

{

for(j=k;j

{

sigma1=0;

for(s=0;s<=k-1;s++)

sigma1+=L[k][s]*R[s][j];

R[k][j]=a[k][j]-sigma1;

}

for(i=k;i

{

sigma2=0;

for(s=0;s<=k-1;s++)

sigma2+=L[i][s]*R[s][k];

L[i][k]=(a[i][k]-sigma2)/R[k][k];

}

}

printf("\n A矩阵为:\n");/*输出矩阵L、R*/ for(i=0;i

{

for(j=0;j

printf("%5.1f ",a[i][j]);

printf("\n");

}

printf("\n L矩阵为:\n");

for(i=0;i

{

for(j=0;j

printf("%5.1f ",L[i][j]);

printf("\n");

}

printf("\n R矩阵为:\n");

for(i=0;i

{

for(j=0;j

printf("%5.1f ",R[i][j]);

printf("\n");

}

printf("请输入b矩阵\n",i+1);

for(i=0;i

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

for(i=0;i

{

sigma1=0;

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

sigma1+=L[i][k]*y[k];

y[i]=b[i]-sigma1;

}

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

{

sigma2=0;

for(k=i+1;k

sigma2+=R[i][k]*x[k];

x[i]=(y[i]-sigma2)/R[i][i];

}

printf("解得x为:\n");

for(i=0;i

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

printf("\n");

}

四、计算结果与分析:

分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想

五、 参考文献:

[1]刑志栋. 矩阵数值分析. 陕西: 陕西科学技术出版社, 2005 [2]谭浩强. C 语言程序设计. 北京:清华大学出版社,2005

一、 目的意义:

对称正定矩阵是实践中经常遇到的一种特殊矩阵类型矩阵,由于矩阵本身的流量好兴致,使得cholesky 分解在存储和运算量上较一般消去法节省一半左右,且解的精度高,cholesky 分解方法是目前计算机求解该类问题最有效的方法之一。

二、 算法:

1) 输入系数矩阵 A ;

2) 利用公式 ik

i k ik ii ii jji

ij ij jk

j k ik ij ij l s a d d s l l s a s ∑∑-=-=-==-=1

1

1

1

/交错进行,计算得出矩阵L 和D ;

3) 回带到???==y

D x L b

Ly T

T 中得出原线性方程组的解 三、 源程序:

#include

#include #include #define EPS 1.0e-8 #define N 20

double a[N][N], b[N], x[N];

报告

2

cholesky 分解

int zhuyuan(int row); /* 选主元*/ void hangjiaohuan(int row1, int row2); /* 行交换*/ void xiaoyuan(int row); /*消元*/ void huidai(); /* 回代*/

void main()

{

printf("请输入方程的维数n: n = ");

scanf("%d", &n);

getchar();

printf("输入%d行%d列系数矩阵A:\n", n, n);

for (int i=0; i

{

for (int j=0; j

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

getchar();

}

printf("\n输入线性方程组右端项b[%d]:\n", n);

for (i=0; i

{

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

}

getchar();

for (i=0; i

{

double rowmark = zhuyuan(i);

if (rowmark == -1)

{

printf("多解!");

system("pause");

return;

}

if (rowmark != i)

{

hangjiaohuan(i, rowmark);

}

xiaoyuan(i);

}

huidai();

printf("\n线性方程组的解为:\n ");

for (i=0; i

{

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

printf("\n");

printf("\n");

system("pause");

}

int zhuyuan(int row)

{

double elem = a[row][row];

int rowmark = row;

for (int i=row+1; i

{

if (elem

{

elem = a[i][row];

rowmark = i;

}

}

if(fabs(elem) <= EPS)

{

return -1;

}

return rowmark;

}

void hangjiaohuan(int row1, int row2) {

double tmp;

tmp = b[row1];

b[row1] = b[row2];

b[row2] = tmp;

for (int j=0; j

{

tmp = a[row1][j];

a[row1][j] = a[row2][j];

a[row2][j] = tmp;

}

}

void xiaoyuan(int row)

{

for (int i=row+1; i

{

int j=row;

double tmp = a[i][j]/a[row][row];

b[i] -= tmp*b[row];

for (a[i][j++] = 0; j

{

a[i][j] -= tmp*a[row][j];

}

}

}

void huidai()

{

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

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

{

double sum = 0.0;

for (int j=i+1; j

{

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

}

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

}

}

四、计算结果与分析:

分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想

五、参考文献:

[1]刑志栋. 矩阵数值分析. 陕西:陕西科学技术出版社,2005

[2]谭浩强. C 语言程序设计. 北京:清华大学出版社,2005

一、 目的意义:

通过有限次的算术运算得到线性方程组的近似值

二、 算法:

1) 输入系数矩阵 A ;

2) 输入迭代的初始向量;

3) 利用公式

()()ii n

i j j k j ij i k i a x a b x 1*11????

? ??-=∑≠=+,计算得出原线性方程组的近

似解。

三、 源程序:

#include

#include #include #include #define EPS 1e-6 #define MAX 100 #define N 100

float *Jacobi(float a[N][N],int n) {

float *x,*y,s; double epsilon; int i,j,k=0;

x=(float *)malloc(n*sizeof(float)); y=(float *)malloc(n*sizeof(float)); printf("请输入迭代的初始向量:\n"); for(i=0;i

报告

3

Jacobi 迭代法

{

epsilon=0;

k++;

for(i=0;i

{

s=0;

for(j=0;j

{

if(j==i) continue;

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

}

y[i]=(a[i][n]-s)/a[i][i];

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

}

if(epsilon < EPS)

{

printf("\n迭代次数为:%d次\n",k);

return y;

}

if(k>=MAX)

{

printf("The Method is disconvergent");

return y;

}

for(i=0;i

x[i]=y[i];

}

}

main()

{

int i,j,n;

float a[N][N];

float *x;

printf("请输入系数矩阵的阶数:n=");

scanf("%d",&n);

printf("请按行输入线性方程组的增广矩阵:\n");

for(i=0;i

{

for(j=0;j

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

}

x=(float *)malloc(3*sizeof(float));

x=Jacobi(a,n);

printf("\n原线性方程组的解为:\n");

for(i=0;i

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

getch();

}

四、计算结果与分析:

分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想

五、参考文献:

[1]刑志栋. 矩阵数值分析. 陕西:陕西科学技术出版社,2005

[2]谭浩强. C语言程序设计. 北京:清华大学出版社,2005

报告4乘幂法

一、目的意义:

阶数超过四次的多项式的根一般不能用有限次运算求得,因而矩阵特征值的计算方法本质上总是采用迭代格式,而采用乘幂法可以计算最大的一个或按模最大的几个特征值和特征相应特征向量。

二、算法:

1)输入系数矩阵A;

2) 取出事向量为()T

z 1,1,10=;

3) 利用乘幂法的迭代格式 k

k k k k k k m y z y m Az y /1===∞-;;

计算得出原矩阵按模最大特征值和

相应特征的向量。

三、 源程序:

#include #include #define N 100 #define M 100

#define epsilon 0.00001

int main() { int n; int i,j,k;

double xmax,oxmax; static double a[N][N]; static double x[N],nx[N]; printf("输入矩阵维数n: "); scanf("%d",&n); if(n>N) { printf("the inpur n is larger than MAX_N,please redefine the N.\n"); return 1; }

if(n<=0) { printf("please input a number between 1 and %d.\n",N); return 1; }

//输入A 矩阵

printf("请输入矩阵A(%d,%d):\n",n,n); for(i=0;i

for(i=0;i

for(i=0;i

{

for(j=0;j

{

nx[j]=0;

for(k=0;k

nx[j]+=a[j][k]*x[k];

}

xmax=0.0;

for(j=0;j

if(fabs(nx[j])>xmax)

xmax=fabs(nx[j]);

for(j=0;j

nx[j]/=xmax;

for(j=0;j

x[j]=nx[j];

if(fabs(xmax-oxmax)

{

printf("按模最大特征值=%.4f\n",xmax);

printf("相应的特征向量为:\n");

for(i=0;i

printf("%.4f\n",nx[i]);

break;

//return 0;

}

oxmax=xmax;

}

return 0;

}

四、计算结果与分析:

分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想

五、参考文献:

[1]刑志栋. 矩阵数值分析. 陕西:陕西科学技术出版社,2005

[2]谭浩强. C语言程序设计. 北京:清华大学出版社,2005

报告5逆幂法

一、目的意义:

逆幂法用于计算非奇异矩阵A的按模最小特征值和相应的特征向量

二、算法:

1)输入系数矩阵A和近似特征值;

2)将乘幂法用于1 A便可求出A的按模最小的特征值和相应的特征向量。

三、源程序:

#include

#include

#define e 0.0001

#define N 100

void main()

{

int i,j,k,n,p,s,kk=1,flag=1;

double q,m,lm,Lm,m0;

double A[N][N],B[N][N],L[N][N],R[N][N],l[N][N],r[N][N];

double z0[N],z1[N],y0[N],y1[N],y[N];

printf("请输入矩阵的阶数:n=");

scanf("%d",&n);

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

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

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

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

printf("\n请输入近似特征值:");

scanf("%lf",&lm);

/* 令B=A-lm*I ,用Doolittle分解B=LR */

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

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

{

if(j==i)

B[i][j]=A[i][j]-lm;

else

B[i][j]=A[i][j];

}

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

{

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

{

for(q=0,p=1;p

q=q+L[k][p]*R[p][i];

R[k][i]=B[k][i]-q;

}

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

{

for(q=0,p=1;p

q=q+L[i][p]*R[p][k];

L[i][k]=(B[i][k]-q)/R[k][k];

}

}

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

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

{

if(i==j)

L[i][j]=1;

else

L[i][j]=0;

}

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

for(j=1;j

R[i][j]=0;

/*第一步迭代,用Doolittle计算R*y1=y0中的y1*/ for(i=1;i<=n;i++)

y0[i]=1;

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

{

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

{

for(q=0,p=1;p

q=q+l[k][p]*r[p][i];

r[k][i]=R[k][i]-q;

}

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

{

for(q=0,p=1;p

q=q+l[i][p]*r[p][k];

l[i][k]=(R[i][k]-q)/r[k][k];

}

}

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

{

for(q=0,k=1;k

q=q+l[i][k]*y[k];

y[i]=y0[i]-q;

}

for(i=n;i>=1;i--)

{

for(q=0,k=i+1;k<=n;k++)

q=q+r[i][k]*y1[k];

y1[i]=(y[i]-q)/r[i][i];

}

/*计算m,z1(存放在下列代码的z0中)*/

for(m=y1[1],i=2;i<=n;i++)

if(fabs(y1[i])>fabs(y1[i-1]))

m=y1[i];

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

z0[i]=y1[i]/m;

/*第n(>1)次迭代*/

kk=2;

while(flag==1)

{

/*用Doolittle解方程LR*y2=z1中的y2,其中B=LR */ for(k=1;k<=n;k++)

{

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

{

for(q=0,p=1;p

q=q+l[k][p]*r[p][i];

r[k][i]=B[k][i]-q;

}

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

{

for(q=0,p=1;p

q=q+l[i][p]*r[p][k];

l[i][k]=(B[i][k]-q)/r[k][k];

}

}

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

{ for(q=0,k=1;k

q=q+l[i][k]*y[k];

y[i]=z0[i]-q;

}

for(i=n;i>=1;i--)

{ for(q=0,k=i+1;k<=n;k++)

q=q+r[i][k]*y1[k];

y1[i]=(y[i]-q)/r[i][i];

}

/*规范化*/

for(m=y1[1],i=2;i<=n;i++)

if(fabs(y1[i])>fabs(y1[i-1]))m=y1[i];

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

z1[i]=y1[i]/m;

/*判断:若|Z[k]-Z[k-1]|>=e,则进行下一轮迭代;否则得解。*/ for(s=0,i=1;i<=n;i++)

if((fabs(z0[i])-fabs(z1[i]))

if(s==n)flag=0;

else

{ kk++;

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

{ y0[i]=y1[i];

z0[i]=z1[i];

}

}

}

m0=1/m;

Lm=lm+m0;

printf("最接近的特征值为:\n");

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

printf("相应的特征向量为:\n");

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

printf("%lf,",z1[i]);

printf("\n\n");

}

四、计算结果与分析:

分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想

五、参考文献:

[1]刑志栋. 矩阵数值分析. 陕西:陕西科学技术出版社,2005

[2]谭浩强. C语言程序设计. 北京:清华大学出版社,2005

报告6古典Jacobi算法一、目的意义:

寻找相似变换,是对称矩阵A经过变换之后所得矩阵的非对角线元素的平方和减少,对角线元素的平方和增大,且保持对称性不变,不断的施行这种正交

变换,最终是非对角元素的平方和任意的接近与零,对角线元素平方的取极大值。

二、 算法:

1) 输入系数矩阵 A ;

2) 取A A =0,形成一个相似矩阵序列T

k k k k R A R A 1-=,k=1,2,…

3) 选取k R ,使得元素()

k pq a =0,这时θ应满足()()()1122tan ---=

k qq

k pp k pq a a a θ

4) 令()

1)

1(---=k qq

k pp

a a y ,()1)1()

1(2*)sgn(----=k pq k qq k pp

a a a x ,因此可以得到:

)/1(2/1cos 222y x y ++=θ ,θθcos /1*/*2/1sin 22y x x +=

三、 源程序:

#include "stdio.h"

#include"math.h" #define P 0.1 void main() {

double a[20][20][20],b[20][20][20],r[20][20][20],l[20][20][20]; double max,u,y,x,t,g,f,h,v,w; int i,j,k,n,c,d;

printf("请输入矩阵的维数:n="); scanf("%d",&n);

printf("请输入矩阵A:\n"); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%lf",&a[i][j][1]); printf("\n 所有的特征值为:"); for(i=1;i<=n;i++)

for(j=1;j<=n;j++) { if(a[i][j][1]<0) b[i][j][1]=-a[i][j][1]; else b[i][j][1]=a[i][j][1]; } for(k=1;k<=n;k++) { for( max=0,i=1;i<=n;i++) for(j=1;j<=n;j++) { if(imax+0.000001) {

max=b[i][j][k];

c=i;

d=j;

}

}

u=b[c][c][k]-b[d][d][k];

if(u>=0) y=u;

else y=-u;

if(u>=0) x=2*b[c][d][k];

else x=-2*b[c][d][k];

t=sqrt(x*x+y*y);

g=sqrt(0.5*1+0.5*y/t);

f=0.5*x/t*(1/g);

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

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

{

if(i!=j&&i!=c,j!=d&&i!=d,j!=c)

r[i][j][k]=0;

if(i==c&&j==c) r[c][c][k]=g;

if(i==d&&j==d) r[d][d][k]=g;

if(i==c&&j==d) r[c][d][k]=f;

if(i==d&&j==c) r[d][c][k]=-f;

if(i==j&&i!=c&&j!=d) r[i][j][k]=1;

}

printf("\n");

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

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

{

a[i][c][k+1]=b[i][c][k]*g+b[i][d][k]*f;

a[c][i][k+1]=b[i][c][k]*g+b[i][d][k]*f;

a[i][d][k+1]=-b[i][c][k]*f+b[i][d][k]*g;

a[d][i][k+1]=-b[i][c][k]*f+b[i][d][k]*g;

if(i!=c&&j!=d&&i!=d&&j!=c)

a[i][j][k+1]=b[i][j][k];

}

h=(b[c][c][k]-b[d][d][k])*f*g;

v=b[c][d][k]*(g*g-f*f);

a[c][d][k+1]=h+v;

a[d][c][k+1]=h+v;

a[c][c][k+1]=b[c][c][k]*g*g+2*b[c][d][k]*f*g+b[d][d][k]*f*f;

a[d][d][k+1]=b[c][c][k]*f*f-2*b[c][d][k]*f*g+b[d][d][k]*g*g;

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

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

{

if(a[i][j][1]<0)

b[i][j][k+1]=-a[i][j][k+1];

else

b[i][j][k+1]=a[i][j][k+1];

}

w=0;

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

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

{

if(i!=j)

w=w+b[i][j][k+1]*b[i][j][k+1];

else

continue;

}

printf("x=%lf",w);

if(w

break;

else

continue;

}

}

四、计算结果与分析:

分析:运行结果与预想的结果相近,误差对结果的影响不是很大,比较理想

五、参考文献:

[1]刑志栋. 矩阵数值分析. 陕西:陕西科学技术出版社,2005

[2]谭浩强. C语言程序设计. 北京:清华大学出版社,2005

C++上机实验报告实验三

实验三类与对象 1.实验目的 1.掌握类的定义和使用 2.掌握类的定义和对象的声明 3.复习具有不同访问属性的成员的访问方式 4.观察构造函数和析构函数的执行过程 5.学习类的组合使用方法 6.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 2.实验要求 1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 2.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom 为CDROM类的一个对象,定义并实现这个类。 3. (选做)设计一个用于人事管理的People(人员)类。考虑到通用性这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。 3.实验内容 1.首先定义枚举类型CPU_Rank,例如enum CPU_Rank{P1=1, P2, P3, P4, P5, P6, P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名: 2.使用debug调试功能观察程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 3.调试操作步骤如下: 1)单击Build | Start Debug | Step Into命令,或按下快捷键F11,系统进入单步执行状态,程序开始运行,一个DOS窗口出现,此时Visual Studio 中光标停在main()函数的入口处; 2)从Debug菜单或Debug工具栏中单击Step Over,此时,光标下移,程序准备执行CPU 对象的初始化; 3)单击Step Into,程序准备执行CPU类的构造函数; 4)连续单击Step Over,观察构造函数; 5)此时程序准备执行CPU对象的run()函数,单击Step Into,程序进入run()成员函数,连续单击Step Over,直到回到main()函数。 6)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识。 7)再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。 4.首先定义CPU类(可使用第二题中的CPU类)、RAM类、CDROM类。再定义Computer类;

数值代数实验报告

1.谈谈你对该算法的理解:(简单谈一下你是如何理解该算法的?) 先对84阶矩阵进行LU分解,通过Gauss消元法 对下三角形方程组利用前代法解出y,在对上三角方程组 用回代法解出x…. 2.实验内容 function [ L,U ] = LUfac( A ) for k=1:n-1 A(k+1:n,k)=A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n); end L=tril(A,0); for i=1:n L(i,i)=1; end U=triu(A,0); End //进行LU分解 function [ b ] = TSL( L,b ) n=size(L,1); for j=1:n-1 b(j)=b(j)/L(j,j); b(j+1:n)=b(j+1:n)-b(j)*L(j+1:n,j); end b(n)=b(n)/L(n,n); end //利用前代法解出y function [ b ] = TSU( U,b ) n=size(U,1); for j=n:-1:2 b(j)=b(j)/U(j,j); b(1:j-1)=b(1:j-1)-b(j)*U(1:j-1,j); end b(1)=b(1)/U(1,1); end //利用回代法解出x

主函数程序 A=eye(84); A=6*A; for i=2:84 A(i,i-1)=8; A(i-1,i)=1; End //生成84阶的矩阵A b=ones(84,1); b=b*15; b(1)=7; b(84)=14; [L,U]=LUfac(A);//调用函数LUfac对矩阵A进行分解 y=TSL(L,b);//调用函数TSL求解y x=TSU(U,y); //调用函数TSU求解X 经过matlab…有 x’ ans = 1.0e+008 * Columns 1 through 7 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 8 through 14 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 15 through 21 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 22 through 28 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 29 through 35 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 36 through 42 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 43 through 49 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 50 through 56 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 Columns 57 through 63

计算方法上机实验报告

《计算方法》上机实验报告 班级:XXXXXX 小组成员:XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教师:XXX 二〇一八年五月二十五日

前言 通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。 以下为本次上机实验报告,按照实验内容共分为六部分。 实验一: 一、实验名称及题目: Newton 迭代法 例2.7(P38):应用Newton 迭代法求 在 附近的数值解 ,并使其满足 . 二、解题思路: 设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交点的横坐标) (') (0001x f x f x x - =,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标) (') (1112x f x f x x - =称2x 为'x

的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把 ) (') (1n n n n x f x f x x - =+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。 三、Matlab 程序代码: function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0); y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1; while abs(x1-x0)>=tol x0=x1; y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end x=double(x1) K 四、运行结果: 实验二:

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

计算机组成原理上机实验报告

《计算机组成原理实验》课程 实验报告 实验题目组成原理上机实验 班级1237-小______________ 姓名______________________________ 学号______________________________ 时间2014年5月________ 成绩______________________________

实验一基本运算器实验 1.实验目的 (1 )了解运算器的组成原理 (2 )掌握运算器的工作原理 2?实验内容 进行逻辑、移位、算术运算将运算结果填入表。 输入数据,根据运算器逻辑功能表 表运算结果表

3.实验原理 本实验的原理如图1-1所示。 运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器A和暂存器B,三个部件同时接受来自A和B的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如ARM),各部件对操作数进行何种运算由控制信号S3-S0和CN来 决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为ALU的输出。如果是影响进位 的运算,还将置进位标志FC,在运算结果输出前,置ALU零标志。ALU中所有模块集成在一片CPLD 中。 图1-1运算器原理图 逻辑运算部件由逻辑门构成,较为简单,而后面又有专门的算术运算部件设计实验,在此对这两个部件不再赘述。移位运算采用的是桶形移位器,一般采用交叉开关矩阵来实现,交叉开关的原理如图1-2所示。 图1-2中显示的是一个4X4的矩阵(系统中是一个8X8的矩阵)。每一个输入都通过开关与一个输出相连,把沿对角线的开关导通,就可实现移位功能,即: (1)对于逻辑左移或逻辑右移功能,将一条对角线的开关导通,这将所有的输入位与所使用的输 出分别相连,而没有同任何输入相连的则输出连接0。 (2)对于循环右移功能,右移对角线同互补的左移对角线一起激活。例如,在4位矩阵中使用 '右1'和‘左3'对角线来实现右循环1位。 (3)对于未连接的输出位,移位时使用符号扩展或是0填充,具体由相应的指令控制。使用另 外的逻辑进行移位总量译码和符号判别。 运算器部件由一片CPLD实现。ALU的输入和输出通过三态门74LS245连到CPU内总线上,另外还有指示灯标明进位标志FC和零标志FZ。请注意:实验箱上凡丝印标注有马蹄形标记 ‘’,表示这两根排针之间是连通的。图中除T4和CLR,其余信号均来自于ALU单元的排线 座,实验箱中所有单元的T1、T2、T3、T4都连接至控制总线单元的T1、T2、T3、T4, CLR都连接至CON单元的CLR按钮。T4由时序单元的TS4提供(时序单元的介绍见附录二),其余控制信号均由CON单元的二进制数据开关模拟给出。控制信号中除T4为脉冲信号外,其余均为电平信号, 其中ALU_B为低有效,其余为高有效。 暂存器A和暂存器B的数据能在LED灯上实时显示,原理如图1-3所示(以A0为例,其

数值代数上机实验报告

数值代数课程设计实验报告 姓名: 班级: 学号: 实验日期: 一、实验名称 代数的数值解法 二、实验环境 MATLAB7.0 实验一、平方根法与改进平方根法 一、实验要求: 用熟悉的计算机语言将不选主元和列主元Gasuss 消元法编写成通用的子程序,然后用编写的程序求解下列方程组 ?????????? ????????????=????????????????????????? ? ? ? ? ? ? ?? ?????? ???? ?--?1415151515768 168 168 168 1681612321 n n n n n x x x x x x 用所编的程序分别求解40、84、120阶方程组的解。 二、算法描述及实验步骤 GAuss 程序如下: (1)求A 的三角分解:LU A =; (2)求解b y =L 得y ; (3)求解y x =U 得x ; 列主元Gasuss 消元法程序如下: 1求A 的列主元分解:LU PA =; 2求解b y P L =得y ; 3求解y x =U 得x ;

三、调试过程及实验结果: %----------------方程系数---------------- >> A1=Sanduijiaozhen(8,6,1,40); >> A2=Sanduijiaozhen(8,6,1,84); >> A3=Sanduijiaozhen(8,6,1,120); >> b1(1)=7;b2(1)=7;b3(1)=7; >> for i=2:39 b1(i)=15; end >> b1(40)=14; >> for i=2:83 b2(i)=15; end >> b2(40)=14; >> for i=2:119 b1(i)=15; end >> b3(120)=14; %----------------方程解---------------- >> x11=GAuss(A1,b1') >> x12=GAuss Zhu(A1,b1') >> x21=GAuss(A2,b2') >> x22=GAuss Zhu(A3,b3') >> x31=GAuss(A3,b3') >> x32=GAuss Zhu(A3,b3') 运行结果:(n=40) GAuss消元法的解即为 x11 = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 列主元GAuss消元法的解即为x12 =

模式识别第二次上机实验报告

北京科技大学计算机与通信工程学院 模式分类第二次上机实验报告 姓名:XXXXXX 学号:00000000 班级:电信11 时间:2014-04-16

一、实验目的 1.掌握支持向量机(SVM)的原理、核函数类型选择以及核参数选择原则等; 二、实验内容 2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为: label index1:value1 index2:value2 ... 其中对于分类来说label为类标识,指定数据的种类;对于回归来说label为目标值。(我主要要用到回归) Index是从1开始的自然数,value是每一维的特征值。 该过程可以自己使用excel或者编写程序来完成,也可以使用网络上的FormatDataLibsvm.xls来完成。FormatDataLibsvm.xls使用说明: 先将数据按照下列格式存放(注意label放最后面): value1 value2 label value1 value2 label 然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏执行行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。将该数据存放到文本文件中进行下一步的处理。 3.对数据进行归一化。 该过程要用到libsvm软件包中的svm-scale.exe Svm-scale用法: 用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值:lower = -1,upper = 1,没有对y进行缩放)其中,-l:数据下限标记;lower:缩放后数据下限;-u:数据上限标记;upper:缩放后数据上限;-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为–y -1 1 )-s save_filename:表示将缩放的规则保存为文件save_filename;-r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;filename:待缩放的数据文件(要求满足前面所述的格式)。缩放规则文件可以用文本浏览器打开,看到其格式为: y lower upper min max x lower upper index1 min1 max1 index2 min2 max2 其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为: (Value-lower)*(max-min)/(upper - lower)+lower 其中value为归一化后的值,其他参数与前面介绍的相同。 建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。 4.训练数据,生成模型。 用法:svmtrain [options] training_set_file [model_file] 其中,options(操作参数):可用的选项即表示的涵义如下所示-s svm类型:设置SVM 类型,默

数学实验1

中国海洋大学本科生课程大纲 课程属性:公共基础/通识教育/学科基础/专业知识/工作技能,课程性质:必修、选修 一、课程介绍 1.课程描述: 数学实验是由于计算机技术和科学计算软件的迅猛发展应运而生的一门较新的数学课程,它改变了数学只靠纸和笔的传统形象,将实验的手段引入到数学的学习和研究中。 本课程为大学二年级数学院的学生开设。它不是讲授新的数学知识,而是让学生利用已有的数学知识去解决一些经简化的实际问题。大多数实验的一般过程是:对于给出的实际问题,建立数学模型、选择适当的数学方法、用科学计算软件MATLAB编程计算、对运算结果进行分析、给出结论。 本课程以MATLAB软件为主要的实验工具,采用以学生动手动脑为主,教师讲授和点评、小组讨论、报告为辅的教学方式。 通过本课程的学习,学生用数学解决实际问题的意识和能力可以得到强化和提高,更切实地体会到数学的用处,增加学习兴趣,提高创造力。 2.设计思路: 本课程旨在训练用数学解决实际问题的能力。实验内容的选取是基于学生具备MATLAB语言的初步编程能力、并学习了数学分析、高等代数、解析几何、运筹学基础(初步)、数学实验基础、常微分方程、数值分析或计算方法、概率论等数学课程的基础之上。课程共分七个基础实验和一个综合实验依次进行。七个基础实验是:MATLAB 基础知识复习、常微分方程(组)、数据建模——插值与拟合、古典密码学、图与网络 - 6 -

优化、动态规划、遗传算法。 基础实验涉及的数学内容较为单一、数学模型和求解方法较简单,是对“用数学”能力的基本训练。 综合实验以三人为一组进行,所涉及到的数学知识范围更广,建模和求解的难度更大。综合实验的题目可以小组自拟或在任课教师拟定的题目中选择。任课教师拟定的题目将于综合实验开始前一周给出。各小组在实验前要上交一份“开题报告”:写出问题的重述、模型建立和求解的思路、可能遇到的主要困难及解决方案。通过认真完成综合实验,“用数学”的能力可以有一个较大的提升。 3.课程与其他课程的关系: 先修课程:高等代数I、高等代数II、空间解析几何、数学分析I、数学分析II、数学实验基础;常微分方程;计算方法(或数值分析、数值代数); 并行课程:概率论等; 后置课程:数学模型;数学建模实践 二、课程目标 本课程的目标是为大二数学类专业学生提供用数学知识解决实际问题的系统训练。 到课程结束时,学生应能: (1)对简单的实际问题建立数学模型; (2)采用适当的数学方法,用MA TLAB软件求解模型,并根据计算结果对模型进行评价和改进; (3)具备初步的科研写作能力:学会如何将问题、模型、解决思路、求解方法、计算结果和结论简洁、清晰、严谨地呈现; (4)针对难度较高的实际问题通过小组成员的独立思考、相互合作与激励,共同解决。提高沟通交流能力,促进相互学习,加深对有关数学知识的理解,进一步提升用数学知识和MATLAB软件解决实际问题的能力。 三、学习要求 要完成所有的课程任务,学生必须: (1)按时上课,认真听讲,积极参与课堂讨论、随堂练习和测试; - 6 -

计算方法第二章方程求根上机报告

实验报告名称 班级:学号:姓名:成绩: 1实验目的 1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点。 2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法。 2 实验内容 用牛顿法和割线法求下列方程的根 x^2-e^x=0; x*e^x-1=0; lgx+x-2=0; 3实验步骤 1)根据二分法和牛顿迭代法,割线法的算法编写相应的求根函数; 2)将题中所给参数带入二分法函数,确定大致区间; 3)用牛顿迭代法和割线法分别对方程进行求解; 3 程序设计 牛顿迭代法x0=1.0; N=100; k=0; eps=5e-6; delta=1e-6; while(1) x1=x0-fc1(x0)/fc2(x0); k=k+1; if k>N disp('Newmethod failed')

break end if(abs(x1-x0)=delta) c=x1; x1=cutnext(x0,x1); x0=c; %x0 x1μYí?μ?μ?x1 x2 è?è?±£′??úx0 x1 end k=k+1; if k>N disp('Cutline method failed') break; end if(abs(x1-x0)

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 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 a b 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)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=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 #include 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:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

MATLAB第二次上机实验报告

电子科技大学电子工程学院标准实验报告(实验)课程名称MATLAB与数值分析 学生姓名: 学号: 指导教师:

一、实验名称 实验二 线性方程组求解和函数的数值逼近 二、实验目的 通过上机实验,使学生对病态问题、线性方程组求解和函数的数值逼近方法有一个初步的理解。 实验涉及的核心知识点:病态方程求解、矩阵分解和方程组求解、Lagrange 插值。 实验重点与难点:算法设计和MATLAB 编程 三、实验内容 1. 对高阶多项式 ()()() ()()20 1 1220k p x x x x x k ==---=-∏ 编程求下面方程的解 ()190p x x ε+= 并绘图演示方程的解与扰动量ε的关系。 2. 对2 20n =,生成对应的Hilbert 矩阵,计算矩阵的条件数;通过先确定解获得常向量 b 的方法,确定方程组 ()n H x b = 最后,用矩阵分解方法求解方程组,并分析计算结果。 3. 对函数 ()2 1 125f x x = + []1,1x ∈- 的Chebyshev 点 ()()21cos 21k k x n π ?? -= ? ?+? ? ,1,2,,1k n =+ 编程进行Lagrange 插值,并分析插值结果。 四、实验数据及结果分析 1. 对高阶多项式

()()() ()()20 1 1220k p x x x x x k ==---=-∏ 编程求下面方程的解 ()190p x x ε+= 并绘图演示方程的解与扰动量ε的关系。 p=[1,-1]; for i=2:20 n=[1,-i]; p=conv(p,n); % 求多项式乘积 end m=zeros(1,21); % m 的最高次幂为20,有21项 hold on x=1:20; d=[-1,0,0.1,0.5,1]; for i=1:5 delt=d(i); m(2)=delt; y=(roots(p+m))'; % 求多项式的根 plot(x,y,'-o','color',[i/5,i/20,i/10]); end title('方程p(x)=0的解与扰动量delt 的关系') legend('delt=-1','delt=0','delt=0.1','delt=0.5','delt=1') 2468101214161820 010 20 30 40 50 60 方程p(x)=0的解与扰动量delt 的关系 delt=-1delt=0delt=0.1delt=0.5delt=1

偏微分方程数值解课程的思索

科技信息 SCIENCE &TECHNOLOGY INFORMATION 2012年第9期偏微分方程(PDE )是众多描述物理,化学和生物现象的数学模型的基础,其最新应用已经扩展到经济,金融预测,图像处理等很多领域。要通过PDE 模型研究这些问题,就需要求解PDE 方程,但是绝大多数微分方程特别是偏微分方程,很难得到其解析形式的解。我们希望能够借助于计算机采用数值方法求得偏微分方程的近似解,这就是《偏微分方程数值解》课程的主要内容。 《偏微分方程数值解》是信息与计算科学专业的一门专业课,它与《数值代数》,《数值逼近》一起构成信息与计算科学专业信息与计算方向的核心课程,在专业培养中占有非常重要的地位。随着计算机技术的飞速发展,偏微分方程数值解得到了前所未有的发展和应用,与此同时也暴露了《偏微分方程数值解》课程传统教学中的很多不足之处,这使得该门课程在教学上有很多地方需要调整。 笔者长年教授《偏微分方程数值解》课程,在该门课程的教学改革方面做了一些思索和尝试,主要包括改革教学方法,更新教学模式,加强介绍背景知识,融入数学建模思想,教学与科研相结合,教学与计算软件相结合,增设实验课,改革考核方式等。 1改革教学方法,更新教学模式 由于数学课程大多理论性较强,趣味性较弱,为了激发学生学习兴趣,在教学过程中,我们采用启发式、讨论式等多种教学方法,营造良好的课堂气氛,加强师生之间的交流,引导学生独立思考,强化科学思维的训练。在教学内容方面,不光教授公式推导,定理证明,同时注重算法思想的讲解和程序设计的讲解,同时安排一定课时的习题课,讲解典型习题和对每章进行总结。 由于《偏微分方程数值解》涉及较多的概念、公式和定理,大多数老师仍以传统的课堂教学为主,而少数年轻教师则喜欢用多媒体课件教学。传统的教学方法,虽然受到的批评最多,但也是用得最多,最能让大家普遍接受的一种方法,在算法推导、理论分析等方面,采用传统的板书讲解能更好地引导学生去感受和思考数学逻辑的过程以及创造性的思维过程,加深对数学理论的理解和认识,培养学生的逻辑和思维能力。而在讲述背景知识,算法的应用,算法的程序实现时候最好用多媒体课件进行演示。多媒体课件可以让学生更直观,更全面的理解算法的应用,另外使用多媒体课件还可以节省大段公式的板书时间,图示清楚、准确。但是如果全部使用多媒体课件上课,容易加快教学速度,淡化数学公式的推导以及定理的证明过程,不利于培养学生的数学思维能力。所以,我们认为需要将传统的教学方法和现代的教学手段结合起来,充分发挥各自的优势,在传统教学中穿插多媒体课件,根据教学内容选择合适的教学手段。 2加强知识背景的介绍,融入数学建模思想 《偏微分方程数值解》是理论知识与实际应用之间的桥梁,为学生使用计算机解决科学与工程中的实际问题打下良好的理论基础和应用基础。传统教学以分析,证明,推导为主,重理论,轻应用,缺少偏微分方程产生的实际背景的介绍和应用数值解的方法解决实际问题的实例。因此,我们在教授该课程的时候,注重与数学建模思想相结合,从实际问题出发,建立相应的偏微分方程模型,这样,学生就知道为什么要研究偏微分方程,偏微分方程能解决什么样的实际问题。 例如,我们考虑有衰减的扩散问题:有一个扩散源,某物质从此扩散源向四周扩散,沿x,y,z 三个方向的扩散系数分别为常数,衰减使质量的减少与浓度成正比,扩散前周围空间此物质的浓度为0,估计物质的分布。我们引导学生运用所学过的微积分的思想以及相应的物理知识,对这一问题进行建模,可以得到如下的模型: 鄣u =a 2鄣2 u 鄣x +b 2鄣2 u 鄣y +c 2鄣2 u 鄣z -k 2u 上述方程是常系数线性抛物型方程,它就是有衰减的扩散过程的数学模型。有了这样的铺垫,学生知道了扩散问题的数学模型就是抛物型方程,当然类似的环境污染,疾病流行等与扩散有关的实际问题可以用抛物型方程来描述,很自然的,接下来的问题就是如何求解上面的抛物型方程,学生的学习热情自然就提高了。 3教学与科研相结合 随着计算技术和计算机科学的发展,偏微分方程数值解法的内涵也在不断扩大,我们在讲授《偏微分方程数值解》课程中引进近年来最新的理论和最新的方法,这样可以开阔学生的视野,激发学生的学习情趣,锻炼学生的自学能力。例如我们除了介绍有限差分法,有限元法,有限体积法等经典的具有一般性的方法,还介绍了多重网格法。由于近些年来,人们将辛方法应用于哈密顿常微分方程系统以及推广应用于微分方程的兴趣日益增长,我们也简单介绍了这一主题,并且用这个思想去分析逼近波动方程的交错蛙跳格式。在讲授方法的同时,还注意介绍这些方法的发展历史,设计思想和理论依据,并给出了相当丰富的参考文献,让基础好的同学自己去挖掘感兴趣的问题。承担课题的老师,可以把自己课题中与此课程相关的小问题拿出来供有兴趣的同学琢磨,有助于锻炼学生的科研能力。 4教学与计算软件相结合 由Mathworks 公司推出的MATLAB 软件,现在已经发展成功能强大,适合科学和工程计算的软件,使用MATLAB 编程,语言简洁,数据处理方便,具有强大的数值计算功能和图形展示功能,因此,将MATLAB 融入偏微分方程数值解的教学,更能与时俱进,更有效地提高教学质量。 MATLAB 采用有限元的方法求解各种PDE ,它提供了两种方法解决PDE 问题,一是pdepe 函数,它可以求解一般的PDEs ,具有较大的通用性,但只支持命令行形式的调用。二是PDE 工具箱,可以求解特殊PDE 问题,但有较大的局限性。只能求解二阶PDE 问题,不能求解偏微分方程组。PDE 工具箱支持命令行形式求解,但需要记住大量命令及其调用格式。不过好在它提供了GUI 界面,可以把我们从复杂的编程中解脱出来,还有很好的动画演示功能,尤其适合刚入门的学生。 我们在授课过程中精选与生活,生产密切相关的应用实例,鼓励学生自己动手建立模型,应用数学软件和所学的知识求解模型。例如考虑一个带有矩形孔的金属板上的热传导问题。板的左边保持在100℃,板的右边热量从板向环境空气定常流动,其他边及内孔边界保持绝缘。初始t=t 0时板的温度为0。对于这样的一个实际问题,我们先应用所学的数学分析和数学建模知识,对原问题建立如下偏微分方程模型: 鄣u 鄣t -△u =0,u =100, 鄣u =-1,鄣u =0,u|t=t 0 =0△△△△△△△△△△△△△△ △. 不妨设界顶点坐标为(-0.5,-0.8),(0.5,-0.8),(0.5,0.8),(-0.5,0.8)。内边界顶点坐标为(-0.005,-0.4),(0.05,-0.4),(0.05,0.4),(-0.05,0.4)。对于这样的一个抛物型方程,我们设计其数值计算方法,然后分别用 偏微分方程数值解课程的思索 邹永魁 (吉林大学数学与科学学院吉林 长春 130012) 【摘要】探讨《偏微分方程数值解》课程教学改革的思考与体会,主要包括教学方法和教学模式的改革,加强背景知识的介绍,将科研前沿带入课堂,将MATLAB 融入教学以及考核方式的改革等。 【关键词】偏微分方程数值解;教学改革;MATLAB ;综合评价体系○高校讲坛○200

数值分析拉格朗日插值法上机实验报告

课题一:拉格朗日插值法 1.实验目的 1.学习和掌握拉格朗日插值多项式。 2.运用拉格朗日插值多项式进行计算。 2.实验过程 作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)二、算法步骤 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标; 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日

插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:");

scanf("%d",&n); if(n<=0) { printf("Error! The value of n must in (0,20)."); getch();return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); } printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); } 举例如下:已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。

计算机组成原理上机实验报告

《计算机组成原理实验》课程实验报告 实验题目组成原理上机实验 班级 1237-小 姓名 学号 时间 2014年5月 成绩

实验一基本运算器实验 1.实验目的 (1)了解运算器的组成原理 (2)掌握运算器的工作原理 2.实验内容 输入数据,根据运算器逻辑功能表1-1进行逻辑、移位、算术运算,将运算结果填入表1-2。 表 1-1运算器逻辑功能表 表1-2运算结果表

3.实验原理 本实验的原理如图1-1所示。 运算器内部含有三个独立运算部件,分别为算术、逻辑和移位运算部件,要处理的数据存于暂存器 A 和暂存器 B,三个部件同时接受来自 A 和 B 的数据(有些处理器体系结构把移位运算器放于算术和逻辑运算部件之前,如 ARM),各部件对操作数进行何种运算由控制信号S3…S0和 CN 来决定,任何时候,多路选择开关只选择三部件中一个部件的结果作为 ALU 的输出。如果是影响进位的运算,还将置进位标志 FC,在运算结果输出前,置 ALU 零标志。ALU 中所有模块集成在一片 CPLD 中。 图 1-1 运算器原理图 逻辑运算部件由逻辑门构成,较为简单,而后面又有专门的算术运算部件设计实验,在此对这两个部件不再赘述。移位运算采用的是桶形移位器,一般采用交叉开关矩阵来实现,交叉开关的原理如图1-2所示。 图1-2中显示的是一个 4X4 的矩阵(系统中是一个 8X8 的矩阵)。每一个输入都通过开关与一个输出相连,把沿对角线的开关导通,就可实现移位功能,即: (1)对于逻辑左移或逻辑右移功能,将一条对角线的开关导通,这将所有的输入位与所使用的输出分别相连,而没有同任何输入相连的则输出连接 0。 (2)对于循环右移功能,右移对角线同互补的左移对角线一起激活。例如,在 4 位矩阵中使用‘右1’和‘左3’对角线来实现右循环 1 位。 (3)对于未连接的输出位,移位时使用符号扩展或是 0 填充,具体由相应的指令控制。使用另外的逻辑进行移位总量译码和符号判别。 运算器部件由一片 CPLD 实现。ALU 的输入和输出通过三态门 74LS245 连到 CPU 内总线上,另外还有指示灯标明进位标志 FC 和零标志 FZ。请注意:实验箱上凡丝印标注有马蹄形标记‘’,表示这两根排针之间是连通的。图中除 T4 和 CLR,其余信号均来自于 ALU 单元的排线座,实验箱中所有单元的 T1、T2、T3、T4 都连接至控制总线单元的 T1、T2、T3、T4,CLR 都连接至 CON 单元的 CLR 按钮。T4 由时序单元的 TS4 提供(时序单元的介绍见附录二),其余控制信号均由 CON 单元的二进制数据开关模拟给出。控制信号中除 T4 为脉冲信号外,其余均为电平信号,其中 ALU_B 为低有效,其余为高有效。 暂存器 A 和暂存器 B 的数据能在 LED 灯上实时显示,原理如图1-3 所示(以 A0 为例,其

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