文档库 最新最全的文档下载
当前位置:文档库 › 西交计算方法A上机大作业

西交计算方法A上机大作业

西交计算方法A上机大作业
西交计算方法A上机大作业

计算方法A 上机大作业

1. 共轭梯度法求解线性方程组

算法原理:由定理3.4.1可知系数矩阵A 是对称正定矩阵的线性方程组Ax=b 的解与求解二次函数1()2

T

T f x x Ax b x =-极小点具有等价性,所以可以利用共轭梯度法求解1()2

T

T f x x Ax b x =

-的极小点来达到求解Ax=b 的目的。 共轭梯度法在形式上具有迭代法的特征,在给定初始值情况下,根据迭代公式:

(1)()()k k k k x x d α+=+

产生的迭代序列(1)(2)(3)x x x ,,,... 在无舍入误差假定下,最多经过n 次迭代,就可求得()f x 的最小值,也就是方程Ax=b 的解。 首先导出最佳步长k α的计算式。

假设迭代点()k x 和搜索方向()k d 已经给定,便可以通过()()()()

k k f x d φαα=+的极小化

()()min ()()k k f x d φαα=+

来求得,根据多元复合函数的求导法则得:

()()()'()()k k T k f x d d φαα=?+

令'()0φα=,得到:

()()

()()k T k k k T k r d d Ad

α=,其中()()k k r b Ax =-

然后确定搜索方向()k d 。给定初始向量(0)x 后,由于负梯度方向是函数下降最快的方向,故第一次迭代取搜索方向(0)

(0)(0)(0)()d r f x b Ax ==-?=-。令

(1)(0)00x x d α=+

其中(0)(0)0(0)(0)

T T r d d Ad

α=。第二次迭代时,从(1)

x 出发的搜索方向不再取(1)r ,而是选取(1)

(1)(0)0d

r d β=+,使得(1)d 与(0)d 是关于矩阵A 的共轭向量,由此可

求得参数0β:

(1)(0)

0(0)(0)T T r Ad d Ad

β=-

然后从(1)x 出发,沿(1)d 进行搜索得到(2)

(1)(1)1x x d α=+

设已经求出(1)

()()k k k k x x d α+=+,计算(1)(1)k k r b Ax ++=-。

令(1)

(1)()k k k k d

r d β++=+,选取k β,使得(1)k d +和()k d 是关于A 的共轭向量,可

得:

(1)()

()()k T k k k T k r Ad d Ad

β+=-

具体编程计算过程如下:

(1) 给定初始近似向量(0)x 以及精度0ε>; (2) 计算(0)(0)r b Ax =-,取(0)(0)d r =; (3) For k=0 to n-1 do

(i )()()

0()()k T k k T k r d d Ad

α=;

(ii )(1)

()()k k k k x

x d α+=+;

(iii )(1)(1)k k r b Ax ++=-;

(iv )若(1)

k r ε+≤或k=n-1,则输出近似解(1)k x +,停止;否则,转(v );

(v )2

(1)22()

2

k k k r r

β+=;

(vi )(1)

(1)()k k k k d r d β++=+;

End do

程序框图:

程序使用说明:本共轭梯度法求解线性方程的程序直接打开matlab运行,在求解线性方程组Ax=b(A是对称正定矩阵)的时候,直接运行程序Gongetidufa,输入A,b的值,虽然该函数是通用的,但是对于矩阵A和向量b的输入,需要使用者根据A和b的特点自行输入。

算例3.4.2计算结果:

对99页例题3.4.2,运行程序Gongetidufa将矩阵A,b读入系统

程序如下:

clear all

clc

A=input('请输入A的值'); %输入n阶正定矩阵A的值

b=input('请输入b的值:'); %输入b的值

n=size(A,1); %求出矩阵A的行数

x=zeros(n,1); %给定x的初始值

e=10^(-12); %给出精度

r=b-A*x;

d=r;

for(i=1:n)

a=norm(r,2)^2/(d'*A*d); %求最佳步长 x=x+a*d; j=r;

r=b-A*x;

if(norm(r)<=e||i==n) break; else

B=norm(r,2)^2/norm(j,2)^2; d=r+B*d; end end

x %输出最终的x 的结果 计算结果:x=[1;1;1]

2.三次样条差值

算法原理(三次样条插值函数的导出): (i).导出在子区间[]1,i i x x -上的S(x)的表达式

由于S(x)的二阶导数连续,设S(x)再节点i x 处的二阶导数值S ’’(xi)=Mi ,其中Mi 为未知的待定参数。由S(x)是分段的三次多项式知,S ’’(x)是分段线性函数,S ’’(x)在子区间[]1,i i x x -上可表示为

1

111

111''(),i i i i

i i i i i i i i i i

i i

x x x x S x M M x x x x x x x x M M x x x h h ---------=

+----=+≤≤

其中hi=xi-x(i-1),对上式两次积分得到

()()3

3

11

11()66()(),i i i i i

i

i i i i i i

x x x x S x M M h h b x x c x x x x x ------=

+

+

-+-≤≤

由插值条件11(),()i i i i S x y S x y --==得到

22

11()/,()/66

i i i i i i i i i i h h b y M h c y M h --=-=-

将i i b c 和代入()S x 可得

()()33

2

1111211()()/()

666

()/(),6

i i i i i i i i i i i i

i i i i i i x x x x h S x M M y M h x x h h h

y M h x x x x x --------=++--+-

-≤≤

(ii).建立参数i M 的方程组 对

S(x)求导可得

()()2

2

11

11

1'()()/22,6

i

i i i i i i

i

i

i i i i i

x x x x S x M M y y h h h M M h x x x -------=-+

+---

≤≤

上式中令i x x =得S(x)在xi 处的左导数'

()i S x -,令1i x x -=得到右导数'

()i S x +,因为S(x)在内节点xi 处一阶导数连续,所以'

'

()()i i S x S x -+=,进一步推导可得

112,1,2,3,...,1i i i i i i M M M d i n μλ-+++==-

其中

1

i

i i i h h h μ+=

+,

1

1

1i i i i i h h h λμ++==-+,

1111116

()6[,,],1,2,...,1i i i i i i i i i i i i

y y y y d f x x x i n h h h h +--+++--=

-==-+

上式为三弯矩方程组,因为三弯矩方程组只有n-1个方程,不能确定n+1个未知

量Mi ,所以需要再增加两个方程,由边界条件确定。 第一种边界条件:此时已知''()''()f a f b 和.不妨取0''()M f a =,''()n M f b =,这时

三弯矩方程组化为:

1121101112

111222,3,...,22i i i i i i

n i n n n n M M d M M M M d i n M M d M

λμμλμλ-+-----+=-??

++==-??+=-? 以上方程组系数矩阵式严格三对角占优矩阵,可用追赶法求解。求出

(1,2,...,1)i M i n =-后,代入S(x)可得三次样条插值函数的数学表达式。

第二种边界条件:已知'()'()f a f b 和。记

0''()''()n y f a y f b ==,,则有

00'()''()'n n S x y S x y +-==,

所以:

1011101011',',3663n n n n n n n n

y y h h y y h h

M M y M M y h h -----

-+=++= 即

0102M M d +=

12n n n M M d -+=

其中

10

0011

16(')6

(')

n n n n n n

y y d y h h y y d y h h --=

--=-

所以得到第二种边界条件下的三弯矩方程组:

010111

2,

2,1,2,3,...,1,2i i i i i i n n n M M d M M M d i n M M d

μλ-+-+=??

++==-??+=?

该方程组系数矩阵是严格三对角占优矩阵,可用追赶法求解,具体追赶法的求解

过程见《数值分析》教材。

第三种边界条件:周期型边界条件.已知()y f x =是以0n T b a x x =-=-为周期的周期函数,则由周期性可知,01101111,,,,n

n n n n y y y y M M M M h h +++=====,这

时,可以将点n x 看成内点,则方程组对i=n 也成立,既有

112n n n n n n M M M d μλ-+++=,

也即

112n n n n n M M M d λμ-++=,

其中

11116

()n n n n n n

y y y y d h h h h ---=

-+ 于是三弯矩方程组化为

112111111

2,2,2,3,4,....,1,2.

n i i i i i i n n n n n M M M d M M M d i n M M M d λμμλλμ-+-++=??

++==-??++=? 该方程组可用matlab 直接解出。

程序框图如下:

程序使用说明:本程序是求解137页例题4.6.1的运行结果,通过程序便可求得M ,然后根据

332111121

1()()()()666(),6i i i i

i i i i i i i

i

i i i i i i

x x x x h x x S x M M y M h h h h x x y M x x x h ---------=++--+-

≤≤

便可得到,在

1i i x x x -≤≤上的三次样条插值函数()S x ,进而得到整个区间上的

三次样条差值函数()S x 。

算例计算结果:

137页例题4.6.1的计算实习

1、打开matlab 运行Sanciyangtiao 程序

2、自行输入x 和y 的节点值

3、得出计算结果

3.龙贝格积分法

对于复化梯形求积公式,取积分近似值

2221

()()41

n n n n I f T T T T ≈+

-=- 对复化辛普森求积公式

4(4)

()(),2880

n b a I f S h f a b ηη--≈-≤≤ 4(4)

211()()(),28802

n

b a h I f S f a b ηη--≈-≤≤

因为(4)

(4)1()()f

f ηη=,所以上述两式相除得

2()16()n

n

I f S I f S -≈-

所以,

2222

1

()()41

n n n n I f S S S S ≈+

-=- 同理,

22231

()()41

n n n n I f C C C C ≈+-=-

对2n T ,2n S 和2n C 分析可得

222222231()411()

411()41n n n n n n n n n n n n S T T T C S S S R C C C ?

=+-?-?

?

=+-?-?

?

=+-?-?

龙贝格积分算法如下:

1

111111121122122222222232222[()()],2

1((21)),0,1,2...,222

1(),411(),0,1,2...,

411(),41k

k k k k k k k k k k k k k k k k i b a

T f a f b b a b a

T T f a i k S T T T C S S S k R C C C +++++++++=-=+--=++-=?

=+-?-?

?

=+-=?-?

?

=+-?-?

如果122,k k R R ε+-<则取12[]k I f R +≈,否则,继续计算直到满足条件。

程序框图:

程序使用说明:运行本程序的时候,直接按照提示输入所求积分的原函数

()f x (比如

1

1x

+),然后按提示依次输入积分下限a ,积分上限b 和积分精度1eps ,然后程序便可计算出原函数()f x 在[,]a b 之间的积分数值。

算例计算结果:

209页题6.2第一小题计算实习结果

1

01

0.69311dx x =+?

4.四阶龙格-库塔法

求解常微分方程的初值问题

算法原理:用标准4级4阶R-K 法求解一阶常微分方程的算法公式为:

1

12341213

2431(22)6

(,)11(,)

2211(,)22

(,)

i i i i i i i i i i y y K K K K K hf x y K hf x h y K K hf x h y K K hf x h y K +?

=++++??

=???

=++??

?

=++??=++??

程序框图:

程序使用说明:运行该程序,该程序是以求解277页例题9.1.2目的编写出来的,考虑到通用性,我们可以根据需要,自行修改代码中的

f=inline('-0.9*y/(1+2*x)','x','y');其中inline 中第一个函数表达式。程序需要自行输入积分区间、步长、和初始值。

算例计算结果:

例题9.1.2的计算实习结果 y =

[ 1.0, 0.98833568, 0.97723896, 0.96666273, 0.95656529,0.94690959]

数值分析上机作业

数值分析上机实验报告 选题:曲线拟合的最小二乘法 指导老师: 专业: 学号: 姓名:

课题八曲线拟合的最小二乘法 一、问题提出 从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。 在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量y 与时间t 的拟合曲线。 二、要求 1、用最小二乘法进行曲线拟合; 2、近似解析表达式为()33221t a t a t a t ++=?; 3、打印出拟合函数()t ?,并打印出()j t ?与()j t y 的误差,12,,2,1 =j ; 4、另外选取一个近似表达式,尝试拟合效果的比较; 5、*绘制出曲线拟合图*。 三、目的和意义 1、掌握曲线拟合的最小二乘法; 2、最小二乘法亦可用于解超定线代数方程组; 3、探索拟合函数的选择与拟合精度间的关系。 四、计算公式 对于给定的测量数据(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))((),,,(? 令 0=??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)()(? 曲线拟合:实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。曲线拟合是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。 五、结构程序设计 在程序结构方面主要是按照顺序结构进行设计,在进行曲线的拟合时,为了进行比较,在程序设计中,直接调用了最小二乘法的拟合函数polyfit ,并且依次调用了plot 、figure 、hold on 函数进行图象的绘制,最后调用了一个绝对值函数abs 用于计算拟合函数与原有数据的误差,进行拟合效果的比较。

数值计算方法大作业

目录 第一章非线性方程求根 (3) 1.1迭代法 (3) 1.2牛顿法 (4) 1.3弦截法 (5) 1.4二分法 (6) 第二章插值 (7) 2.1线性插值 (7) 2.2二次插值 (8) 2.3拉格朗日插值 (9) 2.4分段线性插值 (10) 2.5分段二次插值 (11) 第三章数值积分 (13) 3.1复化矩形积分法 (13) 3.2复化梯形积分法 (14) 3.3辛普森积分法 (15) 3.4变步长梯形积分法 (16) 第四章线性方程组数值法 (17) 4.1约当消去法 (17) 4.2高斯消去法 (18) 4.3三角分解法 (20)

4.4雅可比迭代法 (21) 4.5高斯—赛德尔迭代法 (23) 第五章常积分方程数值法 (25) 5.1显示欧拉公式法 (25) 5.2欧拉公式预测校正法 (26) 5.3改进欧拉公式法 (27) 5.4四阶龙格—库塔法 (28)

数值计算方法 第一章非线性方程求根 1.1迭代法 程序代码: Private Sub Command1_Click() x0 = Val(InputBox("请输入初始值x0")) ep = Val(InputBox(请输入误差限ep)) f = 0 While f = 0 X1 = (Exp(2 * x0) - x0) / 5 If Abs(X1 - x0) < ep Then Print X1 f = 1 Else x0 = X1 End If Wend End Sub 例:求f(x)=e2x-6x=0在x=0.5附近的根(ep=10-10)

1.2牛顿法 程序代码: Private Sub Command1_Click() b = Val(InputBox("请输入被开方数x0")) ep = Val(InputBox(请输入误差限ep)) f = 0 While f = 0 X1 = x0 - (x0 ^ 2 - b) / (2 * b) If Abs(X1 - x0) < ep Then Print X1 f = 1 Else x0 = X1 End If Wend End Sub 例:求56的值。(ep=10-10)

计算方法上机作业

计算方法上机报告 姓名: 学号: 班级: 上课班级:

说明: 本次上机实验使用的编程语言是Matlab 语言,编译环境为MATLAB 7.11.0,运行平台为Windows 7。 1. 对以下和式计算: ∑ ∞ ? ?? ??+-+-+-+=0681581482184161n n n n S n ,要求: ① 若只需保留11个有效数字,该如何进行计算; ② 若要保留30个有效数字,则又将如何进行计算; (1) 算法思想 1、根据精度要求估计所加的项数,可以使用后验误差估计,通项为: 1421114 16818485861681 n n n a n n n n n ε??= ---<< ?+++++??; 2、为了保证计算结果的准确性,写程序时,从后向前计算; 3、使用Matlab 时,可以使用以下函数控制位数: digits(位数)或vpa(变量,精度为数) (2)算法结构 1. ;0=s ?? ? ??+-+-+-+= 681581482184161n n n n t n ; 2. for 0,1,2,,n i =??? if 10m t -≤ end; 3. for ,1,2,,0n i i i =--??? ;s s t =+

(3)Matlab源程序 clear; %清除工作空间变量 clc; %清除命令窗口命令 m=input('请输入有效数字的位数m='); %输入有效数字的位数 s=0; for n=0:50 t=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6)); if t<=10^(-m) %判断通项与精度的关系break; end end; fprintf('需要将n值加到n=%d\n',n-1); %需要将n值加到的数值 for i=n-1:-1:0 t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6)); s=s+t; %求和运算 end s=vpa(s,m) %控制s的精度 (4)结果与分析 当保留11位有效数字时,需要将n值加到n=7, s =3.1415926536; 当保留30位有效数字时,需要将n值加到n=22, s =3.14159265358979323846264338328。 通过上面的实验结果可以看出,通过从后往前计算,这种算法很好的保证了计算结果要求保留的准确数字位数的要求。

数值分析上机题目详解

第一章 一、题目 设∑ =-= N N j S 2 j 2 1 1,其精确值为)11 123(21+--N N 。 1) 编制按从大到小的顺序1 1 13112122 2-+??+-+-=N S N ,计算S N 的通用程序。 2) 编制按从小到大的顺序1 21 1)1(111222-+ ??+--+-= N N S N ,计算S N 的通用程序。 3) 按两种顺序分别计算64210,10,10S S S ,并指出有效位数。(编制程序时用单精度) 4) 通过本次上机题,你明白了什么? 二、通用程序 N=input('Please Input an N (N>1):'); AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); Sn1=single(0); for a=2:N; Sn1=Sn1+1/(a^2-1); end Sn2=single(0); for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); end fprintf('The value of Sn (N=%d)\n',N); fprintf('Accurate Calculation %f\n',AccurateValue); fprintf('Caculate from large to small %f\n',Sn1); fprintf('Caculate from small to large %f\n',Sn2); disp('____________________________________________________')

三、结果 从结果可以看出有效位数是6位。 感想:可以得出,算法对误差的传播有一定的影响,在计算时选一种好的算法可以使结果更为精确。从以上的结果可以看到从大到小的顺序导致大数吃小数的现象,容易产生较大的误差,求和运算从小数到大数所得到的结果才比较准确。

计算方法上机题答案

2.用下列方法求方程e^x+10x-2=0的近似根,要求误差不超过5*10的负4次方,并比较计算量 (1)二分法 (局部,大图不太看得清,故后面两小题都用局部截图) (2)迭代法

(3)牛顿法 顺序消元法 #include #include #include int main() { int N=4,i,j,p,q,k; double m; double a[4][5]; double x1,x2,x3,x4; for (i=0;i

for(k=p+1;kmax1 max1=abs(A(i,k));r=i; end end

数值计算方法I上机实验考试题

数值计算方法I 上机实验考试题(两题任选一题) 1.小型火箭初始质量为900千克,其中包括600千克燃料。火箭竖直向上发射时燃料以15千克/秒的速率燃烧掉,由此产生30000牛顿的恒定推力.当燃料用尽时引擎关闭。设火箭上升的整个过程中,空气阻力与速度平方成正比,比例系数为0.4(千克/米).重力加速度取9.8米/秒2. A. 建立火箭升空过程的数学模型(微分方程); B. 求引擎关闭瞬间火箭的高度、速度、加速度,及火箭到达最高点的时间和高度. 2.小型火箭初始质量为1200千克,其中包括900千克燃料。火箭竖直向上发射时燃料以15千克/秒的速率燃烧掉,由此产生40000牛顿的恒定推力.当燃料用尽时引擎关闭。设火箭上升的整个过程中,空气阻力与速度平方成正比,比例系数记作k ,火箭升空过程的数学模型为 0)0(,0,01222==≤≤-+?? ? ??-==t dt dx x t t mg T dt dx k dt x d m 其中)(t x 为火箭在时刻t 的高度,m =1200-15t 为火箭在时刻t 的质量,T (=30000牛顿)为推力,g (=9.8米/秒2)为重力加速度, t 1 (=900/15=60秒)为引擎关闭时刻. 今测得一组数据如下(t ~时间(秒),x ~高度(米),v ~速度(米/秒)): 现有两种估计比例系数k 的方法: 1.用每一个数据(t,x,v )计算一个k 的估计值(共11个),再用它们来估计k 。 2.用这组数据拟合一个k . 请你分别用这两种方法给出k 的估计值,对方法进行评价,并且回答,能否认为空气阻力系数k=0.5(说明理由).

《数值计算方法》上机实验报告

《数值计算方法》上机实验报告华北电力大学 实验名称数值il?算方法》上机实验课程名称数值计算方法专业班级:电力实08学生姓名:李超然学号:200801001008 成绩: 指导教师:郝育黔老师实验日期:2010年04月华北电力大学实验报告数值计算方法上机实验报吿一. 各算法的算法原理及计算机程序框图1、牛顿法求解非线性方程 *对于非线性方程,若已知根的一个近似值,将在处展开成一阶 xxfx ()0, fx ()xkk 泰勒公式 "f 0 / 2 八八,fxfxfxxxxx 0 0 0 0 0 kkkk2! 忽略高次项,有 ,fxfxfxxx 0 ()()(),,, kkk 右端是直线方程,用这个直线方程来近似非线性方程。将非线性方程的 **根代入,即fx ()0, X ,* fxfxxx 0 0 0 0, ,, kkk fx 0 fx 0 0,

解出 fX 0 *k XX,, k' fx 0 k 水将右端取为,则是比更接近于的近似值,即xxxxk, Ik, Ik fx ()k 八XX, Ikk* fx()k 这就是牛顿迭代公式。 ,2,计算机程序框图:,见, ,3,输入变量、输出变量说明: X输入变量:迭代初值,迭代精度,迭代最大次数,\0 输出变量:当前迭代次数,当前迭代值xkl ,4,具体算例及求解结果: 2/16 华北电力大学实验报吿 开始 读入 l>k /fx()0?,0 fx 0 Oxx,,01* fx ()0 XX,,,?10 kk, ,1,kN, ?xx, 10 输出迭代输出X输出奇异标志1失败标志

,3,输入变量、输出变量说明: 结束 例:导出计算的牛顿迭代公式,并il ?算。(课本P39例2-16) 115cc (0), 求解结果: 10. 750000 10.723837 10. 723805 10. 723805 2、列主元素消去法求解线性方程组,1,算法原理: 高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘 -个 方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上 对上三角 3/16 华北电力大学实验报告方程组求解。 列选主元是当高斯消元到第步时,从列的以下(包括)的各元素中选出绝 aakkkkkk 对值最大的,然后通过行交换将其交换到的位置上。交换系数矩阵中的 两行(包括常ekk 数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结 ,2,计算机程序框图:,见下页, 输入变量:系数矩阵元素,常向量元素baiji 输出变量:解向量元素bbb,,12n

西工大计算方法作业答案

参考答案 第一章 1 *1x =1.7; * 2x =1.73; *3x =1.732 。 2. 3. (1) ≤++)(* 3*2*1x x x e r 0.00050; (注意:应该用相对误差的定义去求) (2) ≤)(*3*2*1x x x e r 0.50517; (3) ≤)/(*4*2x x e r 0.50002。 4.设6有n 位有效数字,由6≈2.4494……,知6的第一位有效数字1a =2。 令3)1()1(1* 102 1 102211021)(-----?≤??=?= n n r a x ε 可求得满足上述不等式的最小正整数n =4,即至少取四位有效数字,故满足精度要求可取6≈2.449。 5. 答:(1)*x (0>x )的相对误差约是* x 的相对误差的1/2倍; (2)n x )(* 的相对误差约是* x 的相对误差的n 倍。 6. 根据******************** sin 21)(cos 21sin 21)(sin 21sin 21)(sin 21)(c b a c e c b a c b a b e c a c b a a e c b S e r ++≤ =* *****) ()()(tgc c e b b e a a e ++ 注意当20* π < >c tgc ,即1 *1 * )() (--

7.设20= y ,41.1*0 =y ,δ=?≤--2* 00102 1y y 由 δ1* 001*111010--≤-=-y y y y , δ2*111*221010--≤-=-y y y y M δ10*991*10101010--≤-=-y y y y 即当0y 有初始误差δ时,10y 的绝对误差的绝对值将减小10 10-倍。而110 10 <<-δ,故计算过程稳定。 8. 变形后的表达式为: (1))1ln(2--x x =)1ln(2-+-x x (2)arctgx x arctg -+)1(=) 1(11 ++x x arctg (3) 1ln )1ln()1(ln 1 --++=? +N N N N dx x N N =ΛΛ+-+- +3 2413121)1ln(N N N N 1ln )11ln()1(-++ +=N N N N =1)1ln()1 1ln(-+++N N N (4)x x sin cos 1-=x x cos 1sin +=2x tg

计算方法上机作业

计算方法第四次上机报告 2.用欧拉方法解初值 y’=10x(1-y) 0<=x<=1 Y(0)=0 取步长h=0.1,保留5位有效数字,并与准确解相比较 分析:该题目考察欧拉方法解初值问题 程序如下: function Heun(a,b,y0,n) h=(b-a)/n;x=a:h:b; y=y0*ones(1,n+1); for j=2:n+1 yp=y(j-1)+h*f(x(j-1),y(j-1)); yc=y(j-1)+h*f(x(j),yp); y(j)=1/2*(yp+yc); end for k=1:n+1 fprintf('x[%d]=%f\ty[%d]=%f\n',k-1,x(k),k-1,y(k)); end function z=f(xx,yy) z=10*xx*(1-yy); 运行结果: >> Heun(0,1,0,10) x[0]=0.000000 y[0]=0.000000 x[1]=0.100000 y[1]=0.050000 x[2]=0.200000 y[2]=0.183000

x[3]=0.300000 y[3]=0.362740 x[4]=0.400000 y[4]=0.547545 x[5]=0.500000 y[5]=0.705905 x[6]=0.600000 y[6]=0.823543 x[7]=0.700000 y[7]=0.901184 x[8]=0.800000 y[8]=0.947627 x[9]=0.900000 y[9]=0.973290 x[10]=1.000000 y[10]=0.986645 >> 分析: 该结果与准确结果相比比较接近,但是有一定的误差。 6.用四阶龙格—库塔公式解第三题中的初值问题,取步长h=0.2,保留五位有效数字。 题目目的分析: 该题考查四阶龙格-库塔方法和改进欧拉方法求解精确度问题。 程序: 改进欧拉法: function Heun(a,b,y0,n) h=(b-a)/n;x=a:h:b; y=y0*ones(1,n+1); for j=2:n+1 yp=y(j-1)+h*f(x(j-1),y(j-1)); yc=y(j-1)+h*f(x(j),yp); y(j)=1/2*(yp+yc); end for k=1:n+1 fprintf('x[%d]=%f\ty[%d]=%f\n',k-1,x(k),k-1,y(k)); end

计算方法试题库讲解

计算方法 一、填空题 1.假定x ≤1,用泰勒多项式?+??+++=! !212n x x x e n x ,计算e x 的值,若要求截断误差不超过0.005,则n=_5___ 2. 解 方 程 03432 3=-+x -  x x 的牛顿迭代公式 )463/()343(121121311+--+--=------k k k k k k k x x x x x x x 3.一阶常微分方程初值问题 ?????= ='y x y y x f y 0 0)() ,(,其改进的欧拉方法格式为)],(),([21 1 1 y x y x y y i i i i i i f f h +++++= 4.解三对角线方程组的计算方法称为追赶法或回代法 5. 数值求解初值问题的四阶龙格——库塔公式的局部截断误差为o(h 5 ) 6.在ALGOL 中,简单算术表达式y x 3 + 的写法为x+y ↑3 7.循环语句分为离散型循环,步长型循环,当型循环. 8.函数)(x f 在[a,b]上的一次(线性)插值函数= )(x l )()(b f a b a x a f b a b x --+-- 9.在实际进行插值时插值时,将插值范围分为若干段,然后在每个分段上使用低阶插值————如线性插值和抛物插值,这就是所谓分段插值法 10、数值计算中,误差主要来源于模型误差、观测误差、截断误差和舍入误差。 11、电子计算机的结构大体上可分为输入设备 、 存储器、运算器、控制器、 输出设备 五个主要部分。 12、算式2 cos sin 2x x x +在ALGOL 中写为))2cos()(sin(2↑+↑x x x 。 13、ALGOL 算法语言的基本符号分为 字母 、 数字 、 逻辑值、 定义符四大

2020年奥鹏吉大网络教育《计算方法》大作业解答

2020年奥鹏吉大网络教育《计算方法》大作业解答 (说明:前面是题目,后面几页是答案完整解答部分,注意的顺序。) 一、解线性方程 用矩阵的LU分解算法求解线性方程组 用矩阵的Doolittle分解算法求解线性方程组 用矩阵的Doolittle分解算法求解线性方程组 用高斯消去法求解线性方程组 用高斯消去法求解线性方程组 用主元素消元法求解线性方程组 用高斯消去法求解线性方程组 利用Doolittle分解法解方程组Ax=b,即解方程组 1、用矩阵的LU分解算法求解线性方程组 X1+2X2+3X3 = 0 2X1+2X2+8X3 = -4 -3X1-10X2-2X3 = -11 2、用矩阵的Doolittle分解算法求解线性方程组 X1+2X2+3X3 = 1 2X1– X2+9X3 = 0 -3X1+ 4X2+9X3 = 1 3、用矩阵的Doolittle分解算法求解线性方程组 2X1+X2+X3 = 4 6X1+4X2+5X3 =15 4X1+3X2+6X3 = 13 4、用高斯消去法求解线性方程组

2X 1- X 2+3X 3 = 2 4X 1+2X 2+5X 3 = 4 -3X 1+4X 2-3X 3 = -3 5、用无回代过程消元法求解线性方程组 2X 1- X 2+3X 3 = 2 4X 1+2X 2+5X 3 = 4 -3X 1+4X 2-3X 3 = -3 6、用主元素消元法求解线性方程组 2X 1- X 2+3X 3 = 2 4X 1+2X 2+5X 3 = 4 -3X 1+4X 2-3X 3 = -3 7、用高斯消去法求解线性方程组 123123123234 4272266 x x x x x x x x x -+=++=-++= 8、利用Doolittle 分解法解方程组Ax=b ,即解方程组 12341231521917334319174262113x x x x -? ????? ???? ??-??????=? ? ????--?????? --???? ??

计算方法上机实习题大作业(实验报告).

计算方法实验报告 班级: 学号: 姓名: 成绩: 1 舍入误差及稳定性 一、实验目的 (1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; (2)通过上机计算,了解舍入误差所引起的数值不稳定性 二、实验内容 1、用两种不同的顺序计算10000 21n n -=∑,分析其误差的变化 2、已知连分数() 1 01223//(.../)n n a f b b a b a a b =+ +++,利用下面的算法计算f : 1 1 ,i n n i i i a d b d b d ++==+ (1,2,...,0 i n n =-- 0f d = 写一程序,读入011,,,...,,,...,,n n n b b b a a 计算并打印f 3、给出一个有效的算法和一个无效的算法计算积分 1 041 n n x y dx x =+? (0,1,...,1 n = 4、设2 2 11N N j S j == -∑ ,已知其精确值为1311221N N ?? -- ?+?? (1)编制按从大到小的顺序计算N S 的程序 (2)编制按从小到大的顺序计算N S 的程序 (3)按两种顺序分别计算10001000030000,,,S S S 并指出有效位数 三、实验步骤、程序设计、实验结果及分析 1、用两种不同的顺序计算10000 2 1n n -=∑,分析其误差的变化 (1)实验步骤: 分别从1~10000和从10000~1两种顺序进行计算,应包含的头文件有stdio.h 和math.h (2)程序设计: a.顺序计算

#include #include void main() { double sum=0; int n=1; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum); if(n>=10000)break; n++; } printf("sum[%d]=%f\n",n,sum); } b.逆序计算 #include #include void main() { double sum=0; int n=10000; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0) printf("sum[%d]=%-30f",n,sum); if(n<=1)break; n--; } printf("sum[%d]=%f\n",n,sum); } (3)实验结果及分析: 程序运行结果: a.顺序计算

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

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

(完整版)数值计算方法上机实习题答案

1. 设?+=1 05dx x x I n n , (1) 由递推公式n I I n n 1 51+-=-,从0I 的几个近似值出发,计算20I ; 解:易得:0I =ln6-ln5=0.1823, 程序为: I=0.182; for n=1:20 I=(-5)*I+1/n; end I 输出结果为:20I = -3.0666e+010 (2) 粗糙估计20I ,用n I I n n 51 5111+- =--,计算0I ; 因为 0095.05 6 0079.01020 201 020 ≈<<≈??dx x I dx x 所以取0087.0)0095.00079.0(2 1 20=+= I 程序为:I=0.0087; for n=1:20 I=(-1/5)*I+1/(5*n); end I 0I = 0.0083 (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 首先分析两种递推式的误差;设第一递推式中开始时的误差为000I I E '-=,递推过程的舍入误差不计。并记n n n I I E '-=,则有01)5(5E E E n n n -==-=-Λ。因为=20E 20020)5(I E >>-,所此递推式不可靠。而在第二种递推式中n n E E E )5 1(5110-==-=Λ,误差在缩小, 所以此递推式是可靠的。出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制, 即算法是否数值稳定。 2. 求方程0210=-+x e x 的近似根,要求4 1105-+?<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; 程序:a=0;b=1.0; while abs(b-a)>5*1e-4 c=(b+a)/2;

数值计算方法上机实习题

数值计算方法上机实习题 1. 设?+=1 05dx x x I n n , (1) 由递推公式n I I n n 1 51+ -=-,从I 0=0.1824, 0=0.1823I 出发,计算20I ; (2) 20=0I ,20=10000I , 用n I I n n 51 5111+- =--,计算0I ; (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 答:第一个算法可得出 e 0=|I 0?I 0 ?| e n =|I n ?I n ?|=5n |e 0| 易知第一个算法每一步计算都把误差放大了5倍,n 次计算后更是放大了5n 倍,可靠性低。 第二个算法可得出 e n =|I n ?I n ?| e 0=(15 )n |e n | 可以看出第二个算法每一步计算就把误差缩小5倍,n 次后缩小了5n 倍,可靠性高。

2. 求方程0210=-+x e x 的近似根,要求41105-+?<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; 计算根与步数程序: fplot(@(x) exp(x)+10*x-2,[0,1]); grid on; syms x; f=exp(x)+10*x-2; [root,n]=EFF3(f,0,1); fprintf('root=%6.8f ,n=%d \n',root,n); 计算结果显示: root=0.09057617 ,n=11 (2) 取初值00=x ,并用迭代10 21 x k e x -=+;

(3) 加速迭代的结果; (4) 取初值00 x ,并用牛顿迭代法;

计算方法上机作业集合

第一次&第二次上机作业 上机作业: 1.在Matlab上执行:>> 5.1-5-0.1和>> 1.5-1-0.5 给出执行结果,并简要分析一下产生现象的原因。 解:执行结果如下: 在Matlab中,小数值很难用二进制进行描述。由于计算精度的影响,相近两数相减会出现误差。 2.(课本181页第一题) 解:(1)n=0时,积分得I0=ln6-ln5,编写如下图代码

从以上代码显示的结果可以看出,I 20的近似值为0.7465 (2)I I =∫I I 5+I 10dx,可得∫I I 610dx ≤∫I I 5+I 10dx ≤∫I I 510dx,得 16(I +1)≤I I ≤15(I +1),则有1126≤I 20≤1105, 取I 20=1 105 ,以此逆序估算I 0。代码段及结果如下图所示

(3)从I20估计的过程更为可靠。首先根据积分得表达式是可知,被积函数随着n的增大,其所围面积应当是逐步减小的,即积分值应是随着n的递增二单调减小的,(1)中输出的值不满足这一条件,(2)满足。设I I表示I I的近似值,I I-I I=(?5)I(I0?I0)(根据递推公式可以导出此式),可以看出,随着n的增大,误差也在增大,所以顺序估计时,算法不稳定性逐渐增大,逆序估计情况则刚好相反,误差不断减小,算法逐渐趋于稳定。 2.(课本181页第二题)

(1)上机代码如图所示 求得近似根为0.09058 (2)上机代码如图所示 得近似根为0.09064;

(3)牛顿法上机代码如下 计算所得近似解为0.09091 第三次上机作业上机作业181页第四题 线性方程组为 [1.13483.8326 0.53011.7875 1.16513.4017 2.53301.5435 3.4129 4.9317 1.23714.9998 8.76431.3142 10.67210.0147 ][ I1 I2 I3 I4 ]=[ 9.5342 6.3941 18.4231 16.9237 ] (1)顺序消元法 A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435; 3.4129, 4.9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147]; b=[9.5342;6.3941;18.4231;16.9237]; 上机代码(函数部分)如下 function [b] = gaus( A,b )%用b返回方程组的解 B=[A,b]; n=length(b); RA=rank(A); RB=rank(B);

西交计算方法A上机大作业

计算方法A 上机大作业 1. 共轭梯度法求解线性方程组 算法原理:由定理3.4.1可知系数矩阵A 是对称正定矩阵的线性方程组Ax=b 的解与求解二次函数1()2 T T f x x Ax b x =-极小点具有等价性,所以可以利用共轭梯度法求解1()2 T T f x x Ax b x = -的极小点来达到求解Ax=b 的目的。 共轭梯度法在形式上具有迭代法的特征,在给定初始值情况下,根据迭代公式: (1)()()k k k k x x d α+=+ 产生的迭代序列(1)(2)(3)x x x ,,,... 在无舍入误差假定下,最多经过n 次迭代,就可求得()f x 的最小值,也就是方程Ax=b 的解。 首先导出最佳步长k α的计算式。 假设迭代点()k x 和搜索方向()k d 已经给定,便可以通过()()()() k k f x d φαα=+的极小化 ()()min ()()k k f x d φαα=+ 来求得,根据多元复合函数的求导法则得: ()()()'()()k k T k f x d d φαα=?+ 令'()0φα=,得到: ()() ()()k T k k k T k r d d Ad α=,其中()()k k r b Ax =- 然后确定搜索方向()k d 。给定初始向量(0)x 后,由于负梯度方向是函数下降最快的方向,故第一次迭代取搜索方向(0) (0)(0)(0)()d r f x b Ax ==-?=-。令 (1)(0)00x x d α=+ 其中(0)(0)0(0)(0) T T r d d Ad α=。第二次迭代时,从(1) x 出发的搜索方向不再取(1)r ,而是选取(1) (1)(0)0d r d β=+,使得(1)d 与(0)d 是关于矩阵A 的共轭向量,由此可 求得参数0β:

数值分析上机题(matlab版)(东南大学)

数值分析上机题(matlab版)(东南大学)

数值分析上机报告

第一章 一、题目 精确值为)1 1 123(21+--N N 。 1) 编制按从大到小的顺序 1 1 131121222-+??+-+-= N S N ,计算S N 的通用程序。 2) 编制按从小到大的顺序 1 21 1)1(111222-+??+--+-= N N S N ,计算S N 的通用程序。 3) 按两种顺序分别计算6 42 10,10, 10S S S ,并指出有效位 数。(编制程序时用单精度) 4) 通过本次上机题,你明白了什么? 二、通用程序 clear N=input('Please Input an N (N>1):'); AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); Sn1=single(0); for a=2:N; Sn1=Sn1+1/(a^2-1); end Sn2=single(0); for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); end fprintf('The value of Sn using different algorithms (N=%d)\n',N); disp('____________________________________________________') fprintf('Accurate Calculation %f\n',AccurateValue); fprintf('Caculate from large to small %f\n',Sn1); fprintf('Caculate from small to large %f\n',Sn2);

计算方法大作业非线性方程求根的新方法

计算方法大作业 题目:非线性方程求根的新方法 班级:xxx 学号:xxx 姓名:xxx

非线性方程求根的新方法 一、问题引入 在计算和实际问题中经常遇到如下非线性问题的求解: F(x)=0 (1) 我们经常采用的方法是经典迭代法: 经典迭代方法 不动点迭代方法是一种应用广泛的方法,其加速方法较多,如Stiffensen加速方法的局部收敛阶(以下简称为收敛阶)为2阶;牛顿迭代方法的收敛阶亦为2阶,且与其相联系的一些方法如简化牛顿法、牛顿下山法、弦截法的收敛阶阶数介于1和2之间;而密勒法的收敛阶与牛顿法接近,但计算量较大且涉及零点的选择问题,同时收敛阶也不够理想。 因此本文介绍一种新的迭代方法 从代数角度看,牛顿法和密勒法分别是将f(x)在xk附近近似为一线性函数和二次抛物插值函数,一种很自然的想法就是能否利用Taylor展开,将f(x)在xk附近近似为其他的二次函数?答案是肯定的.其中的一种方法是将f(x)在Xk处展开3项,此时收敛阶应高于牛顿法,这正是本文的出发点. 二、算法推导 设函数f(x)在xk附近具有二阶连续导数,则可将f(x)在xk处进行二阶Taylor展开,方程(1) 可近似为如下二次方程: f(xk)+f’(xk)(x-xk)+2^(-1)f’’(xk)(x-xk)^2=0,(2) 即 2^(-1)f’’(xk)x^2+(f’(xk)-xkf’’(xk))x+2^(-1)f’’(xk)xk^2-xkf’(xk)+f(xk)=0(3) 利用求根公式可得 X=xk-(f’’(xk))^(-1)(f’(xk))-sqrt((f’(xk)^2±2f’’(xk)f(xk)))(4) 其中±符号的选取视具体问题而定,从而可构造迭代公式 X k+1=xk-(f’’(xk))^(-1)(f’(xk))-sqrt((f’(xk)^2±2f’’(xk)f(xk)))(5) 确定了根号前正负号的迭代公式(5),可称为基于牛顿法和Taylor展开的方法,简记为BNT 方法. 为描述方便起见,以下将f(xk),f’(xk),f’’(xk)分别记为f,f’,f’’.首先,二次方程(3)对应于一条抛物曲线,其开口方向由f’’(xk),x∈U(xk)的符号确定,其中U(xk)为xk的某邻域,其顶点为 P(xk-(f’’)^(-1)f’,fk-(2f’’)^(-1)(f’)^2).为使(5)式唯一确定x k+1,须讨论根式前正负号的取舍问题.下面从该方法的几何意义分析(5)式中正负号的取舍. 1)当f(xk)=o时,z。即为所求的根. 2)当f(xk)>O时,根据y=f(x)的如下4种不同情形(见图1)确定(5)式中根号前的符号. (a)当f’’(xk)o时,“±”取为“一”;(b)当f’’(xk)o,f(xk)>o时,“±”取为“一”;(d)当f’’(xk)>o,f(xk)o时,“±”取为“+”;(b)当 f’’(xk)o,f(xk)>o时,“±”取为“+”;(d)当f’’(xk)>o,f(xk)

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