• 沒有找到結果。

《数值分析》2

N/A
N/A
Protected

Academic year: 2021

Share "《数值分析》2"

Copied!
19
0
0

加載中.... (立即查看全文)

全文

(1)

《数值分析》2

主要内容: 数值计算中的基本原则

算法的数值稳定概念

方程求根问题引例

二分法及其算法描述

(2)

EXP: a = 109

b = 9,在8位浮点数系统中做加法

a + b =1.0000000 ×109+ 0.000000009 ×109

由于只保留8位有效数,处于第九、十位的数09

被舍去

, 实际操作是:

a 的数据作为加法计算的最终结果

.

数值计算中的基本原则

(1)避免绝对值小的数做除数;

(2)避免两相近数相减;

(3)防止大数“吃”小数现象

数值计算中的基本原则

(3)

举例

: 计算 P(x) = 1+2x+3x2+4x3 + 5x4

的值 秦九韶算法

P(x)=1+x(2+x(3+x(4+5x)))

应用

: 2进制数转换为10进制数算法

(1 1 1 0 1 1 1 0)2 = 27+26 +25 +0 +23 +22 +2 +0

=((((((1·2+1)2+1)2+0)2+1)2+1)2+1)2+0

=238

(4)尽量减少计算工作量(乘、除法次数)

数值计算中的基本原则

数值计算中的基本原则

(4)

举例1:计算 I

n

e

1

01

x

n

e

x

dx

( n =0,1,···, 20 )

1 1 1

0

0

e

1

e dxe

( e1 )1e

I

x

1

1 1

1 1 1 0 1

1 )

(

x n n

x n

x n n

nI dx

e x

n e

x e

dx e

x e

I

01

x

n

dx

01

x

n

e

x

dx e

01

x

n

dx

1 1 1

1

I n n

e n

算法数值稳定引例

算法的数值稳定概念

(5)

初值 : I

0

= 1 – e

–1

0.63212055882856 理论递推公式 : I

n

= 1 – nI

n-1

(I

0

= 1- e

-1

)

S

1

=1-0.63212055882856; S(2)=1- S

1

; for n=2:20

S(n)=1-n*S(n-1) end

n=20时,S

20

= - 30.19239488558378 实际计算 : S

n

=1- nS

n-1

, S

0

=0.63212055882856

算法的数值稳定概念

(6)

v.s. In=1 - nIn-1 Sn- In=- n(Sn-1 - In-1)

e(Sn)= –ne(Sn-1)=···= (n!)(–1)ne(S0)

新算法: In-1 = (1 - In)/n S(30)=1/31

for n=30:-1:2

S(n-1)=(1-S(n))/n;

end

u 初值误差在算法执行过程中不断增大,这种算法称为数值不 稳定算法。

Sn=1-nSn-1

算法的数值稳定概念

请仿照上例分析

Sn-1-In-1= –(Sn - In)/n, ( n =30, 29, ···, 1 ) 迭代最终结果为:S1

(7)

可知:数学上完全等价的两种递推公式,由于运 算次序不同会出现完全不同的算法稳定情况。

|e(S1)|= |S1

-

I1|=|(S2

I2)|/2=···=|S30-I30|/ 30!

初始误差 算法的数值稳定概念

u初始误差 在算法执行过程中 不断减小 ,

这种算法称为数值稳定算法。

(8)

举例2:水中浮球问题

有一半径R =10 cm的球体,密度 =0.638.球体浸入水中

,浸入水中的深度d 是多少?

阿基米德定律  3

4 R3

d

R R x dx V

0

2

2

( ) ]

[

) 3

3 (

1 d2 Rd

) 3

3 (

1 d 2 R

d

) 3

(

4R3

d 2 Rd

0 4

3

2 3

3

RdR  

d

 非线性方程求根引例

水密度

方程求根问题引例

d

(9)

0 5 10 15 20 -2000

-1000 0 1000 2000 3000

=0.638, R = 10, 代入, 得:

d 3 – 30 d 2 + 2552 = 0

f (x) = x 3 – 30 x 2 + 2552 ,函数图形如下 f(x)在区间[0,20]有唯一

的根

P= [1 -30 0 2552];

roots(P) --->Matlab命令 ans =

26.3146 11.8615 -8.1761

方程求根问题引例

(10)

① 对根进行隔离:

a) 找出隔根区间 (内部只有一个解); 或 b) 在隔根区间内确定一个解的近似值x0.

② 逐步逼近

: 利用近似解x0 (或隔根区间), 通过迭代算法得 到更精确的近似解.

f(x) = 0的根为 x*, 通过迭代计算, 产生序列:

x0  x1  x2  ···  xn···

用数值方法求非线性方程的根,分两步进行 :

lim x

n

x

*

n

只须:

如何构造迭代格式

方程求根问题引例

(11)

已知方程 f(x)=0 有一隔根区间[a, b], 且f(x)满足f(a)·f(b)<0, 则:

①先将[a , b]等分为两个相等小 区间

②判断根属于哪个小区间

③舍去无根区间保留有根区间 [a1, b1];

总结:把区间[a1, b1] 一分为二,进一步判断根属于哪个更小的 区间[a2, b2],如此不断二分以缩小区间长度

a b

a1 b1

a2 b2

f(x)

…...

(a+b)/2

(a1+b1)/2 二分(迭代)法引例

二分法及其算法描述

(12)

[a, b] x0=0.5(a+b) [a1,b1]=[a,x0] x1=0.5(a1+b1) 构造二分法迭代格式

已知f(x)=0在[a,b]内有一根, 且f(a).f(b)<0 1) 计算: ya f(a), x00.5(a+b), y0f(x0)

判断: 若y0=0, 则x0是根, 否则转下一步;

2) 判断: y0·ya<0, 则a1a, b1 x0 否则 a1x0, b1b, ya y0

y0=f(x0)=0 ? [a1,b1]=[x0,b]

3) Repeat! 直至达到精度要求 算法

流程

二分法及其算法描述

(13)

二分法迭代将得到一系列隔根区间:

  

[ , ] [ , ] [ , ] ]

,

[ a b a

1

b

1

a

2

b

2

a

n

b

n

定理2.2: x* f(x)=0在[a, b]内的唯一根,且 f(a)·f(b)<0,, 则二

分计算过程中, 各区间的中点数列

) , 2 , 1, 0 (

) 2 (

1

  

a b n

xn n n

性质: 1. f(an)·f(bn)<0; 2. bn an = (b – a)/ 2n

满足: | xn – x*|≤ (b – a)/ 2n+1

log

b a

3 n

1 10

a 只需 b

3

* 10

2

| 1

| xnx  

注记: 若要

二分法及其算法描述

(14)

函数在[0,1]内有唯一零点, 故[0,1]是隔根区间 举例3: 二分法求方程

在区间 [0, 1]内的根;二分十次。

0 2 )

sin(

)

exp(x

x

: 令 )

sin( 2 )

exp(

)

(x x x

f

0 1

) 0

(

 

f f (1)

e1

1

0

1 0

, 0 2 )]

2 cos(

) [exp(

)

(

x x x x

f

0 )

1 ( ) 0

(

f f Step 2: 判断在[0,1]是否有唯一根?

Step 1: 判断 f(0)f(1)<0 ?

二分法及其算法描述

(15)

二分法迭代实验数据

n an xn bn 0 0 5.0000e-001 1.0000e+000 1 0 2.5000e-001 5.0000e-001 2 2.5000e-001 3.7500e-001 5.0000e-001 3 3.7500e-001 4.3750e-001 5.0000e-001 4 4.3750e-001 4.6875e-001 5.0000e-001 5 4.3750e-001 4.5313e-001 4.6875e-001 6 4.3750e-001 4.4531e-001 4.5313e-001 7 4.3750e-001 4.4141e-001 4.4531e-001 8 4.4141e-001 4.4336e-001 4.4531e-001 9 4.4336e-001 4.4434e-001 4.4531e-001 10 4.4336e-001 4.4385e-001 4.4434e-001

二分法及其算法描述

(16)

举例4:二分法算法(水中浮球问题)

x f=inline('x.^3-30*x.^2+2552');

a=0; b=20; er=b-a; ya=f(a);

k=0; er0=.005;

while er>er0

x0=(a+b)/2; y0=f(x0);

if ya*y0<0 b=x0;

else

a=x0; ya=y0;

end

er=b-a;k=k+1;

endk, xk=(a+b)/2

k=12, xk=11.8628 满足:

| xn – x*|≤ 20/ 213 ≤0.0025 f(d) = d 3 – 30 d 2 + 2552 = 0 , [0, 2R]=[0, 20]

二分法及其算法描述

(17)

二分法迭代实验数据 ( x*=11.8615 ) n |xk – x*|

0 1.8615e+000 1 3.1385e+000 2 6.3850e-001 3 6.1150e-001 4 1.3498e-002 5 2.9900e-001 6 1.4275e-001 7 6.4627e-002 8 2.5564e-002 9 6.0328e-003 10 3.7329e-003 11 1.1499e-003

二分法及其算法描述

(18)

练习与思考

1.设计多项式算法

15 11

7

1

( x ) 1 2 x

3

3 x 4 x 5 x

P     

(7次乘法)

2. 微积分回顾

连续函数介值定理、拉格朗日中值定理 3. 两次二分中点之差| xn+1 – xn | = ?

4.半径R =10 cm的圆柱体,密度

=0.5. 平放浸入水中,

要计算吃水深度

d , 考虑数学模型。

(19)

学到了什么?

数值计算中的基本原则

算法的数值稳定概念

方程求根问题引例

二分法及其算法描述

參考文獻

相關文件

它是由卡尔.龙格(Runge)在探索使用多项式插值逼近某些函

其使用比较灵活,当增加插值节点时,只要在原来的基础上增加部分

公差分析的 算步骤 三.公差分析的计算步骤 四 公差分析的计算方法 四.公差分析的计算方法

;线性方程组解法:介绍常用的解法和专门方法;矩阵特征值计算:介绍特征值的估计方法;非线性

第一章基础知识1.1插值方法1.2二分法求解方程根1.3解非线性方程组的n+1点残量法1.4大气环境模型第

最终求得所有 4个基函数 (针对三次 Hermite插值). 代入 4个基函数

超定方程组QR分解算法 数据拟合确定常微分方程..

[初等函数] 幂函数、指数函数、对数函数、三角函数、反三角函数通称为“ 基本初等函