文档库 最新最全的文档下载
当前位置:文档库 › 华科计算机并行实验报告

华科计算机并行实验报告

华科计算机并行实验报告
华科计算机并行实验报告

课程设计报告题目:并行实验报告

课程名称:并行编程原理与实践

专业班级:

学号:

姓名:

指导教师:

报告日期:

计算机科学与技术学院

目录

1,实验一 (1)

1 实验目的与要求 (1)

1.1实验目的 (1)

1.2实验要求 (1)

2 实验内容 (1)

2.1.1熟悉pthread编程 (1)

2.1.2简单的thread编程 (2)

2.2.1熟悉openMP编程 (3)

2.3.1熟悉MPI编程 (4)

2,实验2~5 (7)

1 实验目的与要求 (7)

2 算法描述 (7)

3.实验方案 (8)

4实验结果与分析 (8)

3 心得体会 (10)

附录: (10)

3 蒙特.卡罗算法求π的并行优化 (19)

1.蒙特.卡罗算法基本思想 (19)

2.工作过程 (20)

3.算法描述 (20)

4 设计与实现 (21)

5 结果比较与分析 (23)

6 思考与总结 (24)

1,实验一

1 实验目的与要求

1.1实验目的

1)熟悉并行开发环境,能进行简单程序的并行开发,在Linux下熟练操作。

2)熟悉一些并行工具,如pthread,OpenMP,MPI等进行并行编程

3)培养并行编程的意识

1.2实验要求

1)利用pthread、OpenMP、MPI等工具,在Linux下进行简单的并行编程,并

且掌握其编译、运行的方法。

2)理解并行计算的基础,理解pthread、OpenMP、MPI等并行方法。

2 实验内容

2.1.1熟悉pthread编程

Linux系统下的多线程遵循POSIX线程接口,称为 pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。

下面是pthread编程的几个常用函数:

1,int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg);

返回值:若是成功建立线程返回0,否则返回错误的编号

形式参数:

pthread_t *restrict tidp 要创建的线程的线程id指针

const pthread_attr_t *restrict attr 创建线程时的线程属性

void* (start_rtn)(void) 返回值是void类型的指针函数

void *restrict arg start_rtn的行参

2 , int pthread_join( pthread_t thread, void **retval );

thread表示线程ID,与线程中的pid概念类似;retval用于存储等待线程的返回值连接函数pthread_join()是一种在线程间完成同步的方法。该函数阻塞调用该函数线程直到thread指定的线程终止。

2.1.2简单的thread编程

1)程序创建了两个进程,分别调用函数myThread1和myThread2.主程序等两个子进程执

行完后输出语句。

#include

#include

void *myThread1(void)

{

int i;

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

{

printf("This is the 1st pthread,created by zieckey./n");

sleep(1);

}

}

void *myThread2(void)

{

int i;

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

{

printf("This is the 2st pthread,created by zieckey./n");

sleep(1);

}

}

int main()

{

int i=0, ret=0;

pthread_t id1,id2;

ret = pthread_create(&id1, NULL, (void*)myThread1, NULL);

if (ret)

{

printf("Create pthread error!/n");

return 1;

}

ret = pthread_create(&id2, NULL, (void*)myThread2, NULL);

if (ret)

{

printf("Create pthread error!/n");

return 1;

}

pthread_join(id1, NULL);

pthread_join(id2, NULL);

printf("this is the main pthread!\n");

return 0;

}

2.2.1熟悉openMP编程

OpenMp提供的这种对于并行描述的高层抽象降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,OpenMP是一个很好的选择。同时,使用OpenMP也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,但在OpenMp中,OpenMp库从程序员手中接管了部分这两方面的工作。

在编写使用OpenMP 的程序时,则需要先include OpenMP的头文件:omp.h。而要将for循环并行化处理只要在前面加上一行#pragma omp parallel for就够了!如下:

#include

#include

#include

void Test (int n) {

for(int i = 0; i < 10000; ++i) {

//do nothing, just waste time

}

printf("%d, ", n);

}

int main(int argc,char* argv[]) {

#pragma omp parallel for

for(int i = 0; i < 10; ++i)

Test( i );

Printf("ok!\n");

}

运行上述程序,:

若串行执行上述循环:

并行后结果顺序发生了改变。

2.3.1熟悉MPI编程

MPI即消息传递接口,其本质就是MPI标准定义了一组函数,使应用程序可以将消息从一个MPI进程送到另一个MPI进程。消息(Message)是从一个有定义的缓冲区(buffer)传送到一个有定义的接收缓冲区。有定义的缓冲区是指这个缓冲区是有类型的,即typed buffer。

基本API:

1、int MPI_Init(int *argc, char **argv)

MPI_Init 是MPI程序的第一个调用,它完成MPI程序的所有初始化工作,启动MPI环境,标志并行代码的开始。

2、int MPI_Finalize(void)

MPI_Finalize 是MPI程序的最后一个调用,它结束MPI程序的运行,标志并行代码的结束,结束除主进程外其它进程。其之后串行代码仍可在主进程(rank = 0)上继续运行。

3、int MPI_Comm_size(MPI_Comm comm, int *size);

获取进程个数p,进程个数是在编译的时候,我们自己指定的。

4、int MPI_Comm_rank(MPI_Comm comm, int *rank);

MPI获取当前进程的RANK,rank值取址范围是0~p-1,RANK值唯一的表示了进程的ID,其中Rank=0的为主进程

5、进程间的相互通信

int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);

发送函数:当前进程将以buf为初始地址,长度为count且元素类型为datatype的信息发动给rank值为dest的进程,这条消息的标识符为tag。其中datatype有MPI_INT, MPI_FLOAT等常用类型;Tag的作用是用于区分一对进程之间发送的不同信息

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status);

接受函数:从rank值为source的进程接受标识符为tag的信息,存入以buf 为初始地址,长度为count的存储区域中,类型为datatype.

MPI编程例子:

#include

#include

int main(int argc,char **argv)

{

int size=0;

int rank=0;

int A[4]={5,9,4,7};

int B[4]={10,6,13,21};

int C[4];

MPI_Status status;

MPI_Init(&argc,&argv); //init mpi

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

if(rank==0){

int i;

for(i=1;i

MPI_Send(B+(i-1),2,MPI_INT,i,0,MPI_COMM_WORLD);

}

for(i=1;i

MPI_Send(A+(i-1),2,MPI_INT,i,1,MPI_COMM_WORLD);

}

for(i=1;i

MPI_Recv(C+(2i-2),2,MPI_INT,i,2,MPI_COMM_WORLD,&status);

}

}

else

{

int a[2],b[2],c[2];

MPI_Recv(&b,2,MPI_INT,0,0,MPI_COMM_WORLD,&status);

MPI_Recv(&a,2,MPI_INT,0,1,MPI_COMM_WORLD,&status);

c[0]=a[0]+b[0];

c[1]=a[1]+b[1];

MPI_Send(&c,2,MPI_INT,0,2,MPI_COMM_WORLD);

}

MPI_Finalize();

return 0;

}

实例是计算两个二维数组相加,每个数组的元素有4个,通过创建子进程,每个子进程得到父进程传输的两个元素,做加法后回送给主进程的结果数组。通过MPI的通信机制保证了结果的正确性。

2,实验2~5

1 实验目的与要求

1.使用pthread的方法并行的实现矩阵乘法的运算;

2.使用OpenMP的方法并行的实现矩阵乘法的运算;

3.使用MPI的方法并行的实现矩阵乘法的运算;

4.使用MPI的方法并行的实现矩阵乘法的运算;

2 算法描述

本次实验我采用的是两个N*N的矩阵相乘,在非并行的情况下,核心代码如下:

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

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

{

C[i][j] = 0;

for (k = 0; k < N; k++)

C[i][j] += A[i][k] * B[k][j];

}

该算法两层循环的时间复杂度为O(N3),效率并不高。但是每一层循环之间是相互独立的,即任意一层的执行不会影响其他循环执行的结果。所以我们可以尝试着把最外层循环for (i = 0; i < N; i++)并行化,这里我采用OpenMP 举例。

#pragma omp parallel for num_threads(PRO_NUM)

{

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

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

{

C[i][j] = 0;

for (k = 0; k < N; k++)

C[i][j] += A[i][k] * B[k][j];

}

}

我们应该注意到,如果PRO_NUM>>N,那么将会有很大一部分线程没有利用起

来。然而OpenMP提供的动态调整的功能很好地解决了这个问题。

#pragma omp parallel for num_threads1(dynamic)

{

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

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

{

C[i][j] = 0;

for (k = 0; k < N; k++)

C[i][j] += A[i][k] * B[k][j];

}

}

3.实验方案

实验二:首先将矩阵的乘法运算分成10个步骤,每个步骤都分别由一个独立的线程来完成,这里我采用的是1000*1000的方阵A和B。然后就是向矩阵A 和B赋值,为了便于检验计算结果,我将矩阵A和B都赋值为1。最后利用实验室的机群进行编辑、编译和运行,同时输出整个并行计算所用的时间。

实验三:与前一个实验不同的是使用OpenMP不需要自己去定义每一个线程,而是会自动帮你分配计算任务,显得非常的智能与便利,同时这也使得实验的难度大大减小。首先我定义了两个1000*1000的方阵A和B。然后向矩阵A和B赋值,为了便于检验计算结果,我将矩阵A和B都赋值为1。最后利用实验室的机群进行编辑、编译和运行,同时输出整个并行计算所用的时间。

实验四:同样是将矩阵乘法运算分成10个步骤,每个从线程计算其中的一个步骤并协同完成整个运算。但是MPI不仅需要自己划分每个线程负责的预算量,还需要手动控制线程之间的通信。这无疑增加了实验的难度,但是好处是效率非常高,这在后面的实验结果部分会提到。整个实验利用实验室的机群进行编辑、编译和运行,同时输出整个并行计算所用的时间。

实验五:实验五采用CUDA编程的方法借助GPU和CPU合作来实现矩阵乘法。首先把矩阵分成10个块,然后分配给各个线程并行完成矩阵的乘法运算。其中矩阵A和B的定义与初始化都和前面的实验保持一致。在机群中编译并运行后输出并行计算的时间。

4实验结果与分析

本次并行编程实验的重点是程序并行带来的实际效率的提升,而运行时间则是运行效率最直观的体现,从运行时间上可看出效率的提高。文件内容如下:

实验二:运行./pthread.c,用时3.40s,得到的结果正确,效率确实得到了提高。

得到的结果矩阵:

实验三:运行./OpenMP,用时4.09s,编程简单带来的代价就是开销增大。

实验四:运行 mpirun -np 10 MPI,用时0.081575s。相比于多线程和OpenMP 效率提高了50多倍,真的很强大。

实验五:运行./CUDA,用时4.32s。原以为应该比OpenMP快得多,然而结果却不是很理想。

3 心得体会

通过本次实验我熟悉了并行编程的环境,初步接触并实践了并行编程的思想,同时通过查询资料我也对pthread,OpenMP,MPI,CUDA编程的思想有了基本的认识,并利用这些并行编程语言实现了矩阵乘法的并行运算,也得到正确的结果。

这次实验让我学到了很多,打破了我以往固有的串行编程思维。以前做课程设计的时候,想的都是怎么完成需要实现的功能,而对程序的运行速度都没怎么考虑。通过这次试验,我体会到当我们面临大量的数据处理时,选择的方法直接影响了程序执行时间的量级,可能一个好的方法,就可以把效率提高几十上百倍,这是非常可观的。我们在后面的编程中,如果能发掘大量的并行性,带来的收益一定很大。

附录:

实验2:

#include

#include

#include

#include

#include

#include

#define MAX 1000

int C[MAX][MAX];

pthread_t tids[MAX];

int m=1000,n=1000,k=1000;

int main(void)

{

int i,j;

srand(time(NULL));

for(i=0;i

for(j=0;j

{

A[i][j] = 1;

B[i][j] =1;

}

for(i=0;i

{

tmp[i]=i;

if(pthread_create(&tids[i],NULL,matrix_mul,(void *)(tmp+i)))

{

perror("pthread_create");

exit(1);

}

}

for(i=0;i

pthread_join(tids[i],NULL);

clock_t finish=clock();

printf("并行计算用时%.2f秒\n",(long)(finish-start)/1E6);

for(i=0;i

{

for(j=0;j

{

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

}

printf("\n");

}

printf("\n");

return 0;

}

void *matrix_mul(void *arg)

{

int m=*(int *)arg;

int i,j,l;

int sum=0;

for(j=0;j

{

sum = 0;

for(l=0;l

sum += A[m][l]*B[l][j];

C[m][j] = sum;

}

}

实验3:

#include

#include

#include

#include

#define MAX 1000

#define RANG 10

double matrix_mul(int m,int n,int k,int num_thread);

int A[MAX][MAX];

int B[MAX][MAX];

int C[MAX][MAX];

int main ()

{

int m,n,k,i,j;

srand(time(NULL));

for(i=0;i

for(j=0;j

{

A[i][j] =1;

B[i][j] =1;

}

double matrix_mul(m,n,k,10);

for(i=0;i

{

for(j=0;j

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

printf("\n");

}

printf("\n");

return 0;

}

double matrix_mul(int m,int n,int k,int num_thread)

{

int i,j,l,sum;

struct timeval start,end;

float s=0;

gettimeofday(&start,NULL);

#pragma omp parallel shared(A,B,C) private(i,j,l,sum) num_threads(num_thread)

{

#pragma omp for schedule(dynamic)

for(i=0;i

for(j=0;j

{

sum = 0;

for(l=0;l

sum += A[i][l]*B[l][j];

C[i][j] = sum;

}

}

gettimeofday(&end,NULL);

s=(https://www.wendangku.net/doc/a29572889.html,_https://www.wendangku.net/doc/a29572889.html,_sec)*1000000+(https://www.wendangku.net/doc/a29572889.html,_https://www.wendangku.net/doc/a29572889.html,_usec);

return s/1000000;

}

实验4:

#include

#include

#include

#define N 1000

int A[N][N], B[N][N];

unsigned long long C[N][N];

int main(int argc, char **argv)

{

int process_num;

int process_id;

int slave_num;

int dest;

int source;

int rows;

int row_aver;

int remainder;

int offset;

int i, j, k;

double start_time, end_time;

MPI_Init(&argc, &argv);

MPI_Status status;

MPI_Comm_rank(MPI_COMM_WORLD, &process_id);

MPI_Comm_size(MPI_COMM_WORLD, &process_num);

srand((unsigned int)time(NULL));

slave_num = process_num - 1;

if(process_id == 0)

{

for (i=0; i

{

for (j=0; j

{

A[i][j] =1;

B[i][j] =1;

C[i][j] = 0;

}

}

row_aver = N / slave_num;

remainder = N % slave_num;

offset = 0;

for(dest=1; dest<=slave_num; dest++)

{

rows = (dest <= remainder) ? row_aver+1 : row_aver;

printf("sending %d rows to process %d\n", rows, dest);

MPI_Send(&offset, 1, MPI_INT, dest, 1, MPI_COMM_WORLD);

MPI_Send(&rows, 1, MPI_INT, dest, 1, MPI_COMM_WORLD);

MPI_Send(&A[offset][0], rows*N, MPI_INT, dest, 1, MPI_COMM_WORLD);

MPI_Send(&B, N*N, MPI_INT, dest, 1, MPI_COMM_WORLD);

offset += rows;

}

start_time = MPI_Wtime();

for(source=1;source<=slave_num;source++)

{

MPI_Recv(&offset,1, MPI_INT, source, 2, MPI_COMM_WORLD, &status);

MPI_Recv(&rows,1, MPI_INT, source, 2, MPI_COMM_WORLD, &status);

MPI_Recv(&C[offset][0], rows*N, MPI_UNSIGNED_LONG_LONG, source, 2, MPI_COMM_WORLD, &status);

}

end_time = MPI_Wtime();

printf("process cost %f seconds\n", end_time-start_time);

}

if(process_id > 0)

{

MPI_Recv(&offset, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);

MPI_Recv(&rows, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);

MPI_Recv(&A, rows*N, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);

MPI_Recv(&B, N*N, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);

for(i=0; i

{

for (k=0; k

{

int tmp = A[i][k];

for (j=0; j

C[i][j] += tmp*B[k][j];

}

}

MPI_Send(&offset, 1, MPI_INT, 0,2, MPI_COMM_WORLD);

MPI_Send(&rows,1,MPI_INT, 0,2, MPI_COMM_WORLD);

MPI_Send(&C,rows*N,MPI_UNSIGNED_LONG_LONG,0,2, MPI_COMM_WORLD);

}

MPI_Finalize();

return 0;

}

实验5:

#include

#include

#include

#include

#include

#define NUM_THREADS 256

bool InitCUDA()

{

int count;

cudaGetDeviceCount(&count);

if(count == 0)

{

fprintf(stderr,"There is no device.\n");

return false;

}

int i;

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

{

cudaDeviceProp prop;

if(cudaGetDeviceProperties(&prop, i) == cudaSuccess)

{

if(prop.major >= 1)

break;

}

}

if(i == count)

{

fprintf(stderr,"There is no device supporting CUDA 1.X.\n");

return false;

}

cudaSetDevice(i);

return true;

}

void matgen(float *a,int lda,int n)

{

int i,j;

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

{

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

a[i*lda + j] = (float)rand()/RAND_MAX +

(float)rand()/(RAND_MAX*RAND_MAX);

}

}

void matmult(const float* a,int lda,const float* b,int ldb,

float* c,int ldc,int n)

{

int i,j,k;

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

{

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

{

double t = 0;

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

t += a[i*lda + k]*b[k*ldb + j];

c[i*ldc + j] = t;

}

}

}

void compare_mat(const float* a,int lda,

const float* b,int ldb,int n)

{

float max_err = 0;

float average_err = 0;

int i,j;

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

{

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

{

if(b[i*ldb + j] != 0)

{

float err = fabs((a[i*lda + j] -

b[i*ldb + j])/b[i*ldb + j]);

if(max_err < err)

max_err = err;

average_err += err;

}

}

}

printf("Max error: %g Average error: %g\n",

max_err,average_err/(n*n));

}

__global__ static void matMultCUDA(const float* a,size_t lda, const float* b,size_t ldb,float* c,size_t ldc,int n)

{

const int tid = threadIdx.x;

const int bid = blockIdx.x;

const int idx = bid*blockDim.x + tid;

const int row = idx/n;

const int column = idx%n;

int i;

if(row < n && column < n)

{

float t = 0;

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

{

t += a[row*lda + i]*b[i*ldb + column];

}

c[row*ldc + column] = t;

}

}

clock_t matmultCUDA(const float* a,int lda,const float*b, int ldb,float* c,int ldc,int n)

{

float *ac,*bc,*cc;

clock_t start,end;

start = clock();

信号系统实验报告

电子工程系 信号与系统课程实验报告 2011-----2012学年第一学期 专业: 电子信息工程技术班级: 学号 : 姓名: 指导教师: 实常用连续时间信号的实现

一、实验目的 (1)了解连续时间信号的特点; (2)掌握连续时间信号表示的向量法和符号法; (3)熟悉MATLAB Plot函数等的应用。 二、实验原理 1、信号的定义 信号是随时间变化的物理量。信号的本质是时间的函数。 2、信号的描述 1)时域法 时域法是将信号表示成时间的函数f(t)来对信号进行描述的方法。信号的时间特性指的是信号的波形出现的先后,持续时间的长短,随时间变化的快慢和大小,周期的长短等。 2)频域(变换域)法 频域法是通过正交变换,将信号表示成其他变量的函数来对信号进行描述的方法。一般常用的是傅立叶变换。信号的频域特性包括频带的宽窄、频谱的分布等。 信号的频域特性与时域特性之间有着密切的关系。 3、信号的分类 按照特性的不同,信号有着不同的分类方法。 (1)确定性信号:可以用一个确定的时间函数来表示的信号。 随机信号:不可以用一个确定的时间函数来表示,只能用统计特性加以描述的信号。 (2)连续信号:除若干不连续的时间点外,每个时间点在t上都有对应的数值信号。离散信号:只在某些不连续的点上有数值,其他时间点上信号没有定义的信号。 (3)周期信号:存在T,使得等式f(t+T)=f(t)对于任意时间t都成立的信号。非周期信号:不存在使得等式f(t+T)=f(t)对于任意时间t都成立的信号。 绝对的周期信号是不存在的,一般只要在很长时间内慢走周期性就可以了。 (4)能量信号:总能量有限的信号。 功率信号:平均功率有限切非零的信号。 (5)奇信号:满足等式f(t)=--f(--t)的信号。偶信号:满足等式f(t)=f(--t)的信号。 三、涉及的MATLAB函数 1、plot函数 功能:在X轴和Y轴方向都按线性比例绘制二维图形。 调用格式: Plot(x,y):绘出相x对y的函数线性图。 Plot(x1,y1,x2,y2,…..):会出多组x对y的线性曲线图。 2、ezplot函数 功能:绘制符号函数在一定范围内的二维图形。简易绘制函数曲线。 调用格式: Ezplot (fun):在[-2π,2π]区间内绘制函数。 Ezplot (fun,[min,max]):在[min,max]区间内绘函数。 Ezplot (funx,funy):定义同一曲面的函数,默认的区间是[0, 2π]。】 3、sym函数 功能:定义信号为符号的变量。 调用格式:sym(fun):fun为所要定义的表达式。 4、subplot函数

数值分析实验报告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 姓名:万轩 实验二插值法

关于计算机实验报告的参考范文

关于计算机实验报告的参考范文 篇一 一、实验题目 文件和文件夹的管理 二、实验目的 1.熟悉Windows XP的文件系统。 2.掌握资源管理器的使用方法。 3.熟练掌握在Windows XP资源管理器下,对文件(夹)的选择、新建、移动、复制、删除、重命名的操作方法。 三、实验内容 1.启动资源管理器并利用资源管理器浏览文件。 2.在D盘创建文件夹 3.在所创建文件夹中创建Word文件。 4.对所创建文件或文件夹执行复制、移动、重命名、删除、恢复、创建快捷方式及设置共享等操作。 四、实验步骤 (一)文件与文件夹管理 1.展开与折叠文件夹。右击开始,打开资源管理器,在左窗格中点击“+”展开,点击“—”折叠 2.改变文件显示方式。打开资源管理器/查看,选择缩略、列表,排列图标等

3.建立树状目录。在D盘空白处右击,选择新建/文件夹,输入经济贸易学院,依次在新建文件夹中建立经济类1103 4..创建Word并保存。打开开始/程序/word,输入内容。选择文件/另存为,查找D盘/经济贸易学院/1103班/王帅,单击保存 5.复制、移动文件夹 6.重命名、删除、恢复。右击文件夹,选择重命名,输入新名字;选择删除,删除文件 7.创建文件的快捷方式。右击王帅文件夹,选择发送到/桌面快捷方式 8.设置共享文件。右击王帅,选择属性/共享/在网络上共享这个文件/确定 9.显示扩展名。打开资源管理器/工具/文件夹选项/查看/高级设置,撤销隐藏已知文件的扩展名 (二)控制面板的设置。 1.设置显示属性。右击打开显示属性/桌面、屏幕保护程序 2.设置鼠标。打开控制面板/鼠标/按钮(调整滑块,感受速度)、指针 3.设置键盘。打开控制面板/键盘/速度(调整滑块,感受速度)、硬件 4.设置日期和时间打开控制面板/日期和时间

信号与系统实验报告_1(常用信号的分类与观察)

实验一:信号的时域分析 一、实验目的 1.观察常用信号的波形特点及产生方法 2.学会使用示波器对常用波形参数的测量 二、实验仪器 1.信号与系统试验箱一台(型号ZH5004) 2.40MHz双踪示波器一台 3.DDS信号源一台 三、实验原理 对于一个系统特性的研究,其中重要的一个方面是研究它的输入输出关系,即在一特定的输入信号下,系统对应的输出响应信号。因而对信号的研究是对系统研究的出发点,是对系统特性观察的基本手段与方法。在本实验中,将对常用信号和特性进行分析、研究。 信号可以表示为一个或多个变量的函数,在这里仅对一维信号进行研究,自变量为时间。常用信号有:指数信号、正弦信号、指数衰减正弦信号、复指数信号、Sa(t)信号、钟形信号、脉冲信号等。 1、信号:指数信号可表示为f(t)=Ke at。对于不同的a取值,其波形表现为不同的形式,如下图所示: 图1―1 指数信号 2、信号:其表达式为f(t)=Ksin(ωt+θ),其信号的参数:振幅K、角频率ω、与初始相位θ。其波形如下图所示:

图1-2 正弦信号 3、指数衰减正弦信号:其表达式为其波形如下图: 图1-3 指数衰减正弦信号 4、Sa(t)信号:其表达式为:。Sa(t)是一个偶函数,t= ±π,±2π,…,±nπ时,函数值为零。该函数在很多应用场合具有独特的运用。其信号如下图所示:

图1-4 Sa(t)信号 5、钟形信号(高斯函数):其表达式为:其信号如下图所示: 图1-5 钟形信号 6、脉冲信号:其表达式为f(t)=u(t)-u(t-T),其中u(t)为单位阶跃函数。其信号如下图所示: 7、方波信号:信号为周期为T,前T/2期间信号为正电平信号,后T/2期间信号为负电平信号,其信号如下图所示 U(t)

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 912113850115 专业:数学与应用数学 指导老师:李建良

线性方程组的数值实验 一、课题名字:求解双对角线性方程组 二、问题描述 考虑一种特殊的对角线元素不为零的双对角线性方程组(以n=7为例) ?????????? ?????? ? ???? ?d a d a d a d a d a d a d 766 55 44 3 32 211??????????????????????x x x x x x x 7654321=?????????? ? ???????????b b b b b b b 7654321 写出一般的n (奇数)阶方程组程序(不要用消元法,因为不用它可以十分方便的解出这个方程组) 。 三、摘要 本文提出解三对角矩阵的一种十分简便的方法——追赶法,该算法适用于任意三对角方程组的求解。 四、引言 对于一般给定的d Ax =,我们可以用高斯消去法求解。但是高斯消去法过程复杂繁琐。对于特殊的三对角矩阵,如果A 是不可约的弱对角占优矩阵,可以将A 分解为UL ,再运用追赶法求解。

五、计算公式(数学模型) 对于形如????? ?? ????? ??? ?---b a c b a c b a c b n n n n n 111 2 2 2 11... ... ...的三对角矩阵UL A =,容易验证U 、L 具有如下形式: ??????? ????? ??? ?=u a u a u a u n n U ...... 3 3 22 1 , ?? ????? ? ?? ??????=1 (1) 1132 1l l l L 比较UL A =两边元素,可以得到 ? ?? ??-== = l a b u u c l b u i i i i i i 111 i=2, 3, ... ,n 考虑三对角线系数矩阵的线性方程组 f Ax = 这里()T n x x x x ... 2 1 = ,()T n f f f f ... 2 1 = 令y Lx =,则有 f Uy = 于是有 ()?????-== --u y a f y u f y i i i i i 1 1 11 1 * i=2, 3, ... ,n 再根据y Lx =可得到

计算机网络实验报告 答案讲解

计算机网络实验报告 专业计算机科学与技术 班级计102 学号109074057 姓名王徽军 组号一组D 指导教师毛绪纹 安徽工业大学计算机学院 二○一二年十二月

目录 实验总体说明 (3) 实验一以太网帧的构成 (3) 实验三路由信息协议RIP (8) 实验四传输控制协议TCP (10) 实验五邮件协议SMTP、POP3、IMAP (12) 实验六超文本传输协议HTTP (14)

实验总体说明 1.实验总体目标 配合计算机网络课程的教学,加强学生对计算机网络知识(TCP/IP协议)的深刻理解,培养学生的实际操作能力。 2.实验环境 计算机网络协议仿真实验室: 实验环境:网络协议仿真教学系统(通用版)一套 硬件设备:服务器,中心控制设备,组控设备,PC机若干台 操作系统:Windows 2003服务器版 3.实验总体要求 ●按照各项实验内容做实验,记录各种数据包信息,包括操作、观察、记录、分析, 通过操作和观察获得直观印象,从获得的数据中分析网络协议的工作原理; ●每项实验均提交实验报告,实验报告的内容可参照实验的具体要求,但总体上应包 括以下内容:实验准备情况,实验记录,实验结果分析,算法描述,程序段,实验过程中遇到的问题以及对思考问题的解答等,实验目的、实验原理、实验步骤不需要写入实验报告中。 实验一以太网帧的构成 实验时间:_____________ 成绩:________________ 实验角色:_____________ 同组者姓名:______________________________

练习一:领略真实的MAC帧 q....U 00000010: 85 48 D2 78 62 13 47 24 58 25 00 00 00 00 00 00 .H襵b.G$X%...... 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ 练习二:理解MAC地址的作用 ●记录实验结果 表1-3实验结果 本机MAC地址源MAC地址目的MAC地址是否收到,为什么 主机B 8C89A5-7570BB 8C89A5-757113 8C89A5-7570C1 是,主机A与主机B接在同一共享模块 主机D 8C89A5-771A47 8C89A5-757113 8C89A5-7570C1 是,主机C与主机D接在同一共享模块 主机E 8C89A5-757110 无无否,与主机A、C都不在同一共享模块 主机 F 8C89A5-7715F8 无无否,与主机A、C都不在同一共享模块 练习三:编辑并发送MAC广播帧 ●结合练习三的实验结果,简述FFFFFF-FFFFFF作为目的MAC地址的作用。 答:该地址为广播地址,作用是完成一对多的通信方式,即一个数据帧可发送给同一网段内的所有节点。 练习四:编辑并发送LLC帧 ●实验结果 帧类型发送序号N(S)接受序号N(R) LLC 001F 0 ●简述“类型和长度”字段的两种含义 答:一是如果字段的值小于1518,它就是长度字段,用于定义下面数据字段的长度;二是如果字段的值大于1536,用于定义一个封装在帧中的PDU分组的类型。 思考问题: 1.为什么IEEE802标准将数据链路层分割为MAC子层和LLC子层? 答:出于厂商们在商业上的激烈竞争,IEEE的802委员会未能形成一个统一的、最佳的局域网标准,而是被迫制定了几个不同标准,如802.4令牌总线网、802.5令牌环网等。为了使数据链路层能更好地适应多种局域网标准,802委员会就将局域网的数据链路层拆成两个子层,即逻辑链路控制

信号实验报告

电 子 科 技 大 学 信号与系统实验报告 学生姓名: 杜杰 学 号: 2014030103007 指导教师:张鹰 一、实验室名称:信号与系统实验室 二、实验项目名称:连续系统的幅频特性测量 三、实验原理: 正弦波信号)cos()(0t A t x ω=输入连续LTI 系统,输出)(t y 仍为正弦波信号。 图信号输入连续LTI 系统 图中, )(cos()()(000ωωωj H t j H A t y ∠+=) 通过测量输入)(t x 、输出)(t y 的正弦波信号幅度,计算输入、输出的正弦波信号幅度比值,可以得到系统的幅频特性在0ω处的测量值)(0ωj H 。改变0ω可以测出不同频率处的系统幅频特性。 四、实验目的: 使学生对系统的频率特性有深入了解。 五、实验内容: 实验内容(一)、低通滤波器的幅频特性测量 实验内容(二)、带通滤波器的幅频特性测量 六、实验器材(设备、元器件): 数字信号处理实验箱、信号与系统实验板的低通滤波器模块U11、高通滤波器模块U21、PC 机端信号与系统实验软件、+5V 电源 七、实验步骤:打开PC 机端软件SSP.EXE ,在下拉菜单“实验选择”中选择 “实验三”;使用串口电缆连接计算机串口和实验箱串口,打开实验箱电源。 实验内容(一)、低通滤波器的幅频特性测量 (x ) (t y

实验步骤: 1、信号选择:按实验箱键盘“3”选择“正弦波”,再按“+”或“-”依次 选择一个频率。 2、连接接口区的“输入信号1”和“输出信号”,如下图所示。点击SSP软 件界面上的按钮,观察输入正弦波。将正弦波频率值和幅度值(Vpp/2, Vpp为峰-峰值)记录于表1。 观察输入正弦波的连线示意图 3、按下图的模块连线示意图连接各模块。 实验三实验内容(一)模块连线示意图 4、点击SSP软件界面上的按钮,观察输入正弦波通过连续系统的 响应波形;适当调整X、Y轴的分辨率可得到如下图所示的实验结果。将输出正弦波的幅度值(Vpp/2, Vpp为峰-峰值)记录于表1中。 输入正弦波和响应波形

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

大学计算机实验报告

《大学计算机基础Ⅰ》课程 实验报告 (以上由学生填写) 西南大学计算机与信息科学学院 计算机基础教育系 2017年12月8日 实验成绩记载 课程Array实验报告一 一、实验题目:Win7得基本操作、文件管理与控制面板得使用 二、实验目得: 1.掌握“计算机"(资源管理器)得使用。 2.掌握文件与文件夹得基本操作。 3.了解显示属性得相关内容,掌握显示属性得设置。 4.掌握鼠标、键盘得属性设置。 5.掌握应用程序得添加/删除功能。 6.掌握输入法得设置方法.

7.掌握系统属性得设置方法。 8.掌握计算机名或域得查瞧及更改方法。 三、实验主要内容及过程(实验主要内容得介绍、主要得操作步骤) (列出实验主要内容通过截屏显示出操作过程以及实验结果) (一)文件与文件夹得管理 1、双击桌面上“计算机"→选择D盘→空白处右击选择“新建”重命名 文件夹→改名为“windows练习”→双击“windows练习"→右击空白处分别新建三个文件夹为“LX1”、“LX2”、“LX3”. 2、双击“C盘”打开→搜索框搜索“*、wmf”单击搜索按钮→选择任 意三个图片文件→右击→选择“复制”→粘贴至“LX1"文件夹中→并对三个文件分别重命名为“图片1、wmf”、“图片2、wmf”、“图片3、wmf”。 3、打开“LX1”文件夹→右击图片“1、wmf”→剪切→打开“LX2” 文件夹→右击空白处点击“粘贴”→选中剩下得两个文件→复制→打开“LX3”文件夹→右击选择“粘贴”→右击“LX2”选择“剪切” →打开“LX1”文件夹→右击选择“粘贴”

4、右击“LX3”文件夹→选择“属性”→选择“常规”属性卡→勾选“隐 藏”→右击“LX2"文件夹→选择“常规"属性卡→勾选“已读"

数字信号处理实验报告

语音信号的数字滤波 一、实验目的: 1、掌握使用FFT进行信号谱分析的方法 2、设计数字滤波器对指定的语音信号进行滤波处理 二、实验内容 设计数字滤波器滤除语音信号中的干扰(4 学时) 1、使用Matlab的fft函数对语音信号进行频谱分析,找出干扰信号的频谱; 2、设计数字滤波器滤除语音信号中的干扰分量,并进行播放对比。 三、实验原理 通过观察原语音信号的频谱,幅值特别大的地方即为噪声频谱分量,根据对称性,发现有四个频率的正弦波干扰,将它们分别滤掉即可。采用梳状滤波器,经过计算可知,梳状滤波器h[n]={1,A,1}的频响|H(w)|=|A+2cos(w)|,由需要滤掉的频率分量的频响w,即可得到A,进而得到滤波器的系统函数h[n]。而由于是在离散频域内进行滤波,所以令w=(2k*pi/N)即可。 对原信号和四次滤波后的信号分别进行FFT变换,可以得到它们的幅度相应。最后,将四次滤波后的声音信号输出。 四、matlab代码 clc;clear;close all; [audio_data,fs]=wavread('SunshineSquare.wav'); %读取未处理声音 sound(audio_data,fs); N = length(audio_data); K = 0:2/N:2*(N-1)/N; %K为频率采样点

%sound(audio_data,fs); %进行一次FFT变换 FFT_audio_data=fft(audio_data); mag_FFT_audio_data = abs(FFT_audio_data); %画图 figure(1) %原信号时域 subplot(2,1,1);plot(audio_data);grid; title('未滤波时原信号时域');xlabel('以1/fs为单位的时间');ylabel('采样值'); %FFT幅度相位 subplot(2,1,2);plot(K,mag_FFT_audio_data);grid; title('原信号幅度');xlabel('以pi为单位的频率');ylabel('幅度'); %构造h[n]={1,A,1}的梳状滤波器,计算A=2cosW,妻子W为要滤掉的频率%由原信号频谱可知要分四次滤波,滤掉频响中幅度大的频率分量 %第一次滤波 a = [1,0,0,0];%y[n]的系数 [temp,k]=max(FFT_audio_data); A1=-2*cos(2*pi*k/N); h1=[1,A1,1]; audio_data_h1 = filter(h1,a,audio_data); FFT_audio_data_h1=fft(audio_data_h1);

数值分析实验报告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 的帮助。

大学计算机实验报告2

《大学计算机基础Ⅰ》课程 实验报告手册 \ 实验教师(签字) 西南大学计算机与信息科学学院 计算机基础教育系 年月日

一、实验说明 本课程实验分为一般性实验(验证和简单设计)和综合性实验(课程设计)两部分。从第3周开始参考实验任务书(本报告中的五部分)完成每周规定的实验,并根据进度按要求认真填写本实验报告中的六、七部分,此实验报告将作为实验成绩评定的依据之一。 本课程实验从开课学期第3周开始实习,每周2学时,16周结束,共28学时。除统一安排的时间外,学生还可根据自己的实际适当安排课余时间上机。上机内容参见本报告中的“五、实验任务书”部分。 二、实验目的 通过本实验,让学生掌握计算机的基本操作和基本技能,能够学会知识的运用与积累,能够举一反三,具备一定的独立解决问题的能力和信心,培养学生熟练地使用常用软件的能力及严肃认真的科学作风,为今后的学习和工作打下良好的基础。 三、实验要求 1、每次实验课将考勤,并作为实验成绩的重要依据。 2、每次实验前学生必须充分准备每次的实验内容,以保证每次上机实验的效果。实验过程中必须独立完成。 3、学期结束时,每位同学应将自己的《实验报告》交各专业班长或学习委员,由班长或学习委员以专业为单位、按学号从小到大排列好统一交给实验指导老师,否则无实验成绩。 四、实验报告要求 一共要求填写3个阶段性实验报告、1个综合性实验报告和1份学期总结,与每份实验报告对应产生的电子文档交由实验老师指定的位置,该电子文档也将作为实验成绩评定的依据之一。 五、实验任务书 教材:《大学计算机基础》第五版高等教育出版社 实验参考书:《大学计算机基础实践教程》高等教育出版社 实验一:指法练习、汉字录入 实验目的: 1.掌握鼠标和键盘的使用及正确的操作指法。 2.掌握微型计算机的打开和关闭操作 3.熟悉键盘指法和文字录入 4.了解中英文切换,全半角的切换 实验任务: 1.参见实验参考书中的实验1-1-1中的[任务1](7页) 2.参见实验参考书中的实验1-1-1中的[任务3](7页) 实验二:Windows的基本操作和文件管理操作 实验目的: 1.掌握Windows的基本知识和基本操作 2.掌握“Windows资源管理器”和“我的电脑”的使用 实验任务: 1.参见实验参考书中的实验1-2-1中的全部任务(14页) 2.参见实验参考书中的实验1-2-2中的全部任务(18页)

信号与系统实验报告

中南大学 信号与系统试验报告 姓名: 学号: 专业班级:自动化 实验一 基本信号的生成 1.实验目的 ● 学会使用MATLAB 产生各种常见的连续时间信号与离散时间信号; ● 通过MATLAB 中的绘图工具对产生的信号进行观察,加深对常用信号的 理解; ● 熟悉MATLAB 的基本操作,以及一些基本函数的使用,为以后的实验奠 定基础。 2.实验内容 ⑴ 运行以上九个例子程序,掌握一些常用基本信号的特点及其MATLAB 实现方法;改变有关参数,进一步观察信号波形的变化。 ⑵ 在 k [10:10]=- 范围内产生并画出以下信号: a) 1f [k][k]δ=; b) 2f [k][k+2]δ=; c) 3f [k][k-4]δ=; d) 4f [k]2[k+2][k-4]δδ=-。

源程序: k=-10:10; f1k=[zeros(1,10),1,zeros(1,10)]; subplot(2,2,1) stem(k,f1k) title('f1[k]') f2k=[zeros(1,8),1,zeros(1,12)]; subplot(2,2,2) stem(k,f2k) title('f2[k]') f3k=[zeros(1,14),1,zeros(1,6)]; subplot(2,2,3) stem(k,f3k) title('f3[k]') f4k=2*f2k-f3k; subplot(2,2,4) stem(k,f4k) title('f4[k]') ⑶ 在 k [0:31]=范围内产生并画出以下信号: a) ()()k k 144f [k]sin cos π π=; b) ()2k 24f [k]cos π =; c) ()()k k 348f [k]sin cos π π=。 请问这三个信号的基波周期分别是多少? 源程序: k=0:31; f1k=sin(pi/4*k).*cos(pi/4*k); subplot(3,1,1) stem(k,f1k) title('f1[k]') f2k=(cos(pi/4*k)).^2; subplot(3,1,2) stem(k,f2k) title('f2[k]') f3k=sin(pi/4*k).*cos(pi/8*k); subplot(3,1,3) stem(k,f3k) title('f3[k]') 其中f1[k]的基波周期是4, f2[k]的基波周期是4, f3[k]的基波周期是16。

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 1 2 3 4 5 篇二:数值分析实验报告 实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。即若x0 偏离所求根较远,Newton法可能发散的结论。并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收

敛,但精度不够。熟悉Matlab语言编程,学习编程要点。体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk) 产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 xk?1?xk?rf(xk) 'f(xk) 其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x);

郑大计算机实验报告答案

习题及实验(一) 第一部分习题 一、简答题 1计算机的发展阶段: 四个发展阶段: 第一个发展阶段:1946-1956年电子管计算机的时代。1946年第一台电子计算机问世美国宾西法尼亚大 学,它由冯·诺依曼设计的。占地170平方,150KW。运算速度慢还没有人快。是计算机发展历史上的一个里程碑。(ENIAC)(electronic numerical integator and calculator)全称叫“电子数值积分和计算机”。 第二个发展阶段:1956-1964年晶体管的计算机时代:操作系统。 第三个发展阶段:1964-1970年集成电路与大规模集成电路的计算机时代 (1964-1965)(1965-1970) 第四个发展阶段:1970-现在:超大规模集成电路的计算机时代。 第一代计算机 1946 1957 电子管运算速度较低,耗电量大存储容量小。 第二代计算机 1958 1964 晶体管体积小,耗电量较少,运算速度高,价格下降。第三代计算机 1965 1971 中小规模集成电路体积功能进一步减少,可靠性及速度进一步提高。 第四代计算机 1972年至今大规模及超大规模集成电路性能到规模提高,价格大幅度降低,广泛应用于社会生活的各个领域,走进办公室和家庭 2.主要应用:计算机的应用极其广泛,早期的计算机主要体现在科学计算机,数据处理,计算机控制等几个方面.随着微型计算机的发慌和迅速普及,计算机的应用

已渗透到国民经济各个总门及社会生活的各个方面现代计算机除了传统的应用外,还应用于以下几个大方面. 1.办化自动化 2.计算机辅助系统 3.虚拟现实 4.人工智能 5.电子商务 3. 1.管理系统中的各种资源,包括硬件资源和软件资源。 1)监视资源 2)决定分配资源策略 3)分配资源 4)回收资源 2.为用户提供友好的界面。 1)命令行界面 2)图形化界面 4.操作系统大致可分为6种类型。 简单操作系统。分时系统。实时操作系统。网络操作系统。分布操作系统。智能操作系。目前微机上常见的操作系统有DOS、OS/2、UNIX、XENIX、LINUX、Windows、Netware等。 5. 系统软件,应用软件。 系统软件:用以实现计算机系统的管理、控制、运行、维护,并完成应用程序的装入、编译等任务的程序。系统软件是开发和运行应用软件的平台,系统软件的核心是操作系统。

(完整版)哈工大-数值分析上机实验报告

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式 产生逼近解x*的迭代数列{x k},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x); y=-x*x-sin(x); 写成如上形式即可,下面给出主程序。 二分法源程序: clear %%%给定求解区间 b=1.5; a=0;

%%%误差 R=1; k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end R=b-a;%求出误差 k=k+1; end x=c%给出解 Newton法及改进的Newton法源程序:clear %%%% 输入函数 f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

大学生计算机实验报告(完整版)

《大学计算机基础》实验3.1 文件和文件夹的管理 实验报告 专业班级:经贸1103 姓名——- 学号201118910315 指导教师:———完成时间:2011.10 一、实验题目 文件和文件夹的管理 二、实验目的 1.熟悉Windows XP的文件系统。 2.掌握资源管理器的使用方法。 3.熟练掌握在Windows XP资源管理器下,对文件(夹)的选择、新建、移动、复制、删除、重命名的操作方法。 三、实验内容 1.启动资源管理器并利用资源管理器浏览文件。 2.在D盘创建文件夹 3.在所创建文件夹中创建Word文件。 4.对所创建文件或文件夹执行复制、移动、重命名、删除、恢复、创建快捷方式及设置共享等操作。 四、实验步骤 (一)文件与文件夹管理 1.展开与折叠文件夹。右击开始,打开资源管理器,在左窗格中点击“+”展开,点击“—”折叠 2.改变文件显示方式。打开资源管理器/查看,选择缩略、列表,排列图标等

3.建立树状目录。在D盘空白处右击,选择新建/文件夹,输入经济贸易学院,依次在新建文件夹中建立经济类1103班/王帅、王鹏 4..创建Word并保存。打开开始/程序/word,输入内容。选择文件/另存为,查找D盘/经济贸易学院/1103班/王帅,单击保存 5.复制、移动文件夹 6.重命名、删除、恢复。右击文件夹,选择重命名,输入新名字;选择删除,删除文件 7.创建文件的快捷方式。右击王帅文件夹,选择发送到/桌面快捷方式

8.设置共享文件。右击王帅,选择属性/共享/在网络上共享这个文件/确定 9.显示扩展名。打开资源管理器/工具/文件夹选项/查看/高级设置,撤销隐藏已知文件的扩展名 (二)控制面板的设置。 1.设置显示属性。右击打开显示属性/桌面、屏幕保护程序 2.设置鼠标。打开控制面板/鼠标/按钮(调整滑块,感受速度)、指针 3.设置键盘。打开控制面板/键盘/速度(调整滑块,感受速度)、硬件 4.设置日期和时间打开控制面板/日期和时间 5.设置输入法。打开控制面板/区域与语言选项/详细信息/文字服务与输入语言

信号检测实验报告

Harbin Institute of Technology 匹配滤波器实验报告 课程名称:信号检测理论 院系:电子与信息工程学院 姓名:高亚豪 学号:14SD05003 授课教师:郑薇 哈尔滨工业大学

1. 实验目的 通过Matlab 编程实现对白噪声条件下的匹配滤波器的仿真,从而加深对匹配滤波器及其实现过程的理解。通过观察输入输出信号波形及频谱图,对匹配处理有一个更加直观的理解,同时验证匹配滤波器具有时间上的适应性。 2. 实验原理 对于一个观测信号()r t ,已知它或是干扰与噪声之和,或是单纯的干扰, 即 0()()()()a u t n t r t n t +?=?? 这里()r t ,()u t ,()n t 都是复包络,其中0a 是信号的复幅度,()u t 是确知的归一化信号的复包络,它们满足如下条件。 2|()|d 1u t t +∞ -∞=? 201||2 a E = 其中E 为信号的能量。()n t 是干扰的均值为0,方差为0N 的白噪声干扰。 使该信号通过一个线性滤波系统,有效地滤除干扰,使输出信号的信噪比在某一时刻0t 达到最大,以便判断信号的有无。该线性系统即为匹配滤波器。 以()h t 代表系统的脉冲响应,则在信号存在的条件下,滤波器的输出为 0000()()()d ()()d ()()d y t r t h a u t h n t h τττττττττ+∞+∞+∞ =-=-+-???

右边的第一项和第二项分别为滤波器输出的信号成分和噪声成分,即 00()()()d x t a u t h τττ+∞ =-? 0 ()()()d t n t h ?τττ+∞ =-? 则输出噪声成分的平均功率(统计平均)为 2 20E[|()|]=E[|()()d |]t n t h ?τττ+∞ -? **00*000200 =E[()(')]()(')d d '=2()(')(')d d ' 2|()|d n t n t h h N h h N h ττττττδττττττττ+∞+∞+∞+∞+∞ ---=?? ?? ? 而信号成分在0t 时刻的峰值功率为 22 20000|()||||()()d |x t a u t h τττ+∞ =-? 输出信号在0t 时刻的总功率为 22000E[|()|]E[|()()|]y t x t t ?=+ 22**0000002200E[|()||()|()()()()] |()|E[|()|] x t t x t t t x t x t t ????=+++=+ 上式中输出噪声成分的期望值为0,即0E[()]0t ?=,因此输出信号的功率 成分中只包含信号功率和噪声功率。 则该滤波器的输出信噪比为 222000022000|||()()d ||()|E[|()|]2|()|d a u t h x t t N h τττρ?ττ+∞ +∞-==?? 根据Schwartz 不等式有

相关文档