文档库 最新最全的文档下载
当前位置:文档库 › 《数值分析》上机实验报告

《数值分析》上机实验报告

《数值分析》上机实验报告
《数值分析》上机实验报告

.. .. .. ..

. 学习参考

.

数值分析上机实验报告

《数值分析》上机实验报告

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

if d==1

y=x1;

elseif d==0

y='迭代M次失败';

else

y= '奇异'

end

function y=df(x)

y=7*x^6-28*4*x^3;

End

function y=f(x)

y=x^7-28*x^4+14;

End

>> x0=1.9;

>> eps=0.00001;

>> M=100;

>> x=Newton('f','df',x0,eps,M);

>> vpa(x,7)

1.5 问题讨论:

1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。此程序的不足之处是,所要求解的方程必须满足上述定理的四个条件,但是第二和第四个条件在计算机上比较难以实现。

2.Newton迭代法是一个二阶收敛迭代式,他的几何意义Xi+1是Xi的切线与x轴的交点,故也称为切线法。它是平方收敛的,但它是局部收敛的,即要求初始值与方程的根充分接近,所以在计算过程中需要先确定初始值。

3.本题在理论依据部分,讨论了区间(0.1,1.9)两端点是否能作为Newton迭代的初值,结果发现0.1不满足条件,而1.9满足,能作为初值。另外,该程序简单,只有一个循环,且为顺序结构,故采用do-while循环。当然也可以选择for和while循环。

2.已知函数值如下表:

试用三次样条插值求f(4.563)及f ’(4.563)的近似值。 2.1 理论依据

33

2211

111

111

1

11

()()()()()()()

6666j j j j j j j j

j j j j j j j j x x x x h x x h x x S x M M y M y M h h h h ---------------=++-+-这里11j j j h x x --=- ,所以只要求出j M ,就能得出插值函数S (x )。

求j M 的方法为:001111

221

12

12

2

21

2N N N N M d M d M d μλμλμλ--??????

?????????????

?????=?

???????????

???????????????????

?????

这里1000

00

11111

111

116()6()(1,2,,1)

61[()]

1j j j j j

j j j j N N N N N N j j

j j j j j j j y y d y h h

y y y y d j N h h h h d y y y h h h h h h h h μλμ+----------?

'=-???--=-=-?+?

?

?'=--??

?==-=?++?

最终归结为求解一个三对角阵的解。

用追赶法解三对角阵的方法如下:

1

11

122

2

12221

111

1111

1n n n n n n

n

n n b c a b c l A LU l b c a l a b γβγββγβ-----??

????????????

???????

???===?????????????????

????

??

?

1,,,n L d LUx d L d Ux δδδδδδ??

=???===???=?????

即若记则由得 1121

1

1n

n n d l l d δδ????????????

??????=?????????????

????? , 11

111

1n n n n n x x βγδβγβδ--??????????????????=??????

???????

?????

综上可得求解方程Ax=d 的算法:

111

1111111111,,,,1,2,3,,1,,1,,2,1

i i i i i i i

i i i i

n i i i n i n i b d l b l c d l i n c x

x x i n αβδββδδδδββ+++++++++?

====-???

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

2.2 C 语言程序代码:

#include #include

void main() {int i,j,m,n,k,p;

double q10,p10,s4,g4,x0,x1,g0=1,g9=0.1;;

double s[10][10];

double a[10],b[10],c[10],d[10],e[10],x[10],h[9],u[9],r[9];

double f[10]={0,0.69314718,1.0986123,1.3862944,1.6094378,

1.7917595,1.9459101,

2.079445,2.1972246,2.3025851};

printf("请依次输入xi:\n");

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

scanf("%lf",&e[i]); //求h矩阵

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

h[n]=e[n+1]-e[n];

d[0]=6*((f[1]-f[0])/h[0]-g0)/h[0];

d[9]=6*(g9-(f[9]-f[8])/h[8])/h[8];

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

d[j+1]=6*((f[j+2]-f[j+1])/h[j+1]-(f[j+1]-f[j])/h[j])/(h[j]+h[j+1]); for(m=1;m<=8;m++)

u[m]=h[m-1]/(h[m-1]+h[m]);

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

r[k]=h[k]/(h[k-1]+h[k]);

for(i=0;i<=9;i++) //求u矩阵

for(p=0;p<=9;p++)

{s[i][p]=0;

if(i==p)s[i][p]=2;}

s[0][1]=1;

s[9][8]=1;

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

{s[i][i-1]=u[i];

s[i][i+1]=r[i];}

printf("三对角矩阵为:\n");

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

for(p=0;p<=9;p++) //求r矩阵{ printf("%5.2lf",s[i][p]);

if(p==9)

{printf("\n");}

}

printf("根据追赶法解三对角矩阵得:\n");

a[0]=s[0][0];

b[0]=d[0];

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

{c[i]=s[i][i-1]/a[i-1]; //求d矩阵

a[i]=s[i][i]-s[i-1][i]*c[i];

b[i]=d[i]-c[i]*b[i-1];

if(i==8)

{p10=b[i];

q10=a[i];}}

x[9]=p10/q10;

printf("M[10]=%lf\n",x[9]);

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

{x[i-1]=(b[i-1]-s[i-1][i]*x[i])/a[i-1];

printf("M[%d]=%lf\n",i,x[i-1]);}

printf("可得s(x)在区间[4,5]上的表达式;\n");

printf("将x=4.563代入得:\n");

x0=5-4.563;

x1=4.563-4;

s4=x[3]*pow(x0,3)/6+x[4]*pow(x1,3)/6+(f[3]-x[3]/6)*(5-4.563)+(f[4]-x[4]/6)*(4. 563-4);

g4=-x[3]*pow(x0,2)/2+x[4]*pow(x1,2)/2-(f[3]-x[3]/6)+(f[4]-x[4]/6);

printf("计算结果:f(4.563)的函数值是:%lf\nf(4.563)的导数值是:%lf\n",s4,g4);}

2.3 运行结果:

2.4 问题讨论

1. 三次样条插值效果比Lagrange插值好,没有Runge现象,光滑性较好。

2. 本题的对任意划分的三弯矩插值法可以解决非等距节点的一般性问题。

3. 编程过程中由于定义的数组比较多,需要仔细弄清楚各数组所代表的参

数,要注意各下标代表的含义,特别是在用追赶法计算的过程中。

3.用Romberg 算法求)00001.0(sin )75(323

14.1=+?ε允许误差dx x x x x . 3.1 理论依据:

Romberg 算法的计算步骤如下:

(1)先求出按梯形公式所得的积分值

(0)1[()()]2

b a

T f a f b -=

+ (2)把区间2等分,求出两个小梯形面积之和,记为(1)1T ,即

(1)1[()()2()]42

b a b a

T f a f b f -+=

++ 这样由外推法可得(0)2T ,(1)2(0)(1)(0)

11(0)1

1

221

()421411()2T T T T T --==--。 (3)把区间再等分(即22等分),得复化梯形公式(2)1T ,由(1)1T 与(2)1T 外推可得(2)(1)(1)112

441T T T

-=-,2(1)(0)(0)

2232

441

T T T -=-,如此,若已算出2k 等分的复化梯形公式()1k T ,则由Richardson 外推法,构造新序列

()(1)(1)

1

441

m k k k m m

m m T T T

--+-=

-, m=1,2,…,l, k=1,2,…,l-m+1, 最后求得(0)1l T +。

(4)(0)(0)1l l T T +≈或(0)

(0)1||l l T T +-<ε就停止计算,否则回到(3),计算

(1)1l T +,一般可用如下算法:

1(0)12()(1)1111()(1)(1)

1[()()]21{[(21)]}2224,1,2,,,1,2,,1

41l l l l l

i m k k k m m m m

b a

T f a f b b a

b a T T f a i T T T m l k l m ---=--+?-=+??

?--?=++-??

?-?===-+-??

其具体流程如下,并全部存入第一列

(0)

1(1)T (2(3)T (0)3(6)T (1)1(2)T (2(5)T 1(4)T 通常计算时,用固定l=N 来计算,一般l=4或5即能达到要求。

3.2 C 语言程序代码:

#include #include

double f(double x) //计算f(x)的值 {double z;

z=pow(3,x)*pow(x,1.4)*(5*x+7)*sin(x*x); return(z);} main()

{ double t[20][20],s,e=0.00001,a=1,b=3; int i,j,l,k;

t[0][1]=(b-a)*(f(b)+f(a))/2; //下为romberg 算法

t[1][1]=(b-a)*(f(b)+2*f((b+a)/2)+f(a))/4; t[0][2]=(a*t[1][1]-t[0][1])/(4-1);j=3; for(l=2;fabs(t[0][j-1]-t[0][j-2])>=e;l++) {for(k=1,s=0;k<=pow(2,l-1);k++)

s+=f(a+(2*k-1)*(b-a)/pow(2,l));//判断前后两次所得的T(0)的差是否符合要求,如果符合精度要求则停止循环

t[l][1]=(t[l-1][1]+(b-a)*s/pow(2,l-1))/2;

for(i=l-1,j=2;i>=0;i--,j++)

t[i][j]=(pow(4,j-1)*t[i+1][j-1]-t[i][j-1])/(pow(4,j-1)-1);}

if(t[0][1]

printf("t=%0.6f\n",t[0][1]);

else

printf("用Romberg算法计算函数所得近似结果为:\nf(x)=%0.6f\n",t[0][j-1]);}

3.3 运行结果:

3.4 MATLAB上机程序

function [T,n]=mromb(f,a,b,eps)

if nargin<4,eps=1e-6;end

h=b-a;

R(1,1)=(h/2)*(feval(f,a)+feval(f,b));

n=1;J=0;err=1;

while (err>eps)

J=J+1;h=h/2;S=0;

for i=1:n

x=a+h*(2*i-1);

S=S+feval(f,x);

end

R(J+1,1)=R(J,1)/2+h*S;

for k=1:J

R(J+1,k+1)=(4^k*R(J+1,k)-R(J,k))/(4^k-1);

end

err=abs(R(J+1,J+1)-R(J+1,J));

n=2*n;

end

R;

T=R(J+1,J+1);

format long

f=@(x)(3.^x)*(x.^1.4)*(5*x+7)*sin(x*x); [T,n]=mromb(f,1,3,1.e-5)

3.5 问题讨论:

1.Romberge算法的优点是:把积分化为代数运算,而实际上只需求T1(i),以后用递推可得.算法简单且收敛速度快,一般4或5次即能达到要求。

2.Romberge算法的缺点是:对函数的光滑性要求较高,计算新分点的值时,这些数值的个数成倍增加。

3.该程序较为复杂,涉及函数定义,有循环,而且循环中又有判断,编写时需要注意该判断条件是处于循环中,当达到要求时跳出循环,终止运算。

4.函数的定义可放在主函数前也可在主程序后面。本程序采用的后置方式。

4. 用定步长四阶Runge-Kutta 求解

??????????

?===--===0

)0(0)0(0)0(10010001000//1/321

3

2332

1y y y y y dt dy y

dt dy dt dy h =0.0005,打印y i (0.025) , y i (0.045) , y i (0.085) , y i (0.1) ,(i =1,2,3)

4.1 理论依据:

Runge_Kutta 采用高阶单步法,这里不是先按Taylor 公式展开,而是先写成n t 处附近的值的线性组合(有待定常数)再按Taylor 公式展开,然后确定待定常数,这就是Runge-Kutta 法的思想方法。

本题采用四阶古典的Runge-Kutta 公式:

)

,()3/,3/2()3/,3/()

,(8/]33[321421312143211hK hK hK Y h x hF K hK hK Y h x hF K hK Y h x hF K Y x hF K K K K K Y Y n n n n n n n n n n +-++=+++=++==++++=+

4.2 C 语言程序代码:

#include

void fun(double x[4],double y[4],double h) {y[1]=1*h; y[2]=x[3]*h;

y[3]=(1000-1000*x[2]-100*x[2]-100*x[3])*h; //微分方程向量函数}

void main()

{ double Y[5][4],K[5][4],m,z[4],e=0.0005;

double y[5]={0,0.025,0.045,0.085,0.1};

int i,j,k;

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

Y[1][i]=0;

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

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

K[i][j]=0;

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

{for(m=y[k-1];m<=y[k];m=m+e)

{for(i=1;i<=3;i++)

z[i]=Y[k][i];

fun(z,K[1],e);

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

z[i]=Y[k][i]+e*K[2][i]/2; //依此求K1,K2K3的值fun(z,K[2],e);

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

z[i]=Y[k][i]+e*K[2][i]/2;

fun(z,K[3],e);

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

z[i]=Y[k][i]+e*K[3][i];

fun(z,K[4],e);

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

Y[k][i]=Y[k][i]+(K[1][i]+2*K[2][i]+2*K[3][i]+K[4][i])/6; // 求Yi[N+1]的值}

if(k!=5)

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

Y[k+1][i]=Y[k][i];}

printf("计算结果:\n");

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

{for(j=1;j<=3;j++)

{printf("y%d[%4.3f]=%-10.8f,",j,y[i],Y[i][j]);

if(j==3)

printf("\n");}

printf("\n");}

}

4.3 运行结果:

数值代数实验报告

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

操作系统上机实验报告(西电)

操作系统上机题目 一、题目 实验1:LINUX/UNIX Shell部分 (一)系统基本命令 1.登陆系统,输入whoami 和pwd ,确定自己的登录名和当前目录; 登录名yuanye ,当前目录/home/yuanye 2.显示自己的注册目录?命令在哪里? a.键入echo $HOME,确认自己的主目录;主目录为/home/yuanye b.键入echo $PA TH,记下自己看到的目录表;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games c.键入which abcd,看看得到的错误信息; 再键入which ls 和which vi,对比刚刚得到的结果的目录是否在a.、b. 两题看到的目录表中; /bin/ls /usr/bin/vi 3.ls 和cd 的使用: a.键入ls,ls -l ,ls -a ,ls -al 四条命令,观察输出,说明四种不同使用方式的区别。 1. examples.desktop 公共的模板视频图片文档音乐桌面; 总计32 2.-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktop drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面 3. . .fontconfig .local .Xauthority .. .gconf .mozilla .xsession-errors .bash_logout .gconfd .nautilus 公共的 .bashrc .gksu.lock .profile 模板 .cache .gnome2 .pulse 视频 .chewing .gnome2_private .pulse-cookie 图片 .config .gnupg .recently-used.xbel 文档 .dbus .gstreamer-0.10 .scim 音乐 .dmrc .gtk-bookmarks .sudo_as_admin_successful 桌面 .esd_auth .gvfs .update-manager-core

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

数值代数上机实验报告

数值代数课程设计实验报告 姓名: 班级: 学号: 实验日期: 一、实验名称 代数的数值解法 二、实验环境 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 =

西电数字信号处理上机实验报告

数字信号处理上机实验报告 14020710021 张吉凯 第一次上机 实验一: 设给定模拟信号()1000t a x t e -=,t 的单位是ms 。 (1) 利用MATLAB 绘制出其时域波形和频谱图(傅里叶变换),估计其等效带宽(忽略谱分量降低到峰值的3%以下的频谱)。 (2) 用两个不同的采样频率对给定的()a x t 进行采样。 ○1()()15000s a f x t x n =以样本秒采样得到。 ()()11j x n X e ω画出及其频谱。 ○2()()11000s a f x t x n =以样本秒采样得到。 ()() 11j x n X e ω画出及其频谱。 比较两种采样率下的信号频谱,并解释。 (1)MATLAB 程序: N=10; Fs=5; T s=1/Fs; n=[-N:T s:N]; xn=exp(-abs(n)); w=-4*pi:0.01:4*pi; X=xn*exp(-j*(n'*w)); subplot(211) plot(n,xn); title('x_a(t)时域波形'); xlabel('t/ms');ylabel('x_a(t)'); axis([-10, 10, 0, 1]); subplot(212); plot(w/pi,abs(X)); title('x_a(t)频谱图'); xlabel('\omega/\pi');ylabel('X_a(e^(j\omega))');

ind = find(X >=0.03*max(X))*0.01; eband = (max(ind) -min(ind)); fprintf('等效带宽为%fKHZ\n',eband); 运行结果: 等效带宽为12.110000KHZ

《 Windows7 操作系统》实验报告

实验(一) Windows 7基本操作 一、实验目的 1.掌握文件和文件夹基本操作。 2.掌握“资源管理器”和“计算机”基本操作。 二、实验要求 1.请将操作结果用Alt+Print Screen组合键截图粘贴在题目之后。 2.实验完成后,请将实验报告保存并提交。 三、实验内容 1.文件或文件夹的管理(提示:此题自行操作一遍即可,无需抓图)★期末机试必考题★ (1) 在D:盘根目录上创建一个名为“上机实验”的文件夹,在“上机实验”文件夹中创建1个名为“操作系统上机实验”的空白文件夹和2个分别名为“2.xlsx”和“3.pptx”的空白文件,在“操作系统上机实验”文件夹中创建一个名为“1.docx”的空白文件。 (2) 将“1.docx”改名为“介绍信.docx”;将“上机实验”改名为“作业”。 (3) 在“作业”文件夹中分别尝试选择一个文件、同时选择两个文件、一次同时选择所有文件和文件夹。 (4) 将“介绍信.docx”复制到C:盘根目录。 (5) 将D:盘根目录中的“作业”文件夹移动到C:盘根目录。 (6) 将“作业”文件夹中的“2.xlsx”文件删除放入“回收站”。 (7) 还原被删除的“2.xlsx”文件到原位置。 2.搜索文件或文件夹,要求如下: 查找C盘上所有以大写字母“A”开头,文件大小在10KB以上的文本文件。(提示:搜索时,可以使用“?”和“*”。“?”表示任意一个字符,“*”表示任意多个字符。)

3. 在桌面上为C:盘根目录下的“作业”文件夹创建一个桌面快捷方式。★期末机试必考题★ 3.“计算机”或“资源管理器”的使用 (1) 在“资源管理器”窗口,设置以详细信息方式显示C:\WINDOWS中所有文件和文件夹,使所有图标按类型排列显示,并不显示文件扩展名。(提示:三步操作全部做完后,将窗口中显示的最终设置结果抓一张图片即可) (2) 将C:盘根目录中“介绍信.docx”的文件属性设置为“只读”和“隐藏”,并设置在窗口中显示“隐藏属性”的文件或文件夹。(提示:请将“文件夹”对话框中选项设置效果与C:盘根目录中该文件图标呈现的半透明显示效果截取在一整张桌面图片中即可) 4.回收站的设置 设置删除文件后,不将其移入回收站中,而是直接彻底删除功能。

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 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 =可得到

数学实验1

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

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

数字信号处理上机实验代码

文件名:tstem.m(实验一、二需要) 程序: f unction tstem(xn,yn) %时域序列绘图函数 %xn:被绘图的信号数据序列,yn:绘图信号的纵坐标名称(字符串)n=0:length(xn)-1; stem(n,xn,'.'); xlabel('n');ylabel('yn'); axis([0,n(end),min(xn),1.2*max(xn)]); 文件名:tplot.m(实验一、四需要) 程序: function tplot(xn,T,yn) %时域序列连续曲线绘图函数 %xn:信号数据序列,yn:绘图信号的纵坐标名称(字符串) %T为采样间隔 n=0;length(xn)-1;t=n*T; plot(t,xn); xlabel('t/s');ylabel(yn); axis([0,t(end),min(xn),1.2*max(xn)]); 文件名:myplot.m(实验一、四需要)

%(1)myplot;计算时域离散系统损耗函数并绘制曲线图。function myplot(B,A) %B为系统函数分子多项式系数向量 %A为系统函数分母多项式系数向量 [H,W]=freqz(B,A,1000) m=abs(H); plot(W/pi,20*log10(m/max(m)));grid on; xlabel('\omega/\pi');ylabel('幅度(dB)') axis([0,1,-80,5]);title('损耗函数曲线'); 文件名:mstem.m(实验一、三需要) 程序: function mstem(Xk) %mstem(Xk)绘制频域采样序列向量Xk的幅频特性图 M=length(Xk); k=0:M-1;wk=2*k/M;%产生M点DFT对应的采样点频率(关于pi归一化值) stem(wk,abs(Xk),'.');box on;%绘制M点DFT的幅频特性图xlabel('w/\pi');ylabel('幅度'); axis([0,2,0,1.2*max(abs(Xk))]); 文件名:mpplot.m(实验一需要)

操作系统上机实验报告

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程控制 一、实验目的和要求 (1)进一步加强对进程概念的理解,明确进程和程序的区别 (2)进一步认识并发执行的实质 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三、实验内容 (1) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; (2) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; 父进程打印两个子进程的pid;

(3)写一个命令处理程序,能处理max(m,n), min(m,n),average(m,n,l)这几个命令(使用exec函数族)。 Max函数 Min函数 Average函数 Exec函数族调用 四、程序代码 五、运行结果 六、实验结果与分析 七、体会 通过这次上机,我了解了fork函数的运行方法,同时更深刻的了解了进程的并行执行的本质,印证了在课堂上学习的理论知识。同时通过编写实验内容(3)的命令处理程序,学会了exec函数族工作原理和使用方法。通过这次上机实验让我加深了对课堂上学习的理论知识的理解,收获很多。

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程通讯 一、实验目的和要求 了解和熟悉UNIX支持的共享存储区机制 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三.实验内容 编写一段程序, 使其用共享存储区来实现两个进程之间的进程通讯。进程A创建一个长度为512字节的共享内存,并显示写入该共享内存的数据;进程B将共享内存附加到自己的地址空间,并向共享内存中写入数据。 四、程序代码 五、运行结果 六、实验结果与分析 七、体会

数值计算实验报告

(此文档为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);

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

科技信息 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

数字信号处理上机实验(第三版)

数字信号处理实验(Matlab) 实验一: 系统响应及系统稳定性 %实验1:系统响应及系统稳定性 close all;clear all %======内容1:调用filter解差分方程,由系统对u(n)的响应判断稳定性====== A=[1,-0.9];B=[0.05,0.05]; %系统差分方程系数向量B和A x1n=[1 1 1 1 1 1 1 1 zeros(1,50)]; %产生信号x1(n)=R8(n) x2n=ones(1,128); %产生信号x2(n)=u(n) hn=impz(B,A,58); %求系统单位脉冲响应h(n) subplot(2,2,1);y='h(n)';tstem(hn,y); %调用函数tstem绘图 title('(a)系统单位脉冲响应h(n)');box on y1n=filter(B,A,x1n); %求系统对x1(n)的响应y1(n) subplot(2,2,2);y='y1(n)';tstem(y1n,y); title('(b)系统对R8(n)的响应y1(n)');box on y2n=filter(B,A,x2n); %求系统对x2(n)的响应y2(n) subplot(2,2,4);y='y2(n)';tstem(y2n,y); title('(c)系统对u(n)的响应y2(n)');box on %===内容2:调用conv函数计算卷积============================ x1n=[1 1 1 1 1 1 1 1 ]; %产生信号x1(n)=R8(n) h1n=[ones(1,10) zeros(1,10)]; h2n=[1 2.5 2.5 1 zeros(1,10)];

操作系统实验报告生产者与消费者问题模拟

操作系统上机实验报告 实验名称: 生产者与消费者问题模拟 实验目的: 通过模拟生产者消费者问题理解进程或线程之间的同步与互斥。 实验内容: 1、设计一个环形缓冲区,大小为10,生产者依次向其中写入1到20,每个缓冲区中存放一个数字,消费者从中依次读取数字。 2、相应的信号量; 3、生产者和消费者可按如下两种方式之一设计; (1)设计成两个进程; (2)设计成一个进程内的两个线程。 4、根据实验结果理解信号量的工作原理,进程或线程的同步\互斥关系。 实验步骤及分析: 一.管道 (一)管道定义 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。(二)所涉及的系统调用 1、pipe( ) 建立一无名管道。 系统调用格式 pipe(filedes) 参数定义 int pipe(filedes); int filedes[2]; 其中,filedes[1]是写入端,filedes[0]是读出端。 该函数使用头文件如下: #include #inlcude #include 2、read( ) : 系统调用格式 read(fd,buf,nbyte) 功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf 所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。 参数定义:

int read(fd,buf,nbyte); int fd; char *buf; unsigned nbyte; 3、write( ) 系统调用格式 read(fd,buf,nbyte) 功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。 参数定义同read( )。 (三)参考程序 #include #include #include int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) { lockf(fd[1],1,0); /*把串放入数组outpipe中*/ sprintf(outpipe,child 1 is using pipe!); /* 向管道写长为50字节的串*/ write(fd[1],outpipe,50); sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork( ))==-1); if(pid2==0) { lockf(fd[1],1,0); /*互斥*/ sprintf(outpipe,child 2 is using pipe!); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0);

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

数值线性代数二版徐树方高立张平文上机习题第三章实验报告

- 1 - 第三章上机习题 用你所熟悉的的计算机语言编制利用QR 分解求解线性方程组和线性最小二乘问题的 通用子程序,并用你编制的子程序完成下面的计算任务: (1)求解第一章上机习题中的三个线性方程组,并将所得的计算结果与前面的结果相比较,说明各方法的优劣; (2)求一个二次多项式+bt+c y=at 2 ,使得在残向量的2范数下最小的意义下拟合表3.2中的数据; (3)在房产估价的线性模型 111122110x a x a x a x y ++++= 中,1121,,,a a a 分别表示税、浴室数目、占地面积、车库数目、房屋数目、居室数目、房龄、建筑类型、户型及壁炉数目,y 代表房屋价格。现根据表3.3和表3.4给出的28组数据,求出模型中参数的最小二乘结果。 (表3.3和表3.4见课本P99-100) 解 分析: (1)计算一个Householder 变换H : 由于T T vv I ww I H β-=-=2,则计算一个Householder 变换H 等价于计算相应的v 、β。其中)/(2,||||12v v e x x v T =-=β。 在实际计算中, 为避免出现两个相近的数出现的情形,当01>x 时,令2 12221||||) (-x x x x v n +++= ; 为便于储存,将v 规格化为1/v v v =,相应的,β变为)/(221v v v T =β 为防止溢出现象,用∞||||/x x 代替 (2)QR 分解: 利用Householder 变换逐步将n m A n m ≥?,转化为上三角矩阵A H H H n n 11 -=Λ,则有

?? ? ???=0R Q A ,其中n H H H Q 21=,:),:1(n R Λ=。 在实际计算中,从n j :1=,若m j <,依次计算)),:((j m j A x =对应的)1()1()~ (+-?+-k m k m j H 即对应的j v ,j β,将)1:2(+-j m v j 储存到),:1(j m j A +,j β储存到)(j d ,迭代结束 后再次计算Q ,有??? ? ?? ??=-~001 j j j H I H ,n H H H Q 21=(m n =时1-21n H H H Q =) (3)求解线性方程组b Ax =或最小二乘问题的步骤为 i 计算A 的QR 分解; ii 计算b Q c T 11=,其中):1(:,1n Q Q = iii 利用回代法求解上三角方程组1c Rx = (4)对第一章第一个线性方程组,由于R 的结果最后一行为零,故使用前代法时不计最后一行,而用运行结果计算84x 。 运算matlab 程序为 1 计算Householder 变换 [v,belta]=house(x) function [v,belta]=house(x) n=length(x); x=x/norm(x,inf); sigma=x(2:n)'*x(2:n); v=zeros(n,1); v(2:n,1)=x(2:n); if sigma==0 belta=0; else alpha=sqrt(x(1)^2+sigma); if x(1)<=0 v(1)=x(1)-alpha; else v(1)=-sigma/(x(1)+alpha); end belta=2*v(1)^2/(sigma+v(1)^2); v=v/v(1,1); end end

相关文档