当前位置:文档之家› MatLab4数值计算(一)

MatLab4数值计算(一)

MatLab4数值计算(一)
MatLab4数值计算(一)

MatLab & 数学建模

授课:曾景峰(江西环境工程职业学院)

第四讲数值计算

符号数学工具箱

符号表达式的运算

numeric 符号到数值的转换

pretty 显示悦目的符号输出

subs 替代子表达式

sym 建立符号矩阵或表达式

symadd 符号加法

symdiv 符号除法

symmul 符号乘法

symop 符号运算

sympow 符号表达式的幂运算

symrat 有理近似

symsub 符号减法

symvar 求符号变量

符号表达式的简化

collect 合并同类项

expand 展开

factor 因式

simple 求解最简形式

simplify 简化

symsum 和级数

符号多项式

charpoly 特征多项式

horner 嵌套多项式表示

numden 分子或分母的提取

poly2sym 多项式向量到符号的转换

sym2poly 符号到多项式向量的转换

符号微积分

diff 微分

int 积分

jordan 约当标准形

taylor 泰勒级数展开

符号可变精度算术

digits 设置可变精度

vpa 可变精度计算

求解符号方程

compose 函数的复合

dsolve 微分方程的求解

finverse 函数逆

linsolve 齐次线性方程组的求解

Solve 代数方程的求解

符号线性代数

charploy 特征多项式

determ 矩阵行列式的值

eigensys 特征值和特征向量

inverse 矩阵逆

jordan 约当标准形

linsolve 齐次线性方程组的解

transpose 矩阵的转置

一、方程求解

求解单个代数方程

MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等号),则在求解之前函数solve将表达式置成等于0。

>> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the eqution ans=

[1/2/a*(-b+(b^2-4*a*c)^1/2)]

[1/2/a*(-b-(b^2-4*a*c)^1/2)]

结果是符号向量,其元素是方程的2个解。如果想对非缺省x变量求解,solve 必须指定变量。

>> solve( ' a*x^2+b*x+c ' , ' b ' ) % solve for b

ans=

-(a*x^2+c)/x

带有等号的符号方程也可以求解。

>> f=solve( ' cos(x)=sin(x) ' ) % solve for x

f=

1/4*pi

>> t=solve( ' tan(2*x)=sin(x) ' )

t=

[ 0]

[acos(1/2+1/2*3^(1/2))]

[acos(1/2=1/2*3^(1/2))]

并得到数值解。

>> numeric(f)

ans=

0.7854

>> numeric(t)

ans=

0 + 0.8314i

1.9455

注意在求解周期函数方程时,有无穷多的解。在这种情况下,solve对解的搜索范围限制在接近于零的有限范围,并返回非唯一的解的子集。

如果不能求得符号解,就计算可变精度解。

>> x=solve( ' exp(x)=tan(x) ' )

x=

1.306326940423079

代数方程组求解

可以同时求解若干代数方程,语句solve(s1,s2,.....,sn)对缺省变量求解n个方程,语句solve(s1,s2,...,sn,' v1,v2,...,vn ')对n个' v1,v2,...vn '的未知数求解n个方程。

solve(f) 解符号方程式f。

solve(f1,…,fn) 解由f1,…,fn组成的联立方程式。

我们先定义以下的方程式:

>>eq1 = 'x-3=4'; % 注意也可写成'eq1=x-7'

>>eq2 = 'x^2-x-6=0'; % 注意也可写成'eq2=x*2-x-6'

>>eq3 = 'x2+2*x+4=0';

>>eq4 = '3*x+2*y-z=10';

>>eq5 = '-x+3*y+2*z=5';

>>eq6 = 'x-y-z=-1';

>>solve(eq1)

ans=

7

>>solve(eq2)

ans=

[[3],[-2]]' % 原方程式有二个根3, -2

>>solve(eq3)

ans=

[[-1+i*3^(1/2)],[-1-i*3^(1/2)]]' % 注意实根和虚根的表示式

>>solve(eq4,eq5,eq6) % 解三个联立方程式

ans=

x = -2, y = 5, z = -6

如何处理中小学典型的代数问题?

黛安娜(Diane)想去看电影,她从小猪存钱罐倒出硬币并清点,她发现:

?10美分的硬币数加上5美分的硬币总数的一半等于25美分的硬币数。

?1美分的硬币数比5美分、10美分以及25美分的硬币总数多10。

?25美分和10美分的硬币总数等于1美分的硬币数加上1/4的5美分的硬币数

?25美分的硬币数和1美分的硬币数比5美分的硬币数加上8倍的10美分的硬币数多1。

如果电影票价为3.00美元,爆米花为1.00美元,糖棒为50美分,她有足够的钱去买这三样东西?

首先,根据以上给出的信息列出一组线性方程,假如p,n,d和q分别表示1美分,5美分,10美分,和25美分的硬币数

d n p

q p n d q q d p n q p n d +

+==++-+=+

+=+-2

104

81

然后,建立MATLAB 符号方程并对变量求解。

>> eq1= ' d+(n+p)/2=q ' ;

>> eq2= ' p=n+d+q-10 ' ;

>> eq3= ' q+d=p+n/4 ' ;

>> eq4= ' q+p=n+8*d-1 ' ;

>>[pennies ,nickles ,dimes ,quarters]=solve(equ1,equ2,equ3,equ4,' p ,n ,d ,q ' ) pennies= 16 nickles= 8 dimes= 3

quarters= 15

所以,黛安娜有16枚1美分的硬币,8枚5美分的硬币,3枚10美分的硬币,15枚25美分的硬币,这就意味着

>> money=.01*16+.05*8+.10*3+.25*15 money= 4.6100

她就有足够的钱去买电影票,爆米花和糖棒并剩余11美分。

【例】求解二元函数方程组???=+==-=0)cos(),(0

)sin(),(21y x y x f y x y x f 的零点。

(0)从三维坐标初步观察两函数图形相交情况

x=-2:0.05:2;y=x;[X,Y]=meshgrid(x,y); %产生x-y 平面上网点坐标 F1=sin(X-Y);F2=cos(X+Y); F0=zeros(size(X)); surf(X,Y,F1),

xlabel('x'),ylabel('y'),

view([-31,62]),hold on,

surf(X,Y,F2),surf(X,Y,F0),

shading interp,

hold off

图 5.6.3-0 两函数的三维相交图

(1)在某区域观察两函数0等位线的交点情况

clear;

x=-2:0.5:2;y=x;[X,Y]=meshgrid(x,y); %产生x-y平面上网点坐标

F1=sin(X-Y);F2=cos(X+Y);

v=[-0.2, 0, 0.2]; %指定三个等位值,是为了更可靠地判断0等位线的存在。contour(X,Y,F1,v) %画F1的三条等位线。

hold on,contour(X,Y,F2,v),hold off %画F2的三条等位线。

图 5.6.3-1 两个二元函数0等位线的交点图

(2)从图形获取零点的初始近似值

在图5.6.3-1中,用ginput获取两个函数0等位线(即三线组中间那条线)交点的坐标。

[x0,y0]=ginput(2); %在图上取两个点的坐标

disp([x0,y0])

-0.7926 -0.7843

0.7926 0.7843

(3)利用fsolve求精确解。以求(0.7926,7843)附近的解为例。

本例直接用字符串表达被解函数。注意:在此,自变量必须写成x(1), x(2)。假如写成xy(1), xy(2),指令运行将出错。

fun='[sin(x(1)-x(2)),cos(x(1)+x(2))]'; %<12> xy=fsolve(fun,[x0(2),y0(2)])

%<13>

xy =

0.7854 0.7854

(4)检验

fxy1=sin(xy(1)-xy(2));fxy2=cos(xy(1)+xy(2));disp([fxy1,fxy2])

1.0e-006 *

-0.0994 0.2019

〖说明〗

●指令<12><13>可用以下任何一组指令取代。

(A)内联函数形式指令

fun=inline('[sin(x(1)-x(2)), cos(x(1)+x(2))]', 'x'); %项'x'必须有。

xy=fsolve(fun,[x0(2), y0(2)]);

(B)M函数文件形式及指令

先用如下fun.m表示被解函数(并在搜索路径上)

[fun.m]

function ff=fun(x)

ff(1)=sin(x(1)-x(2));

ff(2)=cos(x(1)+x(2));

然后运行指令xy=fsolve('fun',[x0(2),y0(2)]) 。

●第四步检验中的结果表明:所找零点处的函数值小于6

10 ,是一个十分接近

零的小数。该精度由options.TolFun控制。options.TolFun的缺省值是

1.0000e-006。它可以用下列指令看到

options=optimset('fsolve');

options.TolFun

ans =

1.0000e-006

线性方程求解

a= [ 7 2 1 -2

9 15 3 -2

-2 -2 11 5

1 3

2 13]

b=[4 7 -1 0]'

x=a\b

x =

0.4979

0.1445

0.0629

-0.0813

单个微分方程

常微分方程有时很难求解,MATLAB提供了功能强大的工具,可以帮助求解微分方程。函数dsovle计算常微分方程的符号解。因为我们要求解微分方程,就需要用一种方法将微分包含在表达式中。所以,dsovle句法与大多数其它函数有一些不同,用字母D来表示求微分,D2,D3等等表示重复求微分,并以此来设定方程。任何D后所跟的字母为因变量。

MATLAB解常微分方程式的语法是dsolve('equation','condition'),其中equation代表常微分方程式即y'=g(x,y),且须以Dy代表一阶微分项y'D2y代表二阶微分项y'',condition则为初始条件。

方程d y dx

/=0用符号表达式D2y=0来表示。独立变量可以指定或由symvar 22

规则选定为缺省。例如,一阶方程dy/dx=1+y2的通解为:

>> dsolve( ' Dy=1+y^2 ' ) % find the general solution

ans=

-tan(-x+C1)

其中,C1是积分常数。求解初值y(0)=1的同一个方程就可产生:

>> dsolve(' Dy=1+y^2 ',' y(0)=1 ') % add an initial

condition

y=

tan(x+1/4*pi)

独立变量可用如下形式指定:

>> dsolve(' Dy=1+y^2 ',' y(0)=1 ',' v ') % find solution to dy/dv ans=

tan(v+1/4*pi)

让我们举一个二阶微分方程的例子,该方程有两个初始条件:

d y

dx

22

=cos(2x)-y dy dx (0)=0 y(0)=1

>> y=dsolve(' D2y=cos(2*x)-y ',' Dy(0)=0 ',' y(0)=1 ') y=

-2/3*cos(x)^2+1/3+4/3*cos(x)

>> y=simple(y) % y looks like it can be simplified y=

-1/3*cos(2*x)+4/3*cos(x)

通常,要求解的微分方程含有一阶以上的项,并以下述的形式表示:

d y dx

22

-2dy

dx -3y=0 通解为:

>> y=dsolve( 'D2y-2Dy-3*y=0 ')

y=

C1*exp(-x)+C2*exp(3*x)

加上初始条件:y(0)=0和y(1)=1可得到:

>> y=solve( ' D2y-2Dy-3*y=0 ' , ' y(0)=0,y(1)=1 ' ) y=

1/(exp(-1)-exp(3))*exp(-x)-1/(exp(-1)-exp(3))*exp(3*x)

>> y=simple(y) % this looks like a candidate for simplification y=

-(exp(-x)-exp(3*x))/(exp(3)-exp(-1))

>> pretty(y) % pretty it up exp(-x)-exp(3 x) - --------------------- exp(3) -exp(-1)

现在来绘制感兴趣的区域内的结果。

>> ezplot(y,[-6 2])

例:假设有以下三个一阶常微分方程式和其初始条件y'=3x2, y(2)=0.5

y'=2.x.cos(y)2, y(0)=0.25

y'=3y+exp(2x), y(0)=3

对应上述常微分方程式的符号运算式为:

>>soln_1 = dsolve('Dy = 3*x^2','y(2)=0.5') ans=

x^3-7.500000000000000

>>ezplot(soln_1,[2,4]) % 看看这个函数的长相

>>soln_2 = dsolve('Dy = 2*x*cos(y)^2','y(0) = pi/4') ans= atan(x^2+1)

>>soln_3 = dsolve('Dy = 3*y + exp(2*x)',' y(0) = 3') ans=

-exp(2*x)+4*exp(3*x)

微分方程组

函数dsolve 也可同时处理若干个微分方程式,下面有两个线性一阶方程。

dx

df

=3f+4g dg dx =-4f+3g

通解为:

>> [f ,g]=dsolve ( ' Df=3*f+4*g ' , ' Dg=-4*f+3*g ' ) f=

C1*exp(3*x)*sin(4*x)+C2*exp(3*x)*cos(4*x) g=

-C2*exp(3*x)*sin(4*x)+C1*exp(3*x)*cos(4*x)

加上初始条件:f(0)=0和g(0)=1,我们可以得到:

>> [f ,g]=dsolve( ' Df=3*f+4*g ' , ' Dg=-4*f+3*g ' , ' f(0)=0,g(0)=1 ' ) f=

exp(3*x)*sin(4*x) g=

exp(3*x)*cos(4*x)

微分和积分

微分和积分是微积分学研究和应用的核心,并广泛地用在许多工程学科。MATLAB符号工具能帮助解决许多这类问题。

微分

符号表达式的微分以四种形式利用函数diff:

>> f= ' a*x^3+x^2-b*x-c ' % define a symbolic expression

f=

a*x^3+x^2-b*x-c

>> diff(f) % differentiate with respect to the default variable x

ans=

3*a*x^2+2*x-b

>> diff(f,'a ') % differentiate with respect to a

ans=

x^3

>> diff(f,2) % differentiate twice with respect to x

ans=

6*a*x+2

>> diff(f,' a ',2) % differentiate twice with respect to a

ans=

函数diff也可对数组进行运算。如果F是符号向量或数组,diff(F)对数组内的各个元素进行微分。

>> F=sym(' [a*x, b*x^2; c*x^3, d*s] ') % create a

symbolic array

F=

[ a*x, b*x^2]

[c*x^3, d*s]

>> diff(F) % differentiate the element with respect to x

ans=

[ a,2*b*x]

[3*c*x^2, 0]

注意函数diff也用在MATLAB,计算数值向量或矩阵的数值差分。对于一个数值向量或矩阵M,diff(M)计算M(2: m,: )-M(1: m-1,: )的数值差分,如下所示:

>> m=[(1: 8).^2)] % create a vector

M=

1 4 9 16 25 36 49 64

>> diff(M) % find the differences between elements

ans=

3 5 7 9 11 13 15

如果diff的表达式或可变参量是数值,MATLAB就非常巧妙地计算其数值差分;如果参量是符号字符串或变量,MATLAB就对其表达式进行微分。

积分

积分函数int(f),其中f是一符号表达式,它力图求出另一符号表达式F使diff(F)=f。正如从研究微分学所了解的,积分比微分复杂得多。积分或逆求导不一定是以封闭形式存在,或许存在但软件也许找不到,或者软件可明显地求解,但超过内存或时间限制。当MATLAB不能找到逆导数时,它将返回未经计算的命令。

>> int( ' log(x)/exp(x^2) ' ) % attempt to integrate

ans=

log(x)/exp(x^2)

同微分一样,积分函数有多种形式。形式int(f)相对于缺省的独立变量求逆导数;形式(f,' s ')相对于符号变量s积分;形式int(f,a,b)和int(f,' s ',a,b),a,b是数值,求解符号表达式从a到b的定积分;形式int(f,' m ' ,' n ')和形式int(f,' s ',' m ',' n '),其中m,n是符号变量,求解符号表达式从m到n的定积分。

>> f=' sin(s+2*x) ' % crate a symbolic function

f=

sin(s+2*x)

>> int(f) % integrate with respect to x

ans=

-1/2*cos(s+2*x)

>> int(f,' s ') % integrate with respect to s

ans=

-cos(s+2*x)

>> int(f,pi/2,pi) % integrate with respect to x from

π/2 toπ

ans=

-cos(x)

>> int(f,' s ',pi/2,pi) % integrate with respect to

s from π/2 to π

ans=

cos(2*x)-sin(2*x)

>> int(f,' m ',' n ') % integrate with respect to x

from m to n

ans=

-1/2*cos(s+2*n)+1/2*cos(s+2*m)

正如函数diff一样,积分函数int对符号数组的每一个元素进行运算。

>> F=sym( ' [a*x,b*x^2;c*x^3,d*s] ' ) % create a symbolic

array

F=

[ a*x,b*x^2]

[c*x^3, d*s]

>> diff(F) % ubtegrate the array elements with respect to x

ans=

[1/2*a*x^2,1/3*b*x^3]

[1/4*c*x^4, d*s*x]

diff函数用以演算一函数的微分项,相关的函数语法有下列4个:

diff(f) 传回f对预设独立变数的一次微分值

diff(f,'t')传回f对独立变数t的一次微分值

diff(f,n)传回f对预设独立变数的n次微分值

diff(f,'t',n)传回f对独立变数t的n次微分值

先定义下列三个方程式,接著再演算其微分项:>>S1 = '6*x^3-4*x^2+b*x-5';

>>S2 = 'sin(a)';

>>S3 = '(1 - t^3)/(1 + t^4)';

>>diff(S1)

ans=

18*x^2-8*x+b

>>diff(S1,2)

ans=

36*x-8

>>diff(S1,'b')

ans=

x

>>diff(S2)

ans=

cos(a)

>>diff(S3)

ans=

-3*t^2/(1+t^4)-4*(1-t^3)/(1+t^4)^2*t^3 >>simplify(diff(S3))

ans=

t^2*(-3+t^4-4*t)/(1+t^4)^2

int函数用以演算一函数的积分项,这个函数要找出一符号式 F 使得

diff(F)=f。如果积分式的解析式 (analytical form, closed form) 不存在的话或是MATLAB无法找到,则 int 传回原输入的符号式。相关的函数语法有下列4个:

int(f)传回f对预设独立变数的积分值

int(f,'t')传回f对独立变数t的积分值

int(f,a,b)传回f对预设独立变数的积分值,积分区间为[a,b],a和b为数值式

int(f,'t',a,b)传回f对独立变数t的积分值,积分区间为[a,b],a和b为数值式

int(f,'m','n')传回f对预设变数的积分值,积分区间为[m,n],m和n为符号式

我们示范几个例子:

>>S1 = '6*x^3-4*x^2+b*x-5';

>>S2 = 'sin(a)';

>>S3 = 'sqrt(x)';

>>int(S1)

ans=

3/2*x^4-4/3*x^3+1/2*b*x^2-5*x

>>int(S2)

ans=

-cos(a)

>>int(S3)

ans=

2/3*x^(3/2)

>>int(S3,'a','b')

ans=

2/3*b^(3/2)- 2/3*a^(3/2)

>>int(S3,0.5,0.6)

ans=

2/25*15^(1/2)-1/6*2^(1/2)

>>numeric(int(S3,0.5,0.6)) % 使用numeric函数可以计算积分的数值

ans=

0.0741

数值积分

先考虑一个积分式的数学式如下:

其中a, b分别为这个积分式的上限及下限,f(x) 则为要积分的函树。要求解上述的积分式,必须设定a, b和f(x)。以MATLAB 的积分函数求解的过程亦同,也要定义f(x) 及设定a,b,还须设定在区间[a,b] 之间离散点(discretized points) 数目,剩下的工作就是选择精度不同的积分法来求解了。

梯形法

MATLAB提供最简单的积分函数是梯形法trapz,我们先说明梯形法语法

trapz(x,y),其中x,y分别代表数目相同的阵列或矩阵,而y与x的关系可以由是一函数型态(如y=sin(x))或是不以函数描述的离散型态。

我们看一简单积分式

以下为MATLAB 的程式

>> x=0:pi/100:pi;

>> y=sin(x);

>> k=trapz(x,y)

k =

1.9998

二次函数法

MATLAB 另外提供二种积分函数,它们分别是辛普森法quad 和牛顿-康兹法quad8。三种方法的精确度由低而高,分别为trapz, quad, quad8。

由于这二种方法依据的积分法不同于梯形法,因此它们的语法就和trapz 不同;其语法为quad('function',a,b)(quad8语法相同),其中function是一已定义函数的名称(如sin, cos, sqrt, log 等),而a, b是积分的下限和上限。和trapz

比较,quad, quad8不同之处在于这二者类似解析式的积分式,只须设定上下限及定义要积分的函数;而trapz则是针对离散点型态的数据做积分。

我们看一简单积分式

以下为MATLAB 的程式

>> a=0; b=0.5;

>> kq=quad('sqrt',a,b)

kq =

0.2357

>> kq8=quad8('sqrt',a,b)

kq8 =

0.2357

再来看一个较复杂的积分式

>> x=-1:0.17:2;

>> y=humps(x);

>> area=trapz(x,y)

area =

25.9174

>> x=-1:0.07:2;

>> y=humps(x);

>> area=trapz(x,y)

area =

26.6243

>> area=quad('hump',-1,2) area =

26.3450

>> area=quad8('hump',-1,2) area =

26.3450

符号表达式画图

在许多的场合,将表达式可视化是有利的。MATLAB提供了函数ezplot来完成该任务。

>> y=' 16*x^2+64*x+96 ' % expression to plot

y=

16*x^2+64*x+96

>> ezplot(y)

图符号函数16*x^2+64*x+96 (-2π≤x≤2π) ezplot绘制了定义域为-2π≤x≤2π的给定符号函数,并相应地调整了y轴比例,还加了

网格栅和标志。在这个例子中,我们感兴趣的时间是从0到6。让我们再试一下,并指定时间范围,

>> ezplot(y,[0 6]) % plot y for 0≤x≤6

数值计算方法比较

有限差分方法(FDM:Finite Difference Method)是计算机数值模拟最早采用的方法,至今仍被广泛运用。该方法将求解域划分为差分网格,用有限个网格节点代替连续的求解域。有限差分法以Taylor级数展开等方法,把控制方程中的导数用网格节点上的函数值的差商代替进行离散,从而建立以网格节点上的值为未知数的代数方程组。有限差分法主要集中在依赖于时间的问题(双曲型和抛物型方程)。有限差分法方面的经典文献有Richtmeyer & Morton的《Difference Methods for Initial-Value Problems》;R. LeVeque《Finite Difference Method for Differential Equations》;《Numerical Methods for C onservation Laws》。 注:差分格式: (1)从格式的精度来划分,有一阶格式、二阶格式和高阶格式。 (2)从差分的空间形式来考虑,可分为中心格式和逆风格式。 (3)考虑时间因子的影响,差分格式还可以分为显格式、隐格式、显隐交替格式等。 目前常见的差分格式,主要是上述几种形式的组合,不同的组合构成不同的差分格式。差分方法主要适用于有结构网格,网格的步长一般根据实际地形的情况和柯朗稳定条件来决定。 构造差分的方法: 构造差分的方法有多种形式,目前主要采用的是泰勒级数展开方法。其基本的差分表达式主要有三种形式:一阶向前差分、一阶向后差分、一阶中心差分和二阶中心差分等,其中前两种格式为一阶计算精度,后两种格式为二阶计算精度。通过对时间和空间这几种不同差分格式的组合,可以组合成不同的差分计算格式。 有限差分法的不足:由于采用的是直交网格,因此较难适应区域形状的任意性,而且区分不出场函数在区域中的轻重缓急之差异,缺乏统一有效的处理自然边值条件和内边值条件的方法,难以构造高精度(指收敛阶)差分格式,除非允许差分方程联系更多的节点(这又进一步增加处理边值条件韵困难)。另外它还有编制不出通用程序的困难。 有限差分法的优点:该方法是一种直接将微分问题变为代数问题的近似数值解法,数学概念 直观,表达简单,精度可选而且在一个时间步内,对于一个给定点来说其相关的空间点只是 与该相邻的几点,而不是全部的空间点。是发展较早且比较成熟的数值方法 广义差分法(有限体积法)(GDM:Generalized Difference Method):1953年,Mac—Neal 利用积分插值法(也称积分均衡法)建立了三角网格上的差分格 式,这就是以后通称的不规划网格上的差分法.这种方法的几何误差小,特别是给出了处理自然边值条件(及内边值条件)的有效方法,堪称差分法的一大进步。1978年,李荣华利用有限元空间和对偶单元上特征函数的推广——局部Taylor展式的公项,将积分插值法改写成广义Galerkin法形式,从而将不规则网格差分法推广为广义差分法.其基本思路是,将计算区域划分为一系列不重复的控制体积,并使每个网格点周围有

数值计算方法学习心得

数值计算方法学习心得 ------一个代码的方法是很重要,一个算法的思想也很重要,但 在我看来,更重要的是解决问题的方法,就像爱因斯坦说的内容比 思维本身更重要。 我上去讲的那次其实做了挺充分的准备,程序的运行,pdf文档,算法公式的推导,程序伪代码,不过有一点缺陷的地方,很多细节 没有讲的很清楚吧,下来之后也是更清楚了这个问题。 然后一学期下来,总的来说,看其他同学的分享,我也学习到 许多东西,并非只是代码的方法,更多的是章胜同学的口才,攀忠 的排版,小冯的深入挖掘…都是对我而言比算法更加值得珍惜的东西,又骄傲地回想一下,曾同为一个项目组的我们也更加感到做项 目对自己发展的巨大帮助了。 同时从这些次的实验中我发现以前学到的很多知识都非常有用。 比如说,以前做项目的时候,项目导师一直要求对于要上传的 文件尽量用pdf格式,不管是ppt还是文档,这便算是对产权的一种 保护。 再比如代码分享,最基础的要求便是——其他人拿到你的代码 也能运行出来,其次是代码分享的规范性,像我们可以用轻量级Ubuntu Pastebin,以前做过一小段时间acm,集训队里对于代码的分享都是推荐用这个,像数值计算实验我觉得用这个也差不多了,其 次项目级代码还是推荐github(被微软收购了),它的又是可能更 多在于个人代码平台的搭建,当然像readme文档及必要的一些数据 集放在上面都更方便一些。

然后在实验中,发现debug能力的重要性,对于代码错误点的 正确分析,以及一些与他人交流的“正规”途径,讨论算法可能出 错的地方以及要注意的细节等,比如acm比赛都是以三人为一小组,讨论过后,讲了一遍会发现自己对算法理解更加深刻。 然后学习算法,做项目做算法一般的正常流程是看论文,尽量 看英文文献,一般就是第一手资料,然后根据论文对算法的描述, 就是如同课上的流程一样,对算法进一步理解,然后进行复现,最 后就是尝试自己改进。比如知网查询牛顿法相关论文,会找到大量 可以参考的文献。 最后的最后,想说一下,计算机专业的同学看这个数值分析, 不一定行云流水,但肯定不至于看不懂写不出来,所以我们还是要 提高自己的核心竞争力,就是利用我们的优势,对于这种算法方面 的编程,至少比他们用的更加熟练,至少面对一个问题,我们能思 考出对应问题的最佳算法是哪一个更合适解决问题。 附记: 对课程的一些小建议: 1. debug的能力不容忽视,比如给一个关于代码实现已知错误的代码给同学们,让同学们自己思考一下,然后分享各自的debug方法,一步一步的去修改代码,最后集全班的力量完成代码的debug,这往往更能提升同学们的代码能力。 2. 课堂上的效率其实是有点低的,可能会给学生带来一些负反馈,降低学习热情。 3. 总的来说还是从这门课程中学到许多东西。 数值分析学习心得体会

数值分析(计算方法)总结

第一章绪论 误差来源:模型误差、观测误差、截断误差(方法误差)、舍入误差 是的绝对误差,是的误差,为的绝对误差限(或误差限) 为的相对误差,当较小时,令 相对误差绝对值得上限称为相对误差限记为:即: 绝对误差有量纲,而相对误差无量纲 若近似值的绝对误差限为某一位上的半个单位,且该位直到的第一位非零数字共有n位,则称近似值有n位有效数字,或说精确到该位。 例:设x==…那么,则有效数字为1位,即个位上的3,或说精确到个位。 科学计数法:记有n位有效数字,精确到。 由有效数字求相对误差限:设近似值有n位有效数字,则其相对误差限为 由相对误差限求有效数字:设近似值的相对误差限为为则它有n位有效数字 令 1.x+y近似值为和的误差(限)等于误差(限)的 和 2.x-y近似值为 3.xy近似值为 4. 1.避免两相近数相减 2.避免用绝对值很小的数作除数 3.避免大数吃小数 4.尽量减少计算工作量 第二章非线性方程求根 1.逐步搜索法 设f (a) <0, f (b)> 0,有根区间为(a, b),从x0=a出发,按某个预定步长(例如h=(b-a)/N)

一步一步向右跨,每跨一步进行一次根的搜索,即判别f(x k)=f(a+kh)的符号,若f(x k)>0(而 f(x k-1)<0),则有根区间缩小为[x k-1,x k] (若f(x k)=0,x k即为所求根), 然后从x k-1出发,把搜索步长再缩小,重复上面步骤,直到满足精度:|x k-x k-1|0.将[a0,b0]对分,中点x0= ((a0+b0)/2),计算 f(x0)。 3.比例法 一般地,设[a k,b k]为有根区间,过(a k, f(a k))、(b k, f(b k))作直线,与x轴交于一点x k,则: 1.试位法每次迭代比二分法多算一次乘法,而且不保证收敛。 2.比例法不是通过使求根区间缩小到0来求根,而是在一定条件下直接构造出一个点列(递推公式),使该点列收敛到方程的根。——这正是迭代法的基本思想。 事先估计: 事后估计 局部收敛性判定定理: 局部收敛性定理对迭代函数的要求较弱,但对初始点要求较高,即初始点必须选在精确解的附近 Steffensen迭代格式: Newton法: Newton下山法:是下山因子 弦割法: 抛物线法:令 其中:

数值分析第一章绪论习题答案

第一章绪论 1.设0x >,x 的相对误差为δ,求ln x 的误差。 解:近似值* x 的相对误差为* **** r e x x e x x δ-= == 而ln x 的误差为()1ln *ln *ln ** e x x x e x =-≈ 进而有(ln *)x εδ≈ 2.设x 的相对误差为2%,求n x 的相对误差。 解:设()n f x x =,则函数的条件数为'() | |() p xf x C f x = 又1 '()n f x nx -= , 1 ||n p x nx C n n -?∴== 又((*))(*)r p r x n C x εε≈? 且(*)r e x 为2 ((*))0.02n r x n ε∴≈ 3.下列各数都是经过四舍五入得到的近似数,即误差限不超过最后一位的半个单位,试指 出它们是几位有效数字:*1 1.1021x =,*20.031x =, *3385.6x =, * 456.430x =,*57 1.0.x =? 解:*1 1.1021x =是五位有效数字; *20.031x =是二位有效数字; *3385.6x =是四位有效数字; *456.430x =是五位有效数字; *57 1.0.x =?是二位有效数字。 4.利用公式(2.3)求下列各近似值的误差限:(1) * * * 124x x x ++,(2) ***123x x x ,(3) **24/x x . 其中****1234 ,,,x x x x 均为第3题所给的数。 解:

*4 1* 3 2* 13* 3 4* 1 51()1021()1021()1021()1021()102 x x x x x εεεεε-----=?=?=?=?=? *** 124***1244333 (1)()()()() 1111010102221.0510x x x x x x εεεε----++=++=?+?+?=? *** 123*********123231132143 (2)() ()()() 111 1.10210.031100.031385.610 1.1021385.610222 0.215 x x x x x x x x x x x x εεεε---=++=???+???+???≈ ** 24**** 24422 *4 33 5 (3)(/) ()() 11 0.0311056.430102256.43056.430 10x x x x x x x εεε---+≈ ??+??= ?= 5计算球体积要使相对误差限为1,问度量半径R 时允许的相对误差限是多少? 解:球体体积为34 3 V R π= 则何种函数的条件数为 2 3'4343 p R V R R C V R ππ=== (*)(*)3(*)r p r r V C R R εεε∴≈= 又(*)1r V ε=

数值计算方法大作业

目录 第一章非线性方程求根 (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数值计算功能 1,基础运算 (1)多项式的创建与表达 将多项式(x-6)(x-3)(x-8)表示为系数形式 a=[6 3 8] % 写成根矢量 pa=poly(a)% 求出系数矢量 ppa=poly2sym(pa,'x') % 表示成符号形式 ezplot(ppa,[-50,50]) 求3介方阵A的特征多项式 a=[6 2 4;7 5 6;1 3 6 ]; pa=poly(a)% 写出系数矢量 ppa=poly2sym(pa) %表示成符号形式 ezplot(ppa,[-50,50]) % 绘图 求x^3-6x^2-72x-27的根。 a=[1,-6,-72,-85]; % 写出多项式系数矢量 r=roots(a) % 求多项式的根 (2)多项式的乘除运算 c=conv(a,b) %乘法 [q,r]=deconv(c,a)% 除法 求a(s)=s^2+2s+3乘以b(s)=4s^2+5s+6的乘积 a=[1 2 3] b=[4 5 6] % 写出系数矢量 c=conv(a,b) c=poly2sym(c,'s') % 写成符号形式的多项式 展开(s^2+2s+2)(s+4)(s+1)并验证结果被(s+4),(s+3)除后的结果。c=conv([1,2,2],conv([1,4],[1,1])) cs=poly2sym(c,'s') c=[1 7 16 18 8] [q1,r1]=deconv(c,[1,4]) [q2,r2]=deconv(c,[1,3]) cc=conv(q2,[1,3]) test=((c-r2)==cc)

其他常用的多项式运算命令 pa=polyval(p,s) % 按数组规则计算给定s时多项式的值 pm=polyvalm(p,s)% 按矩阵规则计算给定s时多项式的值 [r,p,k]=residue(b,a) % 部分分式展开,b,a分别是分子,分母多项式系数矢量。r,p,k分别是留数,极点和值项矢量。 p=poly(x,y,n) % 用n介多项式拟合给定的数据 polyder(p) %多项式微分 x=[1 2 3 4 5]; y=[5.5 43.1 128 290.7 498.4]; p=polyfit(x,y,3) x2=1:0.1:5; y2=polyval(p,x2); plot(x,y,'o',x2,y2) 2,线性代数 1,求解方程的根 t=[0 0.3 0.8 1.1 1.6 2.3]'; y=[0.82 0.72 0.63 0.60 0.55 0.50]'; e=[ones(size(t)) exp(-t)] c=e\y t1=[0:0.1:2.5]'; y1=[ones(size(t1)),exp(-t1)]*c; plot(t1,y1,'b',t,y,'ro') 2,逆矩阵及行列式 inv(a) det(a) pinv(a) 3,矩阵分解(略) 4,数据分析 max(x)求x各列的最大元素 mean(x)求x各列的平均值 median(x)找出x各列的中位元素 min(x)求出x各列的最小元素 S=cumsum(x)求x各列元素累计和 sort(x)使x的各列元素按递增排序。 std(x)求x各列的标准差。 sum(x)求x各列元素之和 prod(x)求x各列元素之积

数值分析第1章习题

一 选择题(55分=25分) (A)1. 3.142和3.141分别作为π的近似数具有()和()为有效数字(有效数字) A. 4和3 B. 3和2 C. 3和4 D. 4和4 解,时,, m-n= -3,所以n=4,即有4位有效数字。当时,, ,m-n= -2,所以n=3,即有3位有效数字。 (A)2. 为了减少误差,在计算表达式时,应该改为计算,是属于()来避免误差。(避免误差危害原则) A.避免两相近数相减; B.化简步骤,减少运算次数; C.避免绝对值很小的数做除数; D.防止大数吃小数 解:由于和相近,两数相减会使误差大,因此化加法为减法,用的方法是避免误差危害原则。 (B)3.下列算式中哪一个没有违背避免误差危害原则(避免误差危害原则) A.计算 B.计算 C.计算 D.计算 解:A会有大数吃掉小数的情况C中两个相近的数相减,D中两个相近的数相减也会增大误差 (D)4.若误差限为,那么近似数0.003400有()位有效数字。(有效数字) A. 5 B. 4 C. 7 D. 3 解:即m-n= -5,,m= -2,所以n=3,即有3位有效数字 (A)5.设的近似数为,如果具有3位有效数字,则的相对误差限为()(有效数字与相对误差的关系) A. B. C. D. 解:因为所以,因为有3位有效数字,所以n=3,由相对误差和有效数字的关系可得a的相对误差限为 二 填空题:(75分=35分)

1.设则有2位有效数字,若则a有3位有效数字。(有效数字) 解:,时,,,m-n= -4,所以n=2,即有2位有效数字。当时, ,m-n= -5,所以n=3,即有3位有效数字。 2.设 =2.3149541...,取5位有效数字,则所得的近似值x=2.3150(有效数字)解:一般四舍五入后得到的近似数,从第一位非零数开始直到最末位,有几位就称该近似数有几位有效数字,所以要取5位有效数字有效数字的话,第6位是5,所以要进位,得到近似数为2.3150. 3.设数据的绝对误差分别为0.0005和0.0002,那么的绝对误差约为 0.0007 。(误差的四则运算) 解:因为,, 4.算法的计算代价是由 时间复杂度 和 空间复杂度 来衡量的。(算法的复杂度) 5.设的相对误差为2%,则的相对误差为 2n% 。(函数的相对误差) 解:, 6.设>0,的相对误差为δ,则的绝对误差为 δ 。(函数的绝对误差) 解:,, 7.设,则=2时的条件数为 3/2 。(条件数) 解:, 三 计算题(220分=40分) 1.要使的近似值的相对误差限小于0.1%,要取几位有效数字?(有效数字和相对误差的关系) 解:设取n位有效数字,由定理由于知=4所以要使相对误差限小于0.1%,则,只要取n-1=3即n=4。所以的近似值取4位有效数字,其相对误差限小于0.1%。 2.已测得某场地长的值为,宽d的值为,已知试求面积的绝对误差限和

数值分析实验报告总结

数值分析实验报告总结 随着电子计算机的普及与发展,科学计算已成为现代科 学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。 算法算法是指由基本算术运算及运算顺序的规定构成的完 整的解题步骤。算法可以使用框图、算法语言、数学语言、自然语言来进行描述。具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。 误差 计算机的计算结果通常是近似的,因此算法必有误差, 并且应能估计误差。误差是指近似值与真正值之差。绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。误差来源见表 第三章泛函分析泛函分析概要 泛函分析是研究“函数的函数”、函数空间和它们之间 变换的一门较新的数学分支,隶属分析数学。它以各种学科

如果 a 是相容范数,且任何满足 为具体背景,在集合的基础上,把客观世界中的研究对象抽 范数 范数,是具有“长度”概念的函数。在线性代数、泛函 分析及相关的数学领域,泛函是一个函数,其为矢量空间内 的所有矢量赋予非零的正长度或大小。这里以 Cn 空间为例, Rn 空间类似。最常用的范数就是 P-范数。那么 当P 取1, 2 ,s 的时候分别是以下几种最简单的情形: 其中2-范数就是通常意义下的距离。 对于这些范数有以下不等式: 1 < n1/2 另外,若p 和q 是赫德尔共轭指标,即 1/p+1/q=1 么有赫德尔不等式: II = ||xH*y| 当p=q=2时就是柯西-许瓦兹不等式 般来讲矩阵范数除了正定性,齐次性和三角不等式之 矩阵范数通常也称为相容范数。 象为元素和空间。女口:距离空间,赋范线性空间, 内积空间。 1-范数: 1= x1 + x2 +?+ xn 2-范数: x 2=1/2 8 -范数: 8 =max oo ,那 外,还规定其必须满足相容性: 所以

数值计算方法》试题集及答案

《计算方法》期中复习试题 一、填空题: 1、已知3.1)3(,2.1)2(,0.1)1(===f f f ,则用辛普生(辛卜生)公式计算求得 ?≈3 1 _________ )(dx x f ,用三点式求得≈')1(f 。 答案:2.367,0.25 2、1)3(,2)2(,1)1(==-=f f f ,则过这三点的二次插值多项式中2 x 的系数为 ,拉 格朗日插值多项式为 。 答案:-1, )2)(1(21 )3)(1(2)3)(2(21)(2--------= x x x x x x x L 3、近似值*0.231x =关于真值229.0=x 有( 2 )位有效数字; 4、设)(x f 可微,求方程)(x f x =的牛顿迭代格式是( ); 答案 )(1)(1n n n n n x f x f x x x '--- =+ 5、对1)(3 ++=x x x f ,差商=]3,2,1,0[f ( 1 ),=]4,3,2,1,0[f ( 0 ); 6、计算方法主要研究( 截断 )误差和( 舍入 )误差; 7、用二分法求非线性方程 f (x )=0在区间(a ,b )内的根时,二分n 次后的误差限为 ( 1 2+-n a b ); 8、已知f (1)=2,f (2)=3,f (4)=5.9,则二次Newton 插值多项式中x 2系数为( 0.15 ); 11、 两点式高斯型求积公式?1 d )(x x f ≈( ?++-≈1 )] 321 3()3213([21d )(f f x x f ),代数精度 为( 5 ); 12、 为了使计算 32)1(6 )1(41310-- -+-+ =x x x y 的乘除法次数尽量地少,应将该表达 式改写为 11 ,))64(3(10-= -++=x t t t t y ,为了减少舍入误差,应将表达式1999 2001-

数值计算方法第一章

第一章 绪 论 本章以误差为主线,介绍了计算方法课程的特点,并概略描述了与算法相关的基本概念,如收敛性、稳定性,其次给出了误差的度量方法以及误差的传播规律,最后,结合数值实验指出了算法设计时应注意的问题. §1.1 引 言 计算方法以科学与工程等领域所建立的数学模型为求解对象,目的是在有限的时间段内利用有限的计算工具计算出模型的有效解答。 由于科学与工程问题的多样性和复杂性,所建立的数学模型也是各种各样的、复杂的. 复杂性表现在如下几个方面:求解系统的规模很大,多种因素之间的非线性耦合,海量的数据处理等等,这样就使得在其它课程中学到的分析求解方法因计算量庞大而不能得到计算结果,且更多的复杂数学模型没有分析求解方法. 这门课程则是针对从各种各样的数学模型中抽象出或转化出的典型问题,介绍有效的串行求解算法,它们包括 (1) 非线性方程的近似求解方法; (2) 线性代数方程组的求解方法; (3) 函数的插值近似和数据的拟合近似; (4) 积分和微分的近似计算方法; (5) 常微分方程初值问题的数值解法; (6) 优化问题的近似解法;等等 从如上内容可以看出,计算方法的显著特点之一是“近似”. 之所以要进行近似计算,这与我们使用的工具、追求的目标、以及参与计算的数据来源等因素有关. 计算机只能处理有限数据,只能区分、存储有限信息,而实数包含有无穷多个数据,这样,当把原始数据、中间数据、以及最终计算结果用机器数表示时就不可避免的引入了误差,称之为舍入误差. 我们需要在有限的时间段内得到运算结果,就需要将无穷的计算过程截断, 从而产生截断误差. 如 +++=! 21 !111e 的计算是无穷过程,当用 ! 1 !21!111n e n ++++= 作为e 的近似时,则需要进行有限过程的计算,但产生了 截断误差e e n -.

数值计算方法总结计划复习总结提纲.docx

数值计算方法复习提纲 第一章数值计算中的误差分析 1 2.了解误差 ( 绝对误差、相对误差 ) 3.掌握算法及其稳定性,设计算法遵循的原则。 1、误差的来源 模型误差 观测误差 截断误差 舍入误差 2误差与有效数字 绝对误差E(x)=x-x * 绝对误差限x*x x* 相对误差E r (x) ( x x* ) / x ( x x* ) / x* 有效数字 x*0.a1 a2 ....a n10 m 若x x*110m n ,称x*有n位有效数字。 2 有效数字与误差关系 ( 1)m 一定时,有效数字n 越多,绝对误差限越小; ( 2)x*有 n 位有效数字,则相对误差限为E r (x)1 10 (n 1)。 2a1 选择算法应遵循的原则 1、选用数值稳定的算法,控制误差传播; 例 I n 11n x dx e x e I 0 1 1 I n1nI n1 e △ x n n! △x0 2、简化计算步骤,减少运算次数; 3、避免两个相近数相减,和接近零的数作分母;避免

第二章线性方程组的数值解法 1.了解 Gauss 消元法、主元消元法基本思想及算法; 2.掌握矩阵的三角分解,并利用三角分解求解方程组; (Doolittle 分解; Crout分解; Cholesky分解;追赶法) 3.掌握迭代法的基本思想,Jacobi 迭代法与 Gauss-Seidel 4.掌握向量与矩阵的范数及其性质, 迭代法的收敛性及其判定。 本章主要解决线性方程组求解问题,假设n 行 n 列线性方程组有唯一解,如何得到其解? a 11x 1 a 12 x 2... a 1n x n b1 a 21x 1 a 22 x 2... a 2n x n b2 ... a n1x 1 a n 2 x 2... a nn x n b n 两类方法,第一是直接解法,得到其精确解; 第二是迭代解法,得到其近似解。 一、Gauss消去法 1、顺序G auss 消去法 记方程组为: a11(1) x1a12(1) x2... a1(1n) x n b1(1) a21(1) x1a22(1) x2... a2(1n) x n b2(1) ... a n(11) x1a n(12) x2... a nn(1) x n b n(1) 消元过程: 经n-1步消元,化为上三角方程组 a11(1) x1b1(1) a 21(2) x1a22(2 ) x2b2( 2 ) ... a n(1n) x1a n(n2) x2...a nn(n ) x n b n( n ) 第k步 若a kk(k)0 ( k 1)( k) a ik(k )(k )( k 1)( k )a ik(k )( k) a ij a ij a kk(k ) a kj b i b i a kk(k )b k k 1,...n 1 i, j k 1,....,n 回代过程:

第06章_MATLAB数值计算_例题源程序汇总

第6章 MATLAB 数值计算 例6.1 求矩阵A 的每行及每列的最大和最小元素,并求整个矩阵的最大和最小元素。 1356 78256323578255631 01-???? -? ?=???? -??A A=[13,-56,78;25,63,-235;78,25,563;1,0,-1]; max(A,[],2) %求每行最大元素 min(A,[],2) %求每行最小元素 max(A) %求每列最大元素 min(A) %求每列最小元素 max(max(A)) %求整个矩阵的最大元素。也可使用命令:max(A(:)) min(min(A)) %求整个矩阵的最小元素。也可使用命令:min(A(:)) 例6.2 求矩阵A 的每行元素的乘积和全部元素的乘积。 A=[1,2,3,4;5,6,7,8;9,10,11,12]; S=prod(A,2) prod(S) %求A 的全部元素的乘积。也可以使用命令prod(A(:)) 例6.3 求向量X =(1!,2!,3!,…,10!)。 X=cumprod(1:10) 例6.4 对二维矩阵x ,从不同维方向求出其标准方差。 x=[4,5,6;1,4,8] %产生一个二维矩阵x y1=std(x,0,1) y2=std(x,1,1) y3=std(x,0,2) y4=std(x,1,2) 例6.5 生成满足正态分布的10000×5随机矩阵,然后求各列元素的均值和标准方差,再求这5列随机数据的相关系数矩阵。 X=randn(10000,5); M=mean(X) D=std(X) R=corrcoef(X)

例6.6 对下列矩阵做各种排序。 185412613713-?? ??=?? ??-?? A A=[1,-8,5;4,12,6;13,7,-13]; sort(A) %对A 的每列按升序排序 -sort(-A,2) %对A 的每行按降序排序 [X,I]=sort(A) %对A 按列排序,并将每个元素所在行号送矩阵I 例6.7 给出概率积分 2 (d x x f x x -? e 的数据表如表6.1所示,用不同的插值方法计算f (0.472)。 x=0.46:0.01:0.49; %给出x ,f(x) f=[0.4846555,0.4937542,0.5027498,0.5116683]; format long interp1(x,f,0.472) %用默认方法,即线性插值方法计算f(x) interp1(x,f,0.472,'nearest') %用最近点插值方法计算f(x) interp1(x,f,0.472,'spline') %用3次样条插值方法计算f(x) interp1(x,f,0.472,'cubic') %用3次多项式插值方法计算f(x) format short 例6.8 某检测参数f 随时间t 的采样结果如表6.2,用数据插值法计算t =2,7,12,17,22,17,32,37,42,47,52,57时的f 值。 T=0:5:65; X=2:5:57;

(整理)数值分析计算方法超级总结

工程硕士《数值分析》总复习题(2011年用) [由教材中的习题、例题和历届考试题选编而成,供教师讲解和学生复习用] 一. 解答下列问题: 1)下列所取近似值有多少位有效数字( 注意根据什么? ): a) 对 e = 2.718281828459045…,取* x = 2.71828 b) 数学家祖冲之取 113355 作为π的近似值. c) 经过四舍五入得出的近似值12345,-0.001, 90.55000, 它们的有效 数字位数分别为 位, 位, 位。 2) 简述下名词: a) 截断误差 (不超过60字) b) 舍入误差 (不超过60字) c) 算法数值稳定性 (不超过60字) 3) 试推导( 按定义或利用近似公式 ): 计算3 x 时的相对误差约等于x 的相对 误差的3倍。 4) 计算球体积3 34r V π= 时,为使其相对误差不超过 0.3% ,求半径r 的相对 误差的允许范围。 5) 计算下式 341 8 )1(3)1(7)1(5)1(22345+-+---+---=x x x x x x P )( 时,为了减少乘除法次数, 通常采用什么算法? 将算式加工成什么形式? 6) 递推公式 ?????=-==- ,2,1,1102 10n y y y n n 如果取 * 041.12y y =≈= ( 三位有效数字 ) 作近似计算, 问计算到 10y 时误差为初始误差的多少倍? 这个计算过程数值稳定吗 ? 二. 插值问题: 1) 设函数 )(x f 在五个互异节点 54321,,,,x x x x x 上对应的函数值为 54321,,,,f f f f f ,根据定理,必存在唯一的次数 (A ) 的插值多项式 )(x P ,满足插值条件 ( B ) . 对此,为了构造Lagrange 插值多项式 )(x L ,由5个节点作 ( C ) 个、次数均为 ( D ) 次的插值基函数

数值分析的MATLAB程序

列主元法 function lianzhuyuan(A,b) n=input('请输入n:') %选择阶数A=zeros(n,n); %系数矩阵A b=zeros(n,1); %矩阵b X=zeros(n,1); %解X for i=1:n for j=1:n A(i,j)=(1/(i+j-1)); %生成hilbert矩阵A end b(i,1)=sum(A(i,:)); %生成矩阵b end for i=1:n-1 j=i; top=max(abs(A(i:n,j))); %列主元 k=j; while abs(A(k,j))~=top %列主元所在行 k=k+1; end for z=1:n %交换主元所在行a1=A(i,z); A(i,z)=A(k,z); A(k,z)=a1; end a2=b(i,1); b(i,1)=b(k,1); b(k,1)=a2; for s=i+1:n %消去算法开始m=A(s,j)/A(i,j); %化简为上三角矩阵 A(s,j)=0; for p=i+1:n A(s,p)=A(s,p)-m*A(i,p); end b(s,1)=b(s,1)-m*b(i,1); end end X(n,1)=b(n,1)/A(n,n); %回代开始 for i=n-1:-1:1 s=0; %初始化s for j=i+1:n s=s+A(i,j)*X(j,1);

end X(i,1)=(b(i,1)-s)/A(i,i); end X 欧拉法 clc clear % 欧拉法 p=10; %贝塔的取值 T=10; %t取值的上限 y1=1; %y1的初值 r1=1; %y2的初值 %输入步长h的值 h=input('欧拉法please input number(h=1 0.5 0.25 0.125 0.0625):h=') ; if h>1 or h<0 break end S1=0:T/h; S2=0:T/h; S3=0:T/h; S4=0:T/h; i=1; % 迭代过程 for t=0:h:T Y=(exp(-t)); R=(1/(p-1))*exp(-t)+((p-2)/(p-1))*exp(-p*t); y=y1+h*(-y1); y1=y; r=r1+h*(y1-p*r1); r1=r; S1(i)=Y; S2(i)=R; S3(i)=y; S4(i)=r; i=i+1; end t=[0:h:T]; % 红线为解析解,'x'为数值解 plot(t,S1,'r',t,S3,'x')

数值计算方法学习心得

数值计算方法学习心得 在研究生一年级的上半学期,我们安排了计算方法的课程,通过课堂授课、网上学习、学术报告以及课堂监督等方式的引导,我们对计算方法有了全新的认识。我们知道,数学是一门重要的基础学科。离开了数学,科技便无法发展。而在数学这门学科中,数值计算方法有着其不可取代的重要地位。 在授课的过程中,首先利用前几讲课的时间对计算方法的基础进行补充,考虑到有部分专业的学生在本科时期没有接触过计算方法这门课程;计算方法主要研究实际问题,当今社会计算机高速的发展,为人们使用数值计算方法解决科学技术中的各种数学问题提供了有力的硬件条件。要将关于数值计算的实际问题借助于计算机来解决,那么实际的上机操作就显得十分重要。因此,老师在平时课堂授课的同时,也推广网上学习,通过课堂掌握知识、网上复习内容双重方式学习,更有利于我们掌握知识,另外对于我们上机操作也具有十分重要的指导意义。通过网上看教学视频,一方面我们对课上学习的内用加深了印象,另一方面由于课堂上时间有限,对于某些知识,我们在听课时不是很清楚,似懂非懂,在网上学习的帮助下,我们可以在课后及时对这些知识进行进一步的消化,对于我们吸收知识也是一种很好的方式。此外,网上学习具有可重复性的优点,这是课堂上所不具有的特点,在课堂上不懂的知识,在网上可以反复学习,在网上学习中遇到的问题也能够反馈到课堂。所以课堂授课与网上学习相辅相成,各有优点,弥补了各自的不足之处。 很多课应用却是另一码事,学是一码事,当然课程的学术报告也十分重要, 程中,我们学会了,遇到问题却不会解决,所以课程学术报告此时起了关键作用。

学术报告是基于每组学生各自的专业设置的,这样做一方面检验学生应用计算方法的能力,另一方面也是为了引导学生将计算方法与本专业联系起来,学会应用学过的知识对现象进行描述、建模以及采用编程的方法处理数据等。 本学期的计算方法课程相当充实,在老师课上精心的授课、学生课下利用网上资源认真复习、对课程学术报告的完成以及课堂监督下,同学们都受益匪浅,尤其是对于数据处理方法的学习、思维的形成都有极其重要的作用,对于后期的专业研究也有深远的影响。 本学期已经接近尾声,计算方法课程也已经结束,在此向老师表示敬意和感谢。.

Matlab关于数值计算的实现

Matlab关于数值计算的实现 摘要:数值计算(numerical computation computation),主要研究更好的利用计算机更好的进行数值计算,解决各种数学问题。数值分析包括离散傅里叶变换,考虑截断误差,计算误差,函数的敛散性与稳定性等。在数学方面,数值计算的主要研究数值微分与积分,数据的处理与多项式计算,最优化问题,线性方程与非线性方程的求解,常微分方程的数值求解等。同时,数值计算在物理,化学,经济等方面也有研究,本文暂且不表。M atlab软件历经二十多年来的发展,已成为风靡世界的数学三大软件(matlb,Mathematica l,Maple)之一,在数学类科技应用软件中在数值计算方面首屈一指。Matlab以矩阵为数据操作的基本单位,使得矩阵运算十分便捷快速,同时Matlab还提供了海量的计算函数,而且使用可靠地算法进行计算,能使用户在繁复的数学运算中解脱,Matlab还具有方便且完善的图形处理功能,方便绘制二维和三维图形并修饰。

目录 1.数值分析(离散傅里叶变换,考虑截断误差,计算误差,函数 的敛散性与稳定性) 2.数值计算(数值微分与积分,数据的处理与多项式计算, 最优化问题,线性方程与非线性方程的求解,常微分方程的数值求解) 3.图形处理功能(方便绘制二维和三维图形并修饰) 4.总结

1.数据统计与分析 Matlab 可以进行求矩阵的最大最小元素,平均值与中值,关于矩阵元素的求和与求积,累加和与累乘积,标准方程,相关系数,元素排序。现在以求标准方差举例说明Matlab 的实现。 在Matlab 中,实现标准方差计算的函数为std 。对于向量(Y ),std (Y )实现返回一个标准方差,而对于矩阵(A ),std (A )返回一个行向量,该行向量的每个元素对应着矩阵A 各行或各列的标准方差。一般调用std 函数的格式为std (A ,flag ,dim ) Dim 取1或者2分别对应求各列或各行的标准方差,flag 取1时,按照标准方差的计算公式 ∑-=-=N i x x S i N 1 2 1)(11来计算。若flag 取2,则用公式 ∑-==N i x x S i N 1 2 2) (1 进行计算。默认的flag 取值为0,dim 取值为1。课本page143 2. 离散傅里叶变换 离散傅里叶变换广泛应用于信号的分析,光谱和声谱分析、全息技术等各个领域。但直接计算dft 的运算量与变化的长度N 的平方成正比,当N 较大时,计算量太大。随着计算机技术的迅速发展,在计算机上进行离散傅里叶变换计算成为可能。特别是快速傅里叶变换算法的出现,为傅里叶变换的应创造了条件。 (1):傅里叶变换算法的简述。 傅立叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分. f(t)是t 的周期函数,如果t 满足狄里赫莱条件:在一个以2T 为周期内f(X)连续或只有有限个第一类间断点,附f (x )单调或可划分成有限个单调区间,则F (x )以2T 为周期的傅里叶级数收敛,和函数S (x )也是以2T 为周期的周期函数,且在这些间断点上,函数是有限值;在一个周期内具有有限个极值点;绝对可积。则有下图①式成立。称为积分运算f(t)的傅立叶变换, ②式的积分运算叫做F(ω)的傅立叶逆变换。F(ω)叫做f(t)的像函数,f(t)叫做 F(ω)的像原函数。F(ω)是f(t)的像。f(t)是F(ω)原像。 ①傅立叶变换 ②傅立叶逆变换

数值分析第一章作业

西安邮电大学2018级工硕学位课 数值分析第一章作业 1.数值计算方法设计的基本手段是( ). (A) 近似 (B) 插值 (C) 拟合 (D) 迭代 2.为了在有限时间内得到结果,用有限过程取代无限过程所产生的近似解与精确解之间的误差称为( ). (A) 舍入误差 (B) 截断误差 (C) 测量误差 (D) 绝对误差 3.由于计算机的字长有限,原始数据在机器内的表示以及进行算术运算所产生的误差统称为( ). (A) 舍入误差 (B) 截断误差 (C) 相对误差 (D) 绝对误差 4.数值计算方法研究的核心问题可以概括为( )对计算结果的影响. (A) 算法的稳定性 (B) 算法的收敛性 (C) 算法的复杂性 (D) 近似 5.当N 充分大时,利用下列各式计算121N N dx I x +=+?,等式( )得到的结果最好. (A) arctan(1)arctan()I N N =+- (B) 2arctan(1)I N N =++ (C) 21arctan()1I N N =++ (D) 211I N =+ 6. 计算61), 1.4≈,利用下列哪个公式得到的结果最好?为什么? (B) 3(3- (D) 99-7.计算圆柱体的体积,已知底面半径r 及圆柱高h 的相对误差限均不超过5110-?,则计算所得体积的相对误差限如何估计?. 8.已知近似值0.500x *=的误差限*4()510x ε-≤?,32()21f x x x x =---. ①用秦九韶算法计算()f x *. ②求(())f x ε*,并说明x *及()f x *各有几位有效数字. 9. 分析算法011111,,32,1,2,,k k k y y y y y k +-?==???=-=? 的数值稳定性.

相关主题
文本预览
相关文档 最新文档