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

哈工大-数值分析上机实验报告

哈工大-数值分析上机实验报告
哈工大-数值分析上机实验报告

实验报告一

题目: 非线性方程求解

摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和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 法通常预先要给出一个猜测初值x 0,然后根据其迭代公式

)

()('

1k k k k x f x f x x -

=+

产生逼近解x *的迭代数列{x k },这就是Newton 法的思想。当x 0接近x *时收敛很快,但是当x 0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为

)

()('

1k k k k x f x f r

x x -=+

其中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);

%%%改进常数或重根数

miu=2;

%%%初始值x0

x0=input('input initial value x0>>');

k=0;%迭代次数

max=100;%最大迭代次数

R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解while (abs(R)>1e-8)

x1=x0-miu*eval(subs(f,'x0','x'))/eval(subs(df,'x0','x'));

R=x1-x0;

x0=x1;

k=k+1;

if (eval(subs(f,'x0','x'))<1e-10);

break end

if k>max ;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值 ss=input('maybe result is error ,choose a new x0,y/n?>>','s'); if strcmp(ss,'y')

x0=input('input initial value x0>>'); k=0; else break end end end

k;%给出迭代次数 x=x0;%给出解

结果分析和讨论:

1. 用二分法计算方程02

sin 2

=-x

x 在[1,2]内的根。(6

10

*5-=ε,下同)

计算结果为

x= 1.40441513061523;

f(x)= -3.797205105904311e-007; k=18;

由f(x)知结果满足要求,但迭代次数比较多,方法收敛速度比较慢。

2. 用二分法计算方程013=--x x 在[1,1.5]内的根。 计算结果为

x= 1.32471847534180; f(x)= 2.209494846194815e-006; k=17;

由f(x)知结果满足要求,但迭代次数还是比较多。

3. 用Newton 法求解下列方程 a) 01=-x xe x 0=0.5; 计算结果为

x= 0.56714329040978; f(x)= 2.220446049250313e-016; k=4;

由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快。

b) 013=--x x x 0=1;

c) 0)12()1(2=--x x x 0=0.45, x 0=0.65;

当x 0=0.45时,计算结果为

x= 0.49999999999983;

f(x)= -8.362754932994584e-014; k=4;

由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快,实际上该方程确实有真解x=0.5。

当x 0=0.65时,计算结果为

x= 0.50000000000000; f(x)=0; k=9;

由f(x)知结果满足要求,实际上该方程确实有真解x=0.5,但迭代次数增多,实际上当取x 0〉0.68时,x ≈1,就变成了方程的另一个解,这说明Newton 法收敛与初值很有关系,有的时候甚至可能不收敛。

4. 用改进的Newton 法求解,有2重根,取2=μ

0)12()1(2

=--x x

x 0=0.55;并与3.中的c)比较结果。

当x 0=0.55时,程序死循环,无法计算,也就是说不收敛。改5.1=μ时,结果收敛为

x=0.50000087704286; f(x)=4.385198907621127e-007; k=16;

显然这个结果不是很好,而且也不是收敛至方程的2重根上。

当x 0=0.85时,结果收敛为

x= 1.00000000000489; f(x)= 2.394337647718737e-023; k=4;

这次达到了预期的结果,这说明初值的选取很重要,直接关系到方法的收敛性,实际上直接用Newton 法,在给定同样的条件和精度要求下,可得其迭代次数k=15,这说明改进后的Newton 法法速度确实比较快。 结论:

对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,二且总体上来说速度比较慢。Newton 法,收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果。改进的Newton 法求解重根问题时,如果初值不当,可能会不收敛,这一点非常重要,当然初值合适,相同情况下其速度要比Newton 法快得多。

实验报告二

题目: Gauss 列主元消去法

摘要:求解线性方程组的方法很多,主要分为直接法和间接法。本实验运用直接法的Guass 消去法,并采用选主元的方法对方程组进行求解。

前言:(目的和意义)

1. 学习Gauss 消去法的原理。

2. 了解列主元的意义。

3. 确定什么时候系数阵要选主元 数学原理:

由于一般线性方程在使用Gauss 消去法求解时,从求解的过程中可以看到,若)

1(-k kk a =0,则必须进行行交换,才能使消去过程进行下去。有的时候即使≠-)

1(k kk

a 0,但是其绝对值非常小,由于机器舍入误差的影响,消去过程也会出现不稳定得现象,导致结果不正确。因此有必要进行列主元技术,以最大可能的消除这种现象。这一技术要寻找行r ,使得

)

1()

1(max ||->-=k ik

k

i k rk

a a

并将第r 行和第k 行的元素进行交换,以使得当前的)

1(-k kk a 的数值比0要大的多。这种列主

元的消去法的主要步骤如下: 1. 消元过程

对k =1,2,…,n -1,进行如下步骤。 1) 选主元,记

ik

k

i rk a a >=max ||

若||rk a 很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对。 2) 交换增广阵A 的r ,k 两行的元素。

kj

rj a a ? (j=k,…,n +1)

3) 计算消元

kk

kj ik ij ij a a a a a /-= (i=k+1,…,n ; j =k +1,……,n +1)

2. 回代过程

对k = n , n -1,…,1,进行如下计算

)/(1

1,∑-=+-

=n

k j kk j kj

n k k a x a

a x

至此,完成了整个方程组的求解。

程序设计:

本实验采用Matlab 的M 文件编写。 Gauss 消去法源程序:

clear

a=input('输入系数阵:>>\n') b=input('输入列阵b :>>\n') n=length(b); A=[a b] x=zeros(n,1); %%%函数主体 for k=1:n-1;

%%%是否进行主元选取

if abs(A(k,k))

yzhuyuan=1;

else yzhuyuan=0;

end

if yzhuyuan; %%%%选主元 t=A(k,k); for r=k+1:n;

if abs(A(r ,k))>abs(t) p=r; else p=k; end end %%%交换元素 if p~=k;

for q=k:n+1; s=A(k,q); A(k,q)=A(p,q); A(p,q)=s; end

end end

%%%判断系数矩阵是否奇异或病态非常严重 if abs(A(k,k))< yipusilong

disp(‘矩阵奇异,解可能不正确’) end

%%%%计算消元,得三角阵 for r=k+1:n; m=A(r ,k)/A(k,k); for q=k:n+1;

A(r,q)=A(r ,q)-A(k,q)*m; end end end

%%%%求解x x(n)=A(n,n+1)/A(n,n); for k=n-1:-1:1; s=0;

for r=k+1:n; s=s+A(k,r)*x(r); end

t=(A(k,n+1)-s) x(k)=(A(k,n+1)-s)/A(k,k) end

结果分析和讨论:

例:求解方程???

?

?

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

??10342212

3

575

62z y x ε。其中ε为一小数,当201410510,10,10,10----=ε时,分别采用列主元和不列主元的Gauss 消去法求解,并比较结果。 记E max 为求出的解代入方程后的最大误差,按要求,计算结果如下:

当510-=ε时,不选主元和选主元的计算结果如下,其中前一列为不选主元结果,后一列为选主元结果,下同。

0.99999934768391 0.99999934782651 2.00000217421972 2.00000217391163 2.99999760859451 2.99999760869721

E max= 9.301857062382624e-010,0

此时,由于ε不是很小,机器误差就不是很大,由E max可以看出不选主元的计算结果精度还可以,因此此时可以考虑不选主元以减少计算量。

当10

ε时,不选主元和选主元的计算结果如下

10-

=

1.00001784630877 0.99999999999348

1.99998009720807

2.00000000002174

3.00000663424731 2.99999999997609

E max= 2.036758973744668e-005,0

此时由E max可以看出不选主元的计算精度就不好了,误差开始增大。

当14

ε时,不选主元和选主元的计算结果如下

=

10-

1.42108547152020 1.00000000000000

1.66666666666666

2.00000000000000

3.11111111111111 300000000000000

E max= 0.70770085900503,0

此时由E max可以看出,不选主元的结果应该可以说是不正确了,这是由机器误差引起的。

当20

ε时,不选主元和选主元的计算结果如下

=

10-

NaN 1

NaN 2

NaN 3

E max=NaN, 0

不选主元时,程序报错:Warning: Divide by zero.。这是因为机器计算的最小精度为10-15,所以此时的20

ε就认为是0,故出现了错误现象。而选主元时则没有这种现象,

=

10-

而且由E max可以看出选主元时的结果应该是精确解。

结论:

采用Gauss消去法时,如果在消元时对角线上的元素始终较大(假如大于10-5),那么本方法不需要进行列主元计算,计算结果一般就可以达到要求,否则必须进行列主元这一步,以减少机器误差带来的影响,使方法得出的结果正确。

实验报告三

题目: Rung 现象产生和克服

摘要:由于高次多项式插值不收敛,会产生Runge 现象,本实验在给出具体的实例后,采用分段线性插值和三次样条插值的方法有效的克服了这一现象,而且还取的很好的插值效果。

前言:(目的和意义)

1. 深刻认识多项式插值的缺点。

2. 明确插值的不收敛性怎样克服。

3. 明确精度与节点和插值方法的关系。 数学原理:

在给定n+1个节点和相应的函数值以后构造n 次的Lagrange 插值多项式,实验结果表明(见后面的图)这种多项式并不是随着次数的升高对函数的逼近越来越好,这种现象就是Rung 现象。

解决Rung 现象的方法通常有分段线性插值、三次样条插值等方法。 分段线性插值:

设在区间[a, b ]上,给定n+1个插值节点

a=x 0

和相应的函数值y 0,y 1,…,y n ,,求作一个插值函数)(x φ,具有如下性质:

1) j j y x =)(φ,j=0,1,…,n 。

2) )(x φ在每个区间[x i , x j ]上是线性连续函数。则插值函数)(x φ称为区间[a, b ]上对应n 个数据点的分段线性插值函数。

三次样条插值: 给定区间[a, b ]一个分划

⊿:a=x 0

1) S(x)在每个区间[x i , x j ]上是不高于3次的多项式。

2) S(x)及其2阶导数在[a, b ]上连续。则称S(x)使关于分划⊿的三次样条函数。 程序设计:

本实验采用Matlab 的M 文件编写。其中待插值的方程写成function 的方式,如下

function y=f(x);

y=1/(1+25*x*x);

写成如上形式即可,下面给出主程序

Lagrange插值源程序:

n=input('将区间分为的等份数输入:\n');

s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数

x=-1:0.01:1;

f=0;

for q=1:n+1;

l=1;%求插值基函数

for k=1:n+1;

if k~=q;

l=l.*(x-s(k))./(s(q)-s(k));

else

l=l;

end

end

f=f+Rf(s(q))*l;%求插值函数

end

plot(x,f,'r')%作出插值函数曲线

grid on

hold on

分段线性插值源程序

clear

n=input('将区间分为的等份数输入:\n');

s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数

m=0;

hh=0.001;

for x=-1:hh:1;

ff=0;

for k=1:n+1;%%%求插值基函数

switch k

case 1

if x<=s(2);

l=(x-s(2))./(s(1)-s(2));

else

l=0;

end

case n+1

if x>s(n);

l=(x-s(n))./(s(n+1)-s(n));

else

l=0;

end

otherwise

if x>=s(k-1)&x<=s(k);

l=(x-s(k-1))./(s(k)-s(k-1));

else if x>=s(k)&x<=s(k+1);

l=(x-s(k+1))./(s(k)-s(k+1));

else

l=0;

end

end

end

ff=ff+Rf(s(k))*l;%%求插值函数值

end

m=m+1;

f(m)=ff;

end

%%%作出曲线

x=-1:hh:1;

plot(x,f,'r');

grid on

hold on

三次样条插值源程序:(采用第一边界条件)

clear

n=input('将区间分为的等份数输入:\n');

%%%插值区间

a=-1;

b=1;

hh=0.001;%画图的步长

s=[a+(b-a)/n*[0:n]];%%%给定的定点,Rf为给定的函数%%%%第一边界条件Rf"(-1),Rf"(1)

v=5000*1/(1+25*a*a)^3-50/(1+25*a*a)^4;

for k=1:n;%取出节点间距

h(k)=s(k+1)-s(k);

end

for k=1:n-1;%求出系数向量lamuda,miu

la(k)=h(k+1)/(h(k+1)+h(k));

miu(k)=1-la(k);

end

%%%%赋值系数矩阵A

for k=1:n-1;

for p=1:n-1;

switch p

case k

A(k,p)=2;

case k-1

A(k,p)=miu(p+1);

case k+1

A(k,p)=la(p-1);

otherwise

A(k,p)=0;

end

end

end

%%%%求出d阵

for k=1:n-1;

switch k

case 1

d(k)=6*f2c([s(k) s(k+1) s(k+2)])-miu(k)*v;

case n-1

d(k)=6*f2c([s(k) s(k+1) s(k+2)])-la(k)*v;

otherwise

d(k)=6*f2c([s(k) s(k+1) s(k+2)]);

end

end

%%%%求解M阵

M=A\d';

M=[v;M;v]; %%%% m=0; f=0; for x=a:hh:b; if x==a; p=1; else

p=ceil((x-s(1))/((b-a)/n)); end ff1=0; ff2=0; ff3=0; ff4=0; m=m+1;

ff1=1/h(p)*(s(p+1)-x)^3*M(p)/6; ff2=1/h(p)*(x-s(p))^3*M(p+1)/6;

ff3=((Rf(s(p+1))-Rf(s(p)))/h(p)-h(p)*(M(p+1)-M(p))/6)*(x-s(p)); ff4=Rf(s(p))-M(p)*h(p)*h(p)/6; f(m)=ff1+ff2+ff3+ff4 ; end

%%%作出插值图形 x=a:hh:b; plot(x,f,'k') hold on grid on

结果分析和讨论:

本实验采用函数2

2511)(x

x f +=

进行数值插值,插值区间为[-1,1],给定节点为

x j =-1+jh ,h=0.1,j =0,…,n 。下面分别给出Lagrang e 插值,三次样条插值,线性插值的函数曲线和数据表。图中只标出Lagrang e 插值的十次多项式的曲线,其它曲线没有标出,从数据表中可以看出具体的误差。

表中,L10(x)为Lagrang e插值的10次多项式,S10(x),S40(x)分别代表n=10,40的三次样条插值函数,X10(x),X40(x)分别代表n=10,40的线性分段插值函数。

x f(x)L10(x)S10(x) S40(x) X10(x) X40(x) -1.00000000000000 0.03846153846154 0.03846153846154 0.03846153846154 0.03846153846154 0.03846153846154 0.03846153846154 -0.95000000000000 0.04244031830239 1.92363114971920 0.04240833151040 0.04244031830239 0.04355203619910 0.04244031830239 -0.90000000000000 0.04705882352941 1.57872099034926 0.04709697585458 0.04705882352941 0.04864253393665 0.04705882352941 -0.85000000000000 0.05245901639344 0.71945912837982 0.05255839923979 0.05245901639344 0.05373303167421 0.05245901639344 -0.80000000000000 0.05882352941176 0.05882352941176 0.05882352941176 0.05882352941176 0.05882352941176 0.05882352941176 -0.75000000000000 0.06639004149378 -0.23146174989674 0.06603986172744 0.06639004149378 0.06911764705882 0.06639004149378 -0.70000000000000 0.07547169811321 -0.22619628906250 0.07482116198866 0.07547169811321 0.07941176470588 0.07547169811321 -0.65000000000000 0.08648648648649 -0.07260420322418 0.08589776360849 0.08648648648649 0.08970588235294 0.08648648648649 -0.60000000000000 0.10000000000000 0.10000000000000 0.10000000000000 0.10000000000000 0.10000000000000 0.10000000000000 -0.55000000000000 0.11678832116788 0.21559187891257 0.11783833017713 0.11678832116788 0.12500000000000 0.11678832116788 -0.50000000000000 0.13793103448276 0.25375545726103 0.14004371555730 0.13793103448276 0.15000000000000 0.13793103448276 -0.45000000000000 0.16494845360825 0.23496854305267 0.16722724315883 0.16494845360825 0.17500000000000 0.16494845360825 -0.40000000000000 0.20000000000000 0.20000000000000 0.20000000000000 0.20000000000000 0.20000000000000 0.20000000000000 -0.35000000000000 0.24615384615385 0.19058046675376 0.24054799403464 0.24615384615385 0.27500000000000 0.24615384615385 -0.30000000000000 0.30769230769231 0.23534659131080 0.29735691695860 0.30769230769231 0.35000000000000 0.30769230769231 -0.25000000000000 0.39024390243902 0.34264123439789 0.38048738140327 0.39024390243902 0.42500000000000 0.39024390243902 -0.20000000000000 0.50000000000000 0.50000000000000 0.50000000000000 0.50000000000000 0.50000000000000 0.50000000000000 -0.15000000000000 0.64000000000000 0.67898957729340 0.65746969368431 0.64000000000000 0.62500000000000 0.64000000000000 -0.10000000000000 0.80000000000000 0.84340742982890 0.82052861660828 0.80000000000000 0.75000000000000 0.80000000000000 -0.05000000000000 0.94117647058824 0.95862704866073 0.94832323122810 0.94117647058824 0.87500000000000 0.94117647058824

0 1.00000000000000 1.00000000000000 1.00000000000000 1.00000000000000 1.00000000000000 1.00000000000000

0.05000000000000 0.94117647058824 0.95862704866073 0.94832323122810 0.94117647058824 0.87500000000000 0.94117647058824

0.10000000000000 0.80000000000000 0.84340742982890 0.82052861660828 0.80000000000000 0.75000000000000 0.80000000000000

0.15000000000000 0.64000000000000 0.67898957729340 0.65746969368431 0.64000000000000 0.62500000000000 0.64000000000000

0.20000000000000 0.50000000000000 0.50000000000000 0.50000000000000 0.50000000000000 0.50000000000000 0.50000000000000

0.25000000000000 0.39024390243902 0.34264123439789 0.38048738140327 0.39024390243902 0.42500000000000 0.39024390243902

0.30000000000000 0.30769230769231 0.23534659131080 0.29735691695860 0.30769230769231 0.35000000000000 0.30769230769231

0.35000000000000 0.24615384615385 0.19058046675376 0.24054799403464 0.24615384615385 0.27500000000000 0.24615384615385

0.40000000000000 0.20000000000000 0.20000000000000 0.20000000000000 0.20000000000000 0.20000000000000 0.20000000000000

0.45000000000000 0.16494845360825 0.23496854305267 0.16722724315883 0.16494845360825 0.17500000000000 0.16494845360825

0.50000000000000 0.13793103448276 0.25375545726103 0.14004371555730 0.13793103448276 0.15000000000000 0.13793103448276

0.55000000000000 0.11678832116788 0.21559187891257 0.11783833017713 0.11678832116788 0.12500000000000 0.11678832116788

0.60000000000000 0.10000000000000 0.10000000000000 0.10000000000000 0.10000000000000 0.10000000000000 0.10000000000000

0.65000000000000 0.08648648648649 -0.07260420322418 0.08589776360849 0.08648648648649 0.08970588235294 0.08648648648649

0.70000000000000 0.07547169811321 -0.22619628906250 0.07482116198866 0.07547169811321 0.07941176470588 0.07547169811321

0.75000000000000 0.06639004149378 -0.23146174989674 0.06603986172744 0.06639004149378 0.06911764705882 0.06639004149378

0.80000000000000 0.05882352941176 0.05882352941176 0.05882352941176 0.05882352941176 0.05882352941176 0.05882352941176

0.85000000000000 0.05245901639344 0.71945912837982 0.05255839923979 0.05245901639344 0.05373303167421 0.05245901639344

0.90000000000000 0.04705882352941 1.57872099034926 0.04709697585458 0.04705882352941 0.04864253393665 0.04705882352941

0.95000000000000 0.04244031830239 1.92363114971920 0.04240833151040 0.04244031830239 0.04355203619910 0.04244031830239

1.00000000000000 0.03846153846154 0.03846153846154 0.03846153846154 0.03846153846154 0.03846153846154 0.03846153846154

从以上结果可以看到,用三次样条插值和线性分段插值,不会出现多项式插值是出现的Runge现象,插值效果明显提高。进一步说,为了提高插值精度,用三次样条插值和线性分段插值是可以增加插值节点的办法来满足要求,而用多项式插值函数时,节点数的增加必然会使多项式的次数增加,这样会引起数值不稳定,所以说这两种插值要比多项式插值好的多。而且在给定节点数的条件下,三次样条插值的精度要优于线性分段插值,曲线的光滑性也要好一些。

实验报告四

题目: 多项式最小二乘法

摘要:对于具体实验时,通常不是先给出函数的解析式,再进行实验,而是通过实验的观察和测量给出离散的一些点,再来求出具体的函数解析式。又因为测量误差的存在,实际真实的解析式曲线并不一定通过测量给出的所有点。最小二乘法是求解这一问题的很好的方法,本实验运用这一方法实现对给定数据的拟合。

前言:(目的和意义)

1. 学习使用最小二成法的原理

2. 了解法方程的特性 数学原理:

对于给定的测量数据(x i ,f i )(i=1,2,…,n ),设函数分布为

∑==

m

j j j

x a

x y 0

)()(?

特别的,取)(x j ?为多项式

j

j x x =)(? (j=0, 1,…,m )

则根据最小二乘法原理,可以构造泛函

∑∑==-

=

n

i m

j i j j

i

m x a

f

a a a H 1

10))((),,,(?

=??k

a H (k=0, 1,…,m )

则可以得到法方程

?

???

?

?

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

???

??),()

,(),(),()

,()

,(),()

,(),(),(),()

,(1010101111000100m m m m m m m m f f f a a a ?????????????????????

求该解方程组,则可以得到解m a a a ,,,10 ,因此可得到数据的最小二乘解

∑=≈

m

j j j

x a

x f 0

)()(?

程序设计:

本实验采用Matlab 的M 文件编写。其中多项式函数j j x =?写成function 的方式,如下

function y=fai(x,j) y=1; for i=1:j y=x.*y; end

写成如上形式即可,下面给出主程序。

多项式最小二乘法源程序

clear

%%%给定测量数据点(s,f) s=[3 4 5 6 7 8 9];

f=[2.01 2.98 3.50 5.02 5.47 6.02 7.05]; %%%计算给定的数据点的数目 n=length(f);

%%%给定需要拟合的数据的最高次多项式的次数 m=10; %%%程序主体 for k=0:m;

g=zeros(1,m+1); for j=0:m; t=0;

for i=1:n;%计算内积(fai(si),fai(si)) t=t+fai(s(i),j)*fai(s(i),k); end g(j+1)=t; end

A(k+1,:)=g;%法方程的系数矩阵 t=0;

for i=1:n;%计算内积(f(si),fai(si)) t=t+f(i)*fai(s(i),k); end b(k+1,1)=t; end

a=A\b%求出多项式系数

x=[s(1):0.01:s(n)]';

y=0;

for i=0:m;

y=y+a(i+1)*fai(x,i);

end

plot(x,y)%作出拟合成的多项式的曲线

grid on

hold on

plot(s,f,'rx') %在上图中标记给定的点

结果分析和讨论:

例用最小二乘法处理下面的实验数据.

并作出)

f的近似分布图。

(x

分别采用一次,二次和五次多项式来拟合数据得到相应的拟合多项式为:

y1=-0.38643+0.82750x;

y2=-1.03024+1.06893x-0.02012x2;

y5=-50.75309+51.53527x-19.65947x2+3.66585x3-0.32886x4+0.01137x5;

分别作出它们的曲线图,图中点划线为y1曲线,实线为y2曲线,虚线为y5曲线。’x’为给定的数据点。从图中可以看出并不是多项式次数越高越好,次数高了,曲线越能给定点处和实际吻合,但别的地方就很差了。因此,本例选用一次和两次的多项式拟合应该就可以了。

实验报告五

题目: Romberg 积分法

摘要:对于实际的工程积分问题,很难应用Newton-Leibnitz 公式去求解。因此应用数值方法进行求解积分问题已经有着很广泛的应用,本文基于Romberg 积分法来解决一类积分问题。

前言:(目的和意义)

1. 理解和掌握Romberg 积分法的原理;

2. 学会使用Romberg 积分法;

3. 明确Romberg 积分法的收敛速度及应用时容易出现的问题。 数学原理:

考虑积分?

=

b

a

dx x f f I )()(,欲求其近似值,通常有复化的梯形公式、Simpsion 公式和

Cotes 公式。但是给定一个精度,这些公式达到要求的速度很缓慢。如何提高收敛速度,自然是人们极为关心的课题。为此,记T 1,k 为将区间[a,b ]进行2k 等分的复化的梯形公式计算结果,记T 2,k 为将区间[a,b ]进行2k 等分的复化的Simpsion 公式计算结果,记T 3,k 为将区间[a,b ]进行2k 等分的复化的Cotes 公式计算结果。根据Richardson 外推加速方法,可以得到收敛速度较快的Romberg 积分法。其具体的计算公式为:

1. 准备初值,计算

)]()([2

1,1b f a f b a T +-=

2. 按梯形公式的递推关系,计算

-=-+-+-+

-+

=

1

2

1

,11,11

))5.0(2

(2

21k i k k

k k i a b a f a b T T

3. 按Romberg 积分公式计算加速值

1

4

4

1

,11,11

,--=

----+---m m

k m m k m m m k m T T T m=2,…,k

4. 精度控制。对给定的精度R ,若

R

T T m m <--1,11,

则终止计算,并取1,m T 为所求结果;否则返回2重复计算,直至满足要求的精度为止。

程序设计:

本实验采用Matlab的M文件编写。其中待积分的函数写成function的方式,例如如下

function yy=f(x,y);

yy=x.^3;

写成如上形式即可,下面给出主程序

Romberg积分法源程序

%%% Romberg积分法

clear

%%%积分区间

b=3;

a=1;

%%%精度要求

R=1e-5;

%%%应用梯形公式准备初值

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

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

T(2,1)=(4*T(1,2)-T(1,1))/(4-1);

j=2;

m=2;

%%%主程序体%%%

while(abs(T(m,1)-T(m-1,1))>R);%%%精度控制

j=j+1;

s=0;

for p=1:2^(j-2);

s=s+f(a+(2*p-1)*h/(2^(j-1)));

end

T(1,j)=T(1,j-1)/2+h*s/(2^(j-1)); %%%梯形公式应用

for m=2:j;

k=(j-m+1);

T(m,k)=((4^(m-1))*T(m-1,k+1)-T(m-1,k))/(4^(m-1)-1);

end

end

%%%给出Romberg积分法的函数表

I=T(m,1)

东南大学数值分析上机题答案

数值分析上机题 第一章 17.(上机题)舍入误差与有效数 设∑=-= N j N j S 2 2 11 ,其精确值为)111-23(21+-N N 。 (1)编制按从大到小的顺序1 -1 ···1-311-21222N S N +++=,计算N S 的通用 程序; (2)编制按从小到大的顺序1 21 ···1)1(111 222-++--+ -=N N S N ,计算N S 的通用程序; (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么? 解: 程序: (1)从大到小的顺序计算1 -1 ···1-311-21222N S N +++= : function sn1=fromlarge(n) %从大到小计算sn1 format long ; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end (2)从小到大计算1 21 ···1)1(111 2 22 -++--+-= N N S N function sn2=fromsmall(n) %从小到大计算sn2 format long ; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end (3) 总的编程程序为: function p203()

clear all format long; n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn); sn1=fromlarge(n); fprintf('从大到小计算的值为%f\n',sn1); sn2=fromsmall(n); fprintf('从小到大计算的值为%f\n',sn2); function sn1=fromlarge(n) %从大到小计算sn1 format long; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end function sn2=fromsmall(n) %从小到大计算sn2 format long; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end end 运行结果:

数据库实验3答案

实验三:交互式SQL语句的使用 1、实验目的 (1)掌握数据库对象的操作过程,包括创建、修改、删除 (2)熟悉表的各种操作,包括插入、修改、删除、查询 (3)熟练掌握常用SQL语句的基本语法 2、实验平台 使用SQL Server提供的Microsoft SQL Server Management Studio工具,交互式使用SQL语句。 3 实验容及要求 选择如下一个应用背景之一: ●学生选课系统 ●习题3、4、和5中使用的数据库 ●其它你熟悉的应用 (1)建立一个数据库和相关的表、索引、视图等数据库对象,练习对表、索引和视图的各种操作。 (2)要求认真进行实验,记录各实验用例及执行结果。 (3)深入了解各个操作的功能。 实验要求包括如下方面的容: 3.1 数据定义 1.基本表的创建、修改及删除 2.索引的创建 3.视图的创建 3.2 数据操作 完成各类更新操作包括: 1.插入数据

2.修改数据 3. 删除数据 3.3 数据查询操作 完成各类查询操作 1.单表查询 2.分组统计 3. 连接查询 4. 嵌套查询 5. 集合查询 3.4 数据操作 1.创建视图 2.视图查询 参考示例: 建立一个学生选课数据库,练习对表、视图和索引等数据库对象的各种操作。 一、数据定义 创建学生选课数据库ST,包括三个基本表,其中Student表保存学生基本信息,Course表保存课程信息,SC表保存学生选课信息,其结构如下表: 表1. Student表结构 表2. Course表结构

表3. SC表结构 1.创建、修改及删除基本表 (1)创建Student表 CREATE TABLE Student (Sno CHAR(8)PRIMARY KEY, Sname CHAR(8), Ssex CHAR(2)NOT NULL, Sage INT, Sdept CHAR(20) ); (2)创建Course表 CREATE TABLE Course (Cno CHAR(4)PRIMARY KEY, Cname CHAR(40)NOT NULL, Cpno CHAR(4), Ccredit SMALLINT, ); (3)创建SC表 CREATE TABLE SC (Sno CHAR(8)FOREIGN KEY (Sno)REFERENCES Student(Sno), Cno CHAR(4), Grade SMALLINT, ); (4)创建员工表Employee

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

数值分析实验报告176453

实验报告 插值法 数学实验室 数值逼近 算法设计 级 ____________________________ 号 ____________________________ 名 _____________________________ 实验项目名称 实验室 所属课程名称 实验类型 实验日期

实验概述: 【实验目的及要求】 本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插 多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的 优劣。 本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并 去实现。 【实验原理】 《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值, 拉格朗日 插值的相应算法和相关性质。 【实验环境】(使用的软硬件) 软件: MATLAB 2012a 硬件: 电脑型号:联想 Lenovo 昭阳E46A 笔记本电脑 操作系统: Win dows 8专业版 处理器:In tel ( R Core ( TM i3 CPU M 350 @2.27GHz 2.27GHz 实验内容: 【实验方案设计】 第一步,将书上关于三种插值方法的内容转化成程序语言,用 MATLA B 现; 第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。 【实验过程】(实验步骤、记录、数据、分析) 实验的主要步骤是:首先分析问题,根据分析设计 MATLA 程序,利用程序算出 问题答案,分析所得答案结果,再得出最后结论。 实验一: 已知函数在下列各点的值为 试用4次牛顿插值多项式 P 4( x )及三次样条函数 S ( x )(自然边界条件)对数据进行插值。 用图给出{( X i , y i ), X i =0.2+0.08i , i=0 , 1, 11, 10 } , P 4 ( x )及 S ( x )。 值方法:牛顿 在MATLAB 件中

数值分析MATLAB上机实验

数值分析实习报告 姓名:gestepoA 学号:201******* 班级:***班

序言 随着计算机技术的迅速发展,数值分析在工程技术领域中的应用越来越广泛,并且成为数学与计算机之间的桥梁。要解决工程问题,往往需要处理很多数学模型,不仅要研究各种数学问题的数值解法,同时也要分析所用的数值解法在理论上的合理性,如解法所产生的误差能否满足精度要求:解法是否稳定、是否收敛及熟练的速度等。而且还能减少大量的人工计算。 由于工程实际中所遇到的数学模型求解过程迭代次数很多,计算量很大,所以需要借助如MATLAB,C++,VB,JAVA的辅助软件来解决,得到一个满足误差限的解。本文所计算题目,均采用MATLAB进行编程,MATLAB被称为第四代计算机语言,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来MATLAB最突出的特点就是简洁,它用更直观的、符合人们思维习惯的代码。它具有以下优点: 1友好的工作平台和编程环境。MATLAB界面精致,人机交互性强,操作简单。 2简单易用的程序语言。MATLAB是一个高级的矩阵/阵列语言,包含控制语言、函数、数据结构,具有输入、输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编好一个较大的复杂的应用程序(M 文件)后再一起运行。 3强大的科学计算机数据处理能力。包含大量计算算法的集合,拥有600多个工程中要用到的数学运算函数。 4出色的图像处理功能,可以方便地输出二维图像,便于我们绘制函数图像。

目录 1 第一题 (4) 1.1 实验目的 (4) 1.2 实验原理和方法 (4) 1.3 实验结果 (5) 1.3.1 最佳平方逼近法 (5) 1.3.2 拉格朗日插值法 (7) 1.3.3 对比 (8) 2 第二题 (9) 2.1实验目的 (9) 2.2 实验原理和方法 (10) 2.3 实验结果 (10) 2.3.1 第一问 (10) 2.3.2 第二问 (11) 2.3.3 第三问 (11) 3 第三题 (12) 3.1实验目的 (12) 3.2 实验原理和方法 (12) 3.3 实验结果 (12) 4 MATLAB程序 (14)

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 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.用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

数据库实验三

实验三订购数据库 (一)数据定义 一、基本表操作 1.建立基本表 1)创建仓库表,由以下属性组成:仓库号(CHAR 型),城市(CHAR 型),面积(INT 型)。其中仓库号为主码,并且有面积>0 的限定条件 2)创建职工表,由以下属性组成:仓库号(CHAR型),职工号(CHAR型),工资(INT型)。其中职工号为主码,仓库号为外码,工资的限定条件为1000<=工资<=5000。 3)创建供应商表,由以下属性组成:供应商号(CHAR型),供应商名(CHAR型),地址(CHAR 型)。其中供应商号为主码。 4)创建订购单表,由以下属性组成:职工号(CHAR型),供应商号(CHAR型),订购单号(CHAR 型),订购日期(CHAR型)。其中订购单号为主码,职工号和供应商号为外码。 2.修改基本表 1)往订购单表中增加一个新的属性“完成日期”,DATETIME型,并且允许为空值。 2)将职工表中的工资属性类型改为SMALLINT 型。 3)删除刚才在订购单表中加入的“完成日期”属性。 二、索引操作 1.建立索引 1)在订购单表上建立关于供应商号的普通索引supidx。 2)在订购单表的多个字段建立索引sup_empidx,先按照供应商号升序索引,然后按照职工号升序索引。 2.删除索引 1)删除订购单表上的索引supidx。 2)删除订购单表上的索引sup_empidx。 (二)数据操作 一、插入数据 1)向仓库表插入下列数据:WH1,北京,370 WH2,上海,500 WH3,广州,200 WH4,武汉,400 2)向职工表插入下列数据:WH2,E1,1220 WH4,E2,1270 WH1,E3,1210 WH2,E4,1250 WH3,E5,1200 WH3,E6,1230 WH1,E7,1250 3)向供应商表插入下列数据: S1,利民电子元件厂,上海 S2,联华电子公司,武汉 S3,振华电子厂,西安

数值计算实验报告

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

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 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);

贵州大学数值分析上机实验

数值分析上机实验报告 课程名称:数值分析上机实验 学院:机械工程学院专业:机械制造 姓名:张法光学号:2012021691 年级:12级任课教师:代新敏老师 2012年12月30日

一.已知A 与b 12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823 -3.125432 -1.012345 2.189736 1.563849 -0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.113584 2.189736 2.031454 4.10101119.8979180.431637- 3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.1034581 4.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -2 5.173417 0.84671695 1.784317 -8 6.612343 1.1101230 4.719345 -5.6784392]T B ????? ? ?? ? ? ???? ? ? ???? ? ? ????? ?=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。 (3)用列主元素消去法求解 Bx=b 。 解:(3)、用列主元素消去法求解Bx=b (一)、理论依据: 其基本思想是选取绝对值尽量大的元素作为主元素,进行行与列的交换,再进行回代,求出方程的解。 将方阵A 和向量b 写成C=(A b )。将C 的第1列中第1行的元素与其下面的此列的元素逐一进行比较,找到最大的元素1j c ,将第j 行的元素与第1行的元素进行交换,然后通过行变换,将第1列中第2到第n 个元素都消成0。将变换后的矩阵(1)C 的第二列中第二行的元 素与其下面的此列的元素逐一进行比较,找到最大的元素(1) 2k c ,将第k 行的元素与第2行的 元素进行交换,然后通过行变换,将第2列中第3到第n 个元素都消成0。以此方法将矩阵的左下部分全都消成0。 (二)、计算程序: #include "math.h" #include "stdio.h" void main() { double u[9],x1[9],y[9],q[9],b1[9][10],x[9],a[9][9]={ {12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743 },

北邮大数据库实验三

实验三完整性及视图、索引 视图是基于某个查询结果的一个虚拟表,只是用来查看数据的窗口而已。索引能够提供一种以一列或多列的值为基础迅速查找数据表(或视图)中行的能力,用来快速访问数据表(或视图)中的数据。触发器是一种特殊的存储过程,它在特定语言事件发生时自动执行,通常用于实现强制业务规则和数据完整性。 【实验目的】 掌握MySQL视图、索引的使用,理解什么是数据库的完整性。 【实验要求】 1、每完成一个任务,截取全屏幕快照1~3作为中间步骤和结果的贴图,粘贴在最后的实验报告中。 2、除了使用我们提供的数据外还要自己向表中添加些新数据,以保证每个查询结果不为空集,或计数结果不为0。 3、思考题可以选做,作为优秀加分的依据。 【实验任务】 1、创建一个视图,该视图为每门课程的平均成绩,视图包括的列有课程号 及平均成绩,并用利用该视图查询所有课程的平均成绩,要求给出课程号、课程名及平均成绩。

2、创建一个视图,该视图为每门课程的平均成绩,视图包括的列有课程号、 课程名及平均成绩,并用利用该视图查询所有课程的平均成绩,要求给出课程号、课程名及平均成绩。

3、为院系代码表(dept_code)创建基于“院系代码”列的索引。 4、为教室信息表(classroom_info)创建基于room_id列的惟一索引并插入一 条room_id列与表中已有的值重复的数据,观察系统的反馈。

5、重新修改表stud_info、lesson_info及stud_grade,修改的容为: ①为三表增加主码约束,stud_info的主码为stud_id,lesson_info的主码为 course_id,stud_grade的主码为stud_id、course_id。

数值分析实验报告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.给定n 阶方程组Ax b =,其中 6186186186A ?? ? ? ?= ? ? ??? ,7151514b ?? ? ? ?= ? ? ??? 则方程组有解(1,1,,1)T x = 。对10n =和84n =,分别用Gauss 消去法和列主元消去法解方程组,并比较计算结果。 Gauss 消去法: Matlab 编程(建立GS.m 文件): function x=GS(n) A=[];b=[]; for i=1:n-1 A(i,i)=6; A(i,i+1)=1; A(i+1,i)=8; b(i)=15; end A(n,n)=6;b(1)=7;b(n)=14;b=b'; for k=1:n-1 for i=k+1:n m(i,k)=A(i,k)/A(k,k); A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n); b(i)=b(i)-m(i,k)*b(k); end end b(n)=b(n)/A(n,n); for i=n-1:-1:1 b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)'))/A(i,i); end clear x; x=b; disp( 'AX=b 的解x 是') end 计算结果: 在matlab 命令框里输出GS (10)得: >> GS(10) AX=b 的解x 是 ans = 1.0000 1.0000

1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 在matlab命令框里输出GS(84)得:>> GS(84) AX=b的解x是 ans = 1.0e+008 * 0.0000 … … … 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0001 0.0002 -0.0003 0.0007 -0.0013 0.0026 -0.0052 0.0105 -0.0209 0.0419 -0.0836 0.1665 -0.3303

数据库实验三

注意:在粘贴截图时请保留窗口完整标题,但只需保留关键界面,多余的空白界面请删除。 一、实验课时:4 二、实验目的 (1) 掌握使用T-SQL语句创建、删除数据库的方法。 (2) 掌握使用T-SQL语句创建、修改、删除表的方法。 (3) 掌握使用T-SQL语句创建、删除数据库完整性约束条件的方法。 (4) 掌握使用T-SQL语句对表添加、修改、删除数据的方法。 (5) 掌握使用T-SQL语句创建、修改、删除、查询视图的方法。 三、实验要求 (1) 使用SQL Server 2008查询分析器。 (2) 严格依照操作步骤进行。 (3) 在本地服务器中创建和管理数据库。 四、实验环境 (1) PC机。 (2) SQL Server 2008。 五、实验内容及步骤(请特别注意实验步骤:第6项的第1小项,即“插入数据”操作必须在第4项以前执行) ??? 1.使用Transact-SQL语句创建JOBS数据库,数据库名格式为 JOBS_SunYu(即JOBS_你的中文名字拼音) CREATE Database JOBS_DengZhiPeng;

2.使用Transact-SQL语句创建JOBS数据库包含的所有表 EMPLOYEE CREATE TABLE EMPLOYEE( EMPNO SMALLINT NOT NULL, SUPNAME VARCHAR(50)NOT NULL, FORENAMES VARCHAR(50)NOT NULL, DOB DATE NOT NULL, ADDRESS VARCHAR(50)NOT NULL, TELNO CHAR(10)NOT NULL, DEPNO SMALLINT NOT NULL ); JOBHISTORY CREATE TABLE JOBHISTORY( EMPNO SMALLINT NOT NULL, POSITION VARCHAR(50)NOT NULL, STARDATE DATE NOT NULL, ENDDATE DATE NULL, SALARY INT NOT NULL ); COURSE CREATE TABLE COURSE( COURSENO SMALLINT NOT NULL, CNAME VARCHAR(50)NOT NULL, CDATE DATE NOT NULL ); DEPARTMENT CREATE TABLE DEPARTMENT( DEPNO SMALLINT NOT NULL, DNAME VARCHAR(50)NOT NULL, LOCATION VARCHAR(10)NOT NULL, HEAD SMALLINT NOT NULL ); EMPCOURSE CREATE TABLE EMPCOURSE( EMPNO SMALLINT NOT NULL,

数值分析实验报告

实验一、误差分析 一、实验目的 1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3.通过上机计算,了解舍入误差所引起的数值不稳定性。 二.实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三.实验内容 对20,,2,1,0 =n ,计算定积分 ?+=10 5dx x x y n n . 算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n , 取 ?≈-=+=1 00182322.05ln 6ln 51dx x y . 算法2:利用递推公式 n n y n y 51511-= - 1,,19,20 =n . 注意到 ???=≤+≤=10 10202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果 程序一: t=log(6)-log(5);

n=1; y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1; end y y =0.0884 y =0.0581 y =0.0431 y =0.0346 y =0.0271 y =0.0313 y =-0.0134 y =0.1920 y =-0.8487 y =4.3436 y =-21.6268 y =108.2176 y =-541.0110 y =2.7051e+003 y =-1.3526e+004 y =6.7628e+004 y =-3.3814e+005 y =1.6907e+006 y =-8.4535e+006 y =4.2267e+007 程序2: y=zeros(20,1); n=1; y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end 运行结果:y = 0.0884 0.0580 0.0431 0.0343 0.0285 0.0212 0.0188 0.0169

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

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和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);

数值分析2016上机实验报告

序言 数值分析是计算数学的范畴,有时也称它为计算数学、计算方法、数值方法等,其研究对象是各种数学问题的数值方法的设计、分析及其有关的数学理论和具体实现的一门学科,它是一个数学分支。是科学与工程计算(科学计算)的理论支持。许多科学与工程实际问题(核武器的研制、导弹的发射、气象预报)的解决都离不开科学计算。目前,试验、理论、计算已成为人类进行科学活动的三大方法。 数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值计算方法及其理论与软件实现。现在面向数值分析问题的计算机软件有:C,C++,MATLAB,Python,Fortran等。 MATLAB是matrix laboratory的英文缩写,它是由美国Mathwork公司于1967年推出的适合用于不同规格计算机和各种操纵系统的数学软件包,现已发展成为一种功能强大的计算机语言,特别适合用于科学和工程计算。目前,MATLAB应用非常广泛,主要用于算法开发、数据可视化、数值计算和数据分析等,除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。 本实验报告使用了MATLAB软件。对不动点迭代,函数逼近(lagrange插值,三次样条插值,最小二乘拟合),追赶法求解矩阵的解,4RungeKutta方法求解,欧拉法及改进欧拉法等算法做了简单的计算模拟实践。并比较了各种算法的优劣性,得到了对数值分析这们学科良好的理解,对以后的科研数值分析能力有了极大的提高。

目录 序言 (1) 问题一非线性方程数值解法 (3) 1.1 计算题目 (3) 1.2 迭代法分析 (3) 1.3计算结果分析及结论 (4) 问题二追赶法解三对角矩阵 (5) 2.1 问题 (5) 2.2 问题分析(追赶法) (6) 2.3 计算结果 (7) 问题三函数拟合 (7) 3.1 计算题目 (7) 3.2 题目分析 (7) 3.3 结果比较 (12) 问题四欧拉法解微分方程 (14) 4.1 计算题目 (14) 4.2.1 方程的准确解 (14) 4.2.2 Euler方法求解 (14) 4.2.3改进欧拉方法 (16) 问题五四阶龙格-库塔计算常微分方程初值问题 (17) 5.1 计算题目 (17) 5.2 四阶龙格-库塔方法分析 (18) 5.3 程序流程图 (18) 5.4 标准四阶Runge-Kutta法Matlab实现 (19) 5.5 计算结果及比较 (20) 问题六舍入误差观察 (22) 6.1 计算题目 (22) 6.2 计算结果 (22) 6.3 结论 (23) 7 总结 (24) 附录

相关文档
相关文档 最新文档