当前位置:文档之家› matlab非线性方程的解法(含牛拉解法)

matlab非线性方程的解法(含牛拉解法)

matlab非线性方程的解法(含牛拉解法)
matlab非线性方程的解法(含牛拉解法)

非线性方程的解法(含牛拉解法)

1引 言

数学物理中的许多问题归结为解函数方程的问题,即,

0)(=x f (1.1) 这里,)(x f 可以是代数多项式,也可以是超越函数。若有数*x 为方程0)(=x f 的根,或称函数)(x f 的零点。

设函数)(x f 在],[b a 内连续,且0)()(

如何寻求根的初始值呢?简单述之,为了明确起见,不妨设)(x f 在区间],[b a 内有一个实的单根,且0)(,0)(>

0)(*)(≤+h x f x f k k (1.2) 那么所求的根必在),(h x x k k +内,这时可取k x 或h x k +作为根的初始近似值。这种方法通常称为“定步长搜索法”。另外,还是图解法、近似方程法和解析法。

2 迭代法

2.1 迭代法的一般概念

迭代法是数值计算中一类典型方法,不仅用于方程求根,而且用于方程组求解,矩阵求特征值等方面。迭代法的基本思想是一种逐次逼近的方法。首先取一个精糙的近似值,然后用同一个递推公式,反复校正这个初值,直到满足预先给定的精度要求为止。

对于迭代法,一般需要讨论的基本问题是:迭代法的构造、迭代序列的收敛性天收敛速

度以及误差估计。这里,主要看看解方程迭代式的构造。

对方程(1.1),在区间],[b a 内,可改写成为:

)(x x ?= (2.1) 取],[0b a x ∈,用递推公式:

)(1k k x x ?=+, ,2,1,0=k (2.2) 可得到序列:

==0210}{,,,,k k k x x x x x (2.3)

当∞→k 时,序列∞

=0}{k k x 有极限

x ~,且)(x ?在x ~附近连续,则在式(2.2)两边极限,得, )~(~

x x ?= 即,x ~

为方程(2.1)的根。由于方式(1.1)和方程(2.1)等价,所以, x x ~

*= 即,

*lim x x k k =∞

→ 式(2.2)称为迭代式,也称为迭代公式;)(x ?可称为迭代函数。称求得的序列∞

=0}{k k x 为迭代序

列。

2.2 程序和实例

下面是基于MATLAB 的迭代法程序,用迭代格式)(1n n x g p =+,求解方程)(x g x =,其中初始值为0p 。

**************************************************************************

function[p,k,err,P]=fixpt(f1021,p0,tol,max1)

% f1021是给定的迭代函数。

% p0是给定的初始值。

% tol 是给定的误差界。

% max1是所允许的最大迭代次数。

% k 是所进行的迭代次数加1。

% p 是不动点的近似值。

% err 是误差。

% P = {p1,p2,…,pn}

P(1) = p0;

for k = 2:max1

P(k) = feval('f1021', P(k-1));

k, err = abs(P(k) - P(k-1))

p = P(k);

if(err

break;

end

if k == max1

disp('maximum number of iterations exceeded');

end

end

P=P;

**************************************************************************** 例2.1 用上述程序求方程0sin 2=-x x 的一个近似解,给定初始值5.00=x ,误差界为510-。

解:先用m 文件先定义一个名为f1021.m 的函数文件。

function y = f1021(x)

y = sin(x)/x;

建立一个主程序prog1021.m

clc

clear all

fixpt('f1021',0.5,10^(-5),20)

然后在MATLAB 命令窗口运行上述主程序,即:

>> prog1021

计算结果如下。

k = 2

err = 0.4589

k = 3

err = 0.1052

k = 4

err = 0.0292

k = 5

err = 0.0078

k = 6

err = 0.0021

k = 7

err = 5.7408e-004

k = 8

err = 1.5525e-004

k = 9

err = 4.1975e-005

k = 10

err = 1.1350e-005

k = 11

err = 3.0688e-006

P = Columns 1 through 6

0.5000 0.9589 0.8537 0.8829 0.8751 0.8772

Columns 7 through 11

0.8766 0.8768 0.8767 0.8767 0.8767

ans = 0.8767

3 二分法

3.1 二分法原理

二分法是方程求解最直观、最简单的方法。二分法以连续函数的介值定理为基础的。由介值定理知道,若函数)(x f 区间],[b a 上连续,且0)(*)( b f a f ,即)(a f 和)(b f 负号相反,则)(x f 在],[b a 内一定有实根。二分法的基本思想是:用对分区间的方法根据分点处函数)(x f 的符号逐步将有限区间缩小,使在足够小的区间内,方程有且仅有一根。下面简述其基本步

骤。

首先记b b a a ==00,。用中点2

000b a x +=将区间],[00b a 等分成2个小区间:],[00x a 和],[00b x 。然后分析可能存在的三种情况:

如果0)(*)(0=x f a f ,则0x 是零点,也就是方程的根。

如果0)(*)(0

如果0)(*)(0

对有根的新区间施行同样的操作,于是得到一系列有空的区间:

],[],[],[],[221100k k b a b a b a b a ???? (3.1) 其中每1个区间的长度都是前一区间长度的一半,最后1个区间的长度为:

k

k k a b a b 2-=- (3.2) 如果取最后1个区间],[k k b a 的中点:

2

k k k a b x -= (3.3) 作为0)(=x f 根的近似值,则有误差估计式:

1*2

2+-≤-≤-k k k k a b a b x x (3.4) 对于所给精度ε,若取k 使得

ε≤-+1

2k a b (3.5) 则有,

ε≤-k x x * (3.6) 3.2 程序与实例

用二分法求解方程0)(=x f 在有根区间],[b a 内的一个根,其中)(x f 在],[b a 只有一个根的情形。

***************************************************************************

function [c,err,yc] = bisect(f1031,a,b,delta)

% f1031是所要求解的函数。

% a 和b 分别为有根区间的左右限。

% delta 是允许的误差界。

% c 为所求近似解。

% yc 为函数f 在c 上的值。

% err 是c 的误差估计。

ya = feval('f1031',a);

yb = feval('f',b);

if yb == 0,

c = b ;

return

end

if ya*yb>0,

disp('(a,b)不是有根区间');

return

end

max1 = 1 + round((log(b-a) - log(delta))/log(2));

for k = 1:max1

c = (a + b)/2;

yc = feval('f',c);

if yc == 0

a=c;

b=c;

return

elseif yb*yc>0

b = c;

yb = yc;

else

a = c;

ya = yc;

end

if (b-a) < delta,return,end

end

k;

c = (a + b)/2;

err = abs(b-a);

yc = feval('f',c);

*****************************************************************************

例3.1 用上述程序求方程013=--x x 在区间]5.1,0.1[内的一个近似解,要求准确到小数点后第2位。

解:先用m 文件先定义一个名为f1031.m 的函数文件。

function y = f1031(x)

y = x^3 - x - 1;

建立一个主程序prog1031.m

clc

clear all

bisect('f1031', 1.0, 1.5, 0.0005)

然后在MATLAB 命令窗口运行上述主程序,即:

>> prog1031

计算结果如下。

ans =

1.3247

4 牛顿法

4.1 牛顿法原理

从前面迭代法,我们知道,迭代函数)(x ?构造的好坏,不仅影响收敛速度,而且迭代格式有可能发散。怎样选择一个迭代函数才能保证迭代序列一定收敛呢?

构代迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如果能将非线性方程(1.1)用线性方程去代替,那么,求近似根问题就很容易解决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。

设k x 是方程(1.1)的一个近似根,把如果)(x f 在k x 处作一阶Taylor 展开,即: ))((')()(k k k x x x f x f x f -+≈ (4.1) 于是我们得到如下近似方程:

0))((')(=-+k k k x x x f x f (4.2) 设0)('≠k x f ,则方程(10.2.1)的解为:

()'()

k k k f x x x f x =+ (4.3) 取x ~

作为原方程(1.1)的新近似根1+k x ,即令:

)

(')(1k k k k x f x f x x -=+, ,2,1,0=k (4.4) 上式称为牛顿迭代格式。用牛顿迭代格式求方程的根的方法就称为牛顿迭代法,简称牛顿法。 牛顿法具有明显的几何意义。方程:

))((')(k k k x x x f x f y -+= (10.4.5) 是曲线)(x f y =上点))(,(k k x f x 处的切线方程。迭代格式(4.4)就是用切线式(4.5)的零点来代替曲线(1.1)的零点。正因为如此,牛顿法也称为切线法。

牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。一般来说,牛顿法对初值0x 的要求较高,初值足够靠近*x 时才能保证收敛。若要保证初值在较大范围内收敛,则需对)(x f 加一些条件。如果所加的条件不满足,而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式:

)

(')(1k k k k x f x f x x λ-=+, ,2,1,0=k (4.6) 式中,10<<λ,称为下山因子。因此,用这种方法求方程的根,也称为牛顿下山法。 牛顿法对单根收敛速度快,但每迭代一次,除需计算)(k x f 之外,还要计算)('k x f 的值。如果)(x f 比较复杂,计算)('k x f 的工作量就可能比较大。为了避免计算导数值,我们可用差商来代替导数。通常用如下几种方法:

(1) 割线法。如果用

1

1)()(----k k k k x x x f x f 代替)('k x f ,则得到割线法的迭代格式为:

)()

()(111k k k k k k k x f x f x f x x x x --+---= (4.7) (2) 拟牛顿法。如果用

)

())(()(1k k k k x f x f x f x f --- 代替)('k x f ,则得到拟牛顿法的迭代格式为:

))

(()()(121-+---=k k k k k k x f x f x f x f x x (4.8) (3) Steffenson 法。如果用

)

()())((k k k k x f x f x f x f -+ 代替)('k x f ,则得到拟牛顿法的迭代格式为:

)

())(()(21k k k k k k x f x f x f x f x x -+-=+ (4.9)

4.2 程序与实例

1. 牛顿法的程序

给定初值0p ,用牛顿法格式)

(')(111

---=k k k k p f p f p p , ,2,1=k ,求解非线性方程0)(=x f 。

**************************************************************************

newton(f1041,df1041,p0,delta,max1)

% f1041是非线性函数。

% function [p1,err,k,y] =df1041是f1041的微商。

% p0是初始值。

% delta 是给定允许误差。

% max1是迭代的最大次数。

% p1是牛顿法求得的方程的近似解。

% err 是p0的误差估计。

% k 是迭代次数。

% y = f(p1)

p0, feval('f1041',p0)

for k = 1:max1

p1 = p0 - feval('f1041', p0)/feval('df1041', p0);

err = abs(p1-p0);

p0 = p1;

p1, err, k, y = feval('f1041', p1)

if (err < delta) | (y == 0),

break,

end

p1, err, k, y = feval('f1041', p1)

end

****************************************************************************

例4.1 用上述程序求方程0233=+-x x 的一个近似解,给定初值为1.2,误差界为610-。

解:先用m 文件先定义二个名为f1041.m 和df1041.m 的函数文件。

function y = f1041(x)

y = x^3 – 3*x + 2;

function y=df1041(x)

y=3*x^2-3;

建立一个主程序prog1041.m

clear

newton('f1041','df1041',1.2, 10^(-6), 18)

然后在MATLAB 命令窗口运行上述主程序,即:

>> prog1041

计算结果如下。

p0 = 1.2000

ans = 0.1280

p1 = 1.1030

err = 0.0970

k = 1

y = 0.0329

p1 = 1.1030

err = 0.0970

k = 1

y = 0.0329

p1 = 1.0524

err = 0.0507 k = 2

y = 0.0084

p1 = 1.0524 err = 0.0507 k = 2

y = 0.0084

p1 = 1.0264 err = 0.0260 k = 3

y = 0.0021

p1 = 1.0264 err = 0.0260 k = 3

y = 0.0021

p1 = 1.0133 err = 0.0131 k = 4

y = 5.2963e-004 p1 = 1.0133 err = 0.0131 k = 4

y = 5.2963e-004 p1 = 1.0066 err = 0.0066 k = 5

y = 1.3270e-004 p1 = 1.0066 err = 0.0066 k = 5

p1 = 1.0033 err = 0.0033

k = 6

y = 3.3211e-005 p1 = 1.0033 err = 0.0033

k = 6

y = 3.3211e-005 p1 = 1.0017 err = 0.0017

k = 7

y = 8.3074e-006 p1 = 1.0017 err = 0.0017

k = 7

y = 8.3074e-006 p1 = 1.0008 err = 8.3157e-004 k = 8

y = 2.0774e-006 p1 = 1.0008 err = 8.3157e-004 k = 8

y = 2.0774e-006 p1 = 1.0004 err = 4.1596e-004 k = 9

y = 5.1943e-007 p1 = 1.0004

k = 9

y = 5.1943e-007 p1 = 1.0002 err = 2.0802e-004 k = 10

y = 1.2987e-007 p1 = 1.0002 err = 2.0802e-004 k = 10

y = 1.2987e-007 p1 = 1.0001 err = 1.0402e-004 k = 11

y = 3.2468e-008 p1 = 1.0001 err = 1.0402e-004 k = 11

y = 3.2468e-008 p1 = 1.0001 err = 5.2014e-005 k = 12

y = 8.1170e-009 p1 = 1.0001 err = 5.2014e-005 k = 12

y = 8.1170e-009 p1 = 1.0000 err = 2.6008e-005 k = 13

p1 = 1.0000 err = 2.6008e-005 k = 13

y = 2.0293e-009 p1 = 1.0000 err = 1.3004e-005 k = 14

y = 5.0732e-010 p1 = 1.0000 err = 1.3004e-005 k = 14

y = 5.0732e-010 p1 = 1.0000 err = 6.5020e-006 k = 15

y = 1.2683e-010 p1 = 1.0000 err = 6.5020e-006 k = 15

y = 1.2683e-010 p1 = 1.0000 err = 3.2510e-006 k = 16

y = 3.1708e-011 p1 = 1.0000 err = 3.2510e-006 k = 16

y = 3.1708e-011 p1 = 1.0000

k = 17

y = 7.9270e-012

p1 = 1.0000

err = 1.6255e-006

k = 17

y = 7.9270e-012

p1 = 1.0000

err = 8.1277e-007

k = 18

y = 1.9817e-012

ans = 1.0000

这说明,经过18次迭代得到满足精度要求的值。

2. 割线法的MATLAB实现

**************************************************************************** function [p1, err, k, y] = secant(f1042, p0, p1, delta, max1)

% f1042是给定的非线性函数。

% p0,p1为初始值。

% delta为给定误差界。

% max1是迭代次数的上限。

% p1为所求得的方程的近似解。

% err为p1-p0的绝对值。

% k为所需的迭代次数。

% y=f(p1)

p0, p1, feval('f1042', p0), feval('f1042',p1), k = 0;

for k = 1:max1

p2 = p1 - feval('f1042',p1)*(p1-p0)/(feval('f1042',p1) - feval('f1042',p0));

err = abs(p2-p1);

p0 = p1;

p1 = p2;

p1, err, k, y = feval('f1042', p1);

if (err < delta) | (y == 0),

break,

end

end

******************************************************************************

例4.2 用上述程序求方程023=+-x x 的一个近似解,给定初值为-1.5,-1.52, 误差界为610-。

解:先用m 文件先定义一个名为f1042.m 的函数文件。

function y = f1042(x)

y = x^3 – x + 2;

建立一个主程序prog1042.m

clc

clear

secant('f1042',-1.5,-1.52,10^(-6),11)

然后在MATLAB 命令窗口运行上述主程序,即:

>> prog1042

计算结果如下。

p0 = -1.5000

p1 = -1.5200

ans = 0.1250

ans = 0.0082

p1 = -1.5214

err = 0.0014

k = 1

p1 = -1.5214

err = 2.2961e-005

k = 2

p1 = -1.5214

err = 2.4318e-008

k = 3

ans = -1.5214

这就表明,经过3次迭代得到满足精度要求的的近似解-1.5214。

非线性方程数值解法及其应用

非线性方程数值解法及其应用 摘要:数值计算方法主要研究如何运用计算机去获得数学问题的数值解的理论和算法。 本文主要介绍非线性方程的数值解法以及它在各个领域的应用。是直接从方程出发,逐步缩小根的存在区间,或逐步将根的近似值精确化,直到满足问题对精度的要求。我将从二分法、Steffensen 加速收敛法、Newton 迭代法、弦截法来分析非线性方程的解法及应用。 关键字:非线性方程;二分法;Steffensen 加速收敛法;代数Newton 法;弦截法 一、前言 随着科技技术的飞速发展,科学计算越来越显示出其重要性。科学计算的应用之广已遍及各行各业,例如气象资料的分析图像,飞机、汽车及轮船的外形设计,高科技研究等都离不开科学计算。因此经常需要求非线性方程 f(x) = O 的根。方程f(x) = O 的根叫做函数f(x)的零点。由连续函数的特性知:若f(x)在闭区间[a ,b]上连续,且f(a)·f(b)

非线性方程的解法

20世纪60年代中期以后,发展了两种求解非线性方程组(1)的新方法。一种称为区间迭代法或称区间牛顿法,它用区间变量代替点变量进行区间迭代,每迭代一步都可判断在所给区间解的存在惟一性或者是无解。这是区间迭代法的主要优点,其缺点是计算量大。另一种方法称为不动点算法或称单纯形法,它对求解域进行单纯形剖分,对剖分的顶点给一种恰当标号,并用一种有规则的搜索方法找到全标号单纯形,从而得到方程(1)的近似解。这种方法优点是,不要求f(□)的导数存在,也不用求逆,且具有大范围收敛性,缺点是计算量大 编辑摘要 目录 ? 1 正文 ? 2 牛顿法及其变形 ? 3 割线法 ? 4 布朗方法 ? 5 拟牛顿法 ? n个变量n个方程(n >1)的方程组表示为 (1) 式中?i(x1,x2,…,x n)是定义在n维欧氏空间R n的开域D上的实函数。若?i中至少有一个非 线性函数,则称(1)为非线性方程组。在R n中记?= 则(1)简写为?(尣)=0。若存在尣*∈D,使?(尣*)=0,则称尣*为非线性方程组的解。方程组(1)可能有一个解或多个解,也可能有无穷多解或无解。对非线性方程组解的存在性的研究远不如线性方程组那样成熟,现有的解法也不象线性方程组那样有效。除极特殊的方程外,一般不能用直接方法求得精确解,目前主要采用迭代法求近似解。根据不同思想构造收敛于解尣*的迭代序列{尣k}(k=0,1,…),即可得到求解非线性方程组的各种迭代法,其中最著名的是牛顿法。 牛顿法基本思想是将非线性问题逐步线性化而形成如下迭代程序:

(2) 式中 是?(尣k)的雅可比矩阵,尣0是方程(1)的解尣*的初始近似。 这个程序至少具有2阶收敛速度。由尣k算到尣k+的步骤为:①由尣k算出?(尣k)及 ;②用直接法求线性方程组的解Δ尣k;③求 。 由此看到迭代一次需计算n个分量函数值和n2个分量偏导数值,并求解一次n阶线性方程组。 为了评价非线性方程组不同迭代法的优劣,通常用效率作为衡量标准,其中P为迭 代法的收敛阶,W为每迭代步计算函数值?i及偏导数值的总个数(每迭代步中求一次逆的工作量相同,均不算在W 内)。效率e越大表示此迭代法花费代价越小,根据效率定义, 牛顿法(2)的效率为。 牛顿法有很多变形,如当奇异或严重病态时,可引进阻尼因子λk,得到阻尼牛顿法,即

非线性方程组数值解法

非线性方程组数值解法 n个变量n个方程(n >1)的方程组表示为 (1) 式中?i(x1,x2,…,x n)是定义在n维欧氏空间R n的开域D上的实函数。若?i中至少有一个非 线性函数,则称(1)为非线性方程组。在R n中记?= 则(1)简写为?(尣)=0。若存在尣*∈D,使?(尣*)=0,则称尣*为非线性方程组的解。方程组(1)可能有一个解或多个解,也可能有无穷多解或无解。对非线性方程组解的存在性的研究远不如线性方程组那样成熟,现有的解法也不象线性方程组那样有效。除极特殊的方程外,一般不能用直接方法求得精确解,目前主要采用迭代法求近似解。根据不同思想构造收敛于解尣*的迭代序列{尣k}(k=0,1,…),即可得到求解非线性方程组的各种迭代法,其中最著名的是牛顿法。 牛顿法及其变形牛顿法基本思想是将非线性问题逐步线性化而形成如下迭代程序: (2) 式中

是?(尣k)的雅可比矩阵,尣0是方程(1)的解尣*的初始近似。 这个程序至少具有2阶收敛速度。由尣k算到尣k+的步骤为:①由尣k算出?(尣k)及 ;②用直接法求线性方程组的解Δ尣k;③求 。 由此看到迭代一次需计算n个分量函数值和n2个分量偏导数值,并求解一次n阶线性方程组。 为了评价非线性方程组不同迭代法的优劣,通常用效率作为衡量标准,其中P 为迭代法的收敛阶,W为每迭代步计算函数值?i及偏导数值的总个数(每迭代步中求一次逆的工作量相同,均不算在W内)。效率e越大表示此迭代法花费代价越小,根据效率定 义,牛顿法(2)的效率为。 牛顿法有很多变形,如当奇异或严重病态时,可引进阻尼因子λk,得到阻尼牛顿法,即

有限差分法求解偏微分方程MATLAB

南京理工大学 课程考核论文 课程名称:高等数值分析 论文题目:有限差分法求解偏微分方程姓名:罗晨 学号: 成绩: 有限差分法求解偏微分方程

一、主要内容 1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程: 22(,)()u u f x t t x αα??-=??其中为常数 具体求解的偏微分方程如下: 22001 (,0)sin()(0,)(1,)00 u u x t x u x x u t u t t π???-=≤≤?????? =??? ==≥??? 2.推导五种差分格式、截断误差并分析其稳定性; 3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析; 4.结论及完成本次实验报告的感想。 二、推导几种差分格式的过程: 有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。 推导差分方程的过程中需要用到的泰勒展开公式如下: ()2100000000()()()()()()()......()(()) 1!2!! n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+- (2-1) 求解区域的网格划分步长参数如下:

差分方程的解法分析及MATLAB实现(程序)

差分方程的解法分析及MATLAB 实现(程序) 摘自:张登奇,彭仕玉.差分方程的解法分析及其MATLAB 实现[J]. 湖南理工学院学报.2014(03) 引言 线性常系数差分方程是描述线性时不变离散时间系统的数学模型,求解差分方程是分析离散时间系统的重要内容.在《信号与系统》课程中介绍的求解方法主要有迭代法、时域经典法、双零法和变换域 法[1]. 1 迭代法 例1 已知离散系统的差分方程为)1(3 1)()2(81)1(43)(-+=-+--n x n x n y n y n y ,激励信号为)()4 3()(n u n x n =,初始状态为21)2(4)1(=-=-y y ,.求系统响应. 根据激励信号和初始状态,手工依次迭代可算出24 59)1(,25)0(==y y . 利用MATLAB 中的filter 函数实现迭代过程的m 程序如下: clc;clear;format compact; a=[1,-3/4,1/8],b=[1,1/3,0], %输入差分方程系数向量,不足补0对齐 n=0:10;xn=(3/4).^n, %输入激励信号 zx=[0,0],zy=[4,12], %输入初始状态 zi=filtic(b,a,zy,zx),%计算等效初始条件 [yn,zf]=filter(b,a,xn,zi),%迭代计算输出和后段等效初始条件 2 时域经典法 用时域经典法求解差分方程:先求齐次解;再将激励信号代入方程右端化简得自由项,根据自由项形 式求特解;然后根据边界条件求完全解[3].用时域经典法求解例1的基本步骤如下. (1)求齐次解.特征方程为081432=+-αα,可算出4 1 , 2121==αα.高阶特征根可用MATLAB 的roots 函数计算.齐次解为. 0 , )4 1()21()(21≥+=n C C n y n n h (2)求方程的特解.将)()4 3()(n u n x n =代入差分方程右端得自由项为 ?????≥?==-?+-1,)4 3(9130 ,1)1()43(31)()43(1n n n u n u n n n 当1≥n 时,特解可设为n p D n y )4 3()(=,代入差分方程求得213=D . (3)利用边界条件求完全解.当n =0时迭代求出25)0(=y ,当n ≥1时,完全解的形式为 ,)4 3(213 )41()21()(21n n n C C n y ?++=选择求完全解系数的边界条件可参考文[4]选)1(),0(-y y .根据边界条件求得35,31721=-=C C .注意完全解的表达式只适于特解成立的n 取值范围,其他点要用 )(n δ及其延迟表示,如果其值符合表达式则可合并处理.差分方程的完全解为

用matlab实现线性常系数差分方程的求解

数字信号处理课程设计 题目:试实现线性常系数差分方程的求解 学院: 专业: 班级: 学号: 组员: 指导教师:

题目:用Matlab 实现线性常系数差分方程求解 一. 设计要求 1. 掌握线性常系数差分方程的求解 2. 熟练掌握Matlab 基本操作和各类函数调用 3. 结合Matlab 实现线性常系数差分方程的求解 二.设计原理 1.差分与差分方程 与连续时间信号的微分及积分运算相对应,离散时间信号有差分及序列求和运算。设有序列f(k),则称…,f(k+2),f(k+1),…,f(k -1),f(k -2),…为f(k)的移位序列。序列的差分可以分为前向差分和后向差分。一阶前向差分定义为 ()(1)()f k f k f k ?=+- (3.1—1) 一阶后向差分定义为 ()()(1)f k f k f k ?=-- (3.1—2) 式中Δ和Δ称为差分算子。由式(3.1—1)和式(3.1—2)可见,前向差分与后向差分的关系为 ()(1)f k f k ?=?- (3.1—3) 二者仅移位不同,没有原则上的差别,因而它们的性质也相同。此处主要采用后向差分,并简称其为差分。 由查分的定义,若有序列1()f k 、2()f k 和常数1a ,2a 则 1122112211221112221122[()()][()()][(1)(1)][()(1)][()(1)]()() a f k a f k a f k a f k a f k a f k a f k f k a f k f k a f k a f k ?+=+--+-=--+--=?+? (3.1—4) 这表明差分运算具有线性性质。 二阶差分可定义为 2()[()][()(1)]()(1) ()2(1)(2) f k f k f k f k f k f k f k f k f k ?=??=?--=?-?-=--+- (3.1—5) 类似的,可定义三阶、四阶、…、n 阶差分。一般地,n 阶差分

非线性方程的数值解法

非线性方程的数值解法

《计算方法》 期末论文 论文题目非线性方程的数值解法 学院 专业 班级 姓名 学号 指导教师 日期

目录 摘要 第1 章绪论 1.1 问题的提出和研究目的和意义 1.2 国内外相关研究综述 1.3 论文的结构与研究方法 第2 章非线性方程的数值解法 2.1 二分法 2.2 迭代法 2.3 迭代法的局部收敛性及收敛的阶 2.4 牛顿迭代法 2.5 牛顿法的改进 2.6 插值 摘要 数值计算方法,是一种研究解决数学问题的数值近似解方法,它的计算对象是那些。 在理论上有解而又无法用手工计算的数学问题。在科学研究和工程技术中都要用到各种计算方法。例如 在地质勘探、汽车制造、桥梁设计、天气预报和汉字设计中都有计算方法的踪影。本文讨论了非线

性方程的数值解法:非线性方程的二分法、迭代法原理、牛顿迭代法,迭代法的收敛性条件及适合非线性方程的插值法等等。 第1 章绪论 可以证明插值多项式L (x) n 存在并唯一。拉格朗日插值多项式的算法 step1.输入 插值节点控制数n 插值点序列 i i x , y i=0,1,…,n 要计算的函数点x。step2. FOR i =0,1,…,n i 制拉格朗日基函数序列问题的提出和研究目的和意义非线性方程的问题在工程实践中有很多用途 研究其数值解法是当前一个研究方向。目前已有相当一部分算法在广泛使用于工程实践中。非线性方程组和无约束最优化的数值解法 一直是数值优化领域中热门的研究课题。本文对传统的方法进行改进和提出新的算法 该算法不仅有重要的论价值,而且有很高的实用价值。例如在天体力学中,有如下Kepler 开普勒方程 x-t- sin x=0,0< <1,其中t 表示时间 x 表示弧度,行星运动的轨道x 是t 的函数。也就是说,对每个时刻i t 上述方程有唯一解i x ,运动轨道位置。 国内外相关研究综述随着科学技术的高速发展和计算机的广泛应用 求解形如F(x)=0 的非线性方程组问题越来越多的被提出来了 其中F 是的连续可微函数。例如非线性有限元问题、非线性断裂问题、弹塑性问题、电路问题、电子系统计算以及经济与非线性规划问题等都可转化为非线性方程组的求解问题。只要包含有未知函数及其导函数的非线性项的微分方程,无论是用差分方法或有限元方法,离散化

基于MATLAB的线性常系数差分方程求解.

数字信号处理课程设计 题目:基于MATLAB的线性常系数差分方程求解学院: 专业: 班级: 学号: 姓名: 指导教师:

目录 摘要 (1) 第一章背景 (3) 1.1 背景知识 (3) 1.2 《数字信号课程》特点 (3) 1.3 软件介绍 (4) 1.4 MATLAB及数字信号处理 (4) 第二章设计目的及要求 (6) 2.1 设计目的 (6) 2.2 课程设计的内容要求 (7) 2.2.1 设计要求 (7) 第三章设计任务 (8) 第四章设计原理 (9) 4.1 差分与差分方程 (9) 4.2 线性常系数差分方程 (14) 4.3 线性常系数差分方程的求解 (15) 第五章设计过程 (16) 5.1 用MATLAB求解差分方程 (16) 第六章设计代码及结果 (18) 6.1 MATLAB源程序 (18) 6.2 程序运行结果 (20) 6.3 比较结果总结 (24) 第七章收获与体会 (25) 致谢 (27) 参考文献 (28)

摘要 《数字信号处理》分析了数字信号处理课程的重要性及特点,为了帮助学生理解与掌握课程中的基本概念、基本原理、基本分析方法,提出了用MATLAB进行数字信号处理课程设计的思路,并阐述了课程设计的具体方法、步骤和内容。 MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,MATLAB功能强大、简单易学、编成效率高,深受广大科技工作者的喜爱,特别是MATLAB还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行语音信号分析、处理和设计。 线性常系数差分方程求解是数字信号处理课程中常出现的课题,也是现代科学中值得深入研究的一个课题 本文介绍了线性常系数差分方程的基本概念,论述了其求解方法,并用MATLAB具体实现了线性常系数差分方程的求解。 基于MATLAB的线性常系数差分方程求解主要是用MATLAB作为工具平台,设计中涉及到差分方程的递推求解以及用filter对系数向量的归一化等等。通过数字信号处理课程的理论知识的综合运用,从实践上初步实现对数字信号的处理。 关键字:MATLAB,线性常系数差分方程,数字信号处理。

matlab非线性方程求解

非线性方程的解法 1引言 数学物理中的许多问题归结为解函数方程的问题,即,0)(=x f (1.1) 这里,)(x f 可以是代数多项式,也可以是超越函数。若有数*x 为方程0)(=x f 的根,或称函数)(x f 的零点。 设函数)(x f 在],[b a 内连续,且0)()(

用同一个递推公式,反复校正这个初值,直到满足预先给定的精度要求为止。 对于迭代法,一般需要讨论的基本问题是:迭代法的构造、迭代序列的收敛性天收敛速度以及误差估计。这里,主要看看解方程迭代式的构造。 对方程(1.1),在区间],[b a 内,可改写成为: )(x x ?=(2.1) 取],[0b a x ∈,用递推公式: )(1k k x x ?=+, ,2,1,0=k (2.2) 可得到序列: ∞==0210}{,,,,k k k x x x x x (2.3) 当∞→k 时,序列∞=0}{k k x 有极限x ~,且)(x ?在x ~附近连续,则在式(2.2)两边极限,得, ) ~(~x x ?=即,x ~ 为方程(2.1)的根。由于方式(1.1)和方程(2.1)等价,所以,x x ~*=即, * lim x x k k =∞ →式(2.2)称为迭代式,也称为迭代公式;)(x ?可称为迭代函数。称求得的序列∞=0}{k k x 为迭代序列。 2.2程序和实例 下面是基于MATLAB 的迭代法程序,用迭代格式)(1n n x g p =+,求解方程)(x g x =,其中初始值为0p 。 **************************************************************************function[p,k,err,P]=fixpt(f1021,p0,tol,max1)%f1021是给定的迭代函数。%p0是给定的初始值。

非线性薛定谔方程数值解的MATLAB仿真

admin [非线性薛定谔方程数值解的MATLAB仿真]——利用分步快速傅里叶变换对光纤中光信号的传输方程进行数值求解

1、非线性薛定谔方程 非线性薛定谔方程(nonlinear Schrodinger equation ,NLSE)是奥地利物理学家薛定谔于1926 年提出的,应用在量子力学系统中。由于量子力学主要研究粒子的动力学运动状态,所以不能运用牛顿力学公式来表示。通常在量子力学中,研究系统的状态一般通过波函数(x ,t)来表示。而对波函数的研究主要是求解非线性薛定谔方程。本文主要研究光脉冲在光纤中传输状态下的演变。 一般情况下,光脉冲信号在光纤中传输时,同时受到光纤的色散和非线性效应的影响。通过Maxwell 方程,考虑到光纤的色散和非线性效应,可以推导出光信号在光纤中的传输方程,即非线性薛定谔方程。NLSE 是非线性偏微分方程,一般很难直接求出解析解,于是通过数值方法进行求解。具体分为两大类:(1)分布有限差分法(split-step finite differencemethod ,SSFD);(2)分步傅里叶变换法(split-step Fourier transform method ,SSFT)。一般情况,在达到相同精度,由于分步傅里叶变换法采用运算速度快的快速傅里叶变换,所以相比较有限差分法运算速度快一到两个数量级。于是本文介绍分步傅里叶变换法来对光纤中光信号的传输方程,即非线性薛定谔方程进行数值求解。并通过MATLAB 软件对结果数值仿真。 非线性薛定谔方程的基本形式为: 22||t xx iu u u u =+ 其中u 是未知的复值函数. 目前,采用分步傅立叶算法(Split step Fourier Method)求解非线性薛定谔方程的数值解应用比较多。分步傅立叶方法最早是在1937年开始应用的,这种方法己经被证明是相同精度下数值求解非线性薛定愕方程最快的方法,部分原因是它采用了快速傅立叶变换算法(FastFourier Transform Algorithm)。基于MATLAB 科学计算软件以及MATLAB 强大的符号计算功能,完全可以实现分步傅立叶数值算法来对脉冲形状和频谱进行仿真。 一般情况下,光脉冲沿光纤传播时受到色散和非线性效应的共同作用,假设当传输距离 很小的时候,两者相互独立作用,那么,根据这种思想可建立如下分步傅立叶数值算法的数 学模型: 把待求解的非线性薛定谔方程写成以下形式: ??()U D N U z ?=+? (I ) (II )

实验二微分方程与差分方程模型Matlab求解知识分享

实验二: 微分方程与差分方程模型Matlab 求解 一、实验目的 [1] 掌握解析、数值解法,并学会用图形观察解的形态和进行解的定性分析; [2] 熟悉MATLAB 软件关于微分方程求解的各种命令; [3] 通过范例学习建立微分方程方面的数学模型以及求解全过程; [4] 熟悉离散 Logistic 模型的求解与混沌的产生过程。 二、实验原理 1. 微分方程模型与MATLAB 求解 解析解 用MATLAB 命令dsolve(‘eqn1’,’eqn2’, ...) 求常微分方程(组)的解析解。其中‘eqni'表示第i 个微分方程,Dny 表示y 的n 阶导数,默认的自变量为t 。 (1) 微分方程 例1 求解一阶微分方程 21y dx dy += (1) 求通解 输入: dsolve('Dy=1+y^2') 输出: ans = tan(t+C1) (2)求特解 输入: dsolve('Dy=1+y^2','y(0)=1','x') 指定初值为1,自变量为x 输出: ans = tan(x+1/4*pi)

例2 求解二阶微分方程 221 ()0 4 (/2)2(/2)2/x y xy x y y y πππ '''++-=='=- 原方程两边都除以2x ,得211 (1)04y y y x x '''++-= 输入: dsolve('D2y+(1/x)*Dy+(1-1/4/x^2)*y=0','y(pi/2)=2,Dy(pi/2)=-2/pi','x') ans = - (exp(x*i)*(pi/2)^(1/2)*i)/x^(1/2) + (exp(x*i)*exp(-x*2*i)*(pi/2)^(3/2)*2*i)/(pi*x^(1/2)) 试试能不用用simplify 函数化简 输入: simplify(ans) ans = 2^(1/2)*pi^(1/2)/x^(1/2)*sin(x) (2)微分方程组 例3 求解 d f /d x =3f +4g ; d g /d x =-4f +3g 。 (1)通解: [f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g') f = exp(3*t)*(C1*sin(4*t)+C2*cos(4*t)) g = exp(3*t)*(C1*cos(4*t)-C2*sin(4*t)) 特解: [f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0,g(0)=1') f = exp(3*t)*sin(4*t) g = exp(3*t)*cos(4*t)

非线性方程的数值解法习题解答

第六章非线性方程的数值解法习题解答 填空题: 1. 求方程()x f x =根的牛顿迭代格式是__________________。 Ans:1()1()n n n n n x f x x x f x +-=- '- 2.求解方程 在(1, 2)内根的下列迭代法中, (1) (2) (3) (4) 收敛的迭代法是(A ). A .(1)和(2) B. (2)和(3) C. (3)和(4) D. (4)和(1) 3.若0)()(,故迭代发散。 以上三中以第二种迭代格式较好。 2、设方程()0f x =有根,且'0()m f x M <≤≤。试证明由迭代格式1()k k k x x f x λ+=- (0,1,2,)k =L 产生的迭代序列{}0k k x ∞ =对任意的初值0(,)x ∈-∞+∞,当2 0M λ<< 时,均收敛于方程的根。

非线性方程的数值解法

《计算方法》 期末论文 论文题目非线性方程的数值解法 学院 专业 班级 姓名 学号 指导教师 日期

目录 摘要 第1 章绪论 1.1 问题的提出和研究目的和意义 1.2 国内外相关研究综述 1.3 论文的结构与研究方法 第2 章非线性方程的数值解法 2.1 二分法 2.2 迭代法 2.3 迭代法的局部收敛性及收敛的阶 2.4 牛顿迭代法 2.5 牛顿法的改进 2.6 插值 摘要 数值计算方法,是一种研究解决数学问题的数值近似解方法,它的计算对象是那些。 在理论上有解而又无法用手工计算的数学问题。在科学研究和工程技术中都要用到各种计算方法。例如在地质勘探、汽车制造、桥梁设计、天气预报和汉字设计中都有计算方法的踪影。本文讨论了非线性方程的数值解法:非线性方程的二分法、迭代法原理、牛顿迭代法,迭代法的收敛性条件及适合非线性方程的插值法等等。

第1 章绪论 可以证明插值多项式L (x) n 存在并唯一。拉格朗日插值多项式的算法step1.输入插值节点控制数n插值点序列 i i x , y i=0,1,…,n要计算的函数点x。step2. FOR i =0,1,…,n i 制拉格朗日基函数序列问题的提出和研究目的和意义非线性方程的问题 在工程实践中有很多用途研究其数值解法是当前一个研究方向。目前已有相当一部分算法在广泛使用于工程实践中。非线性方程组和无约束最优化的数值解法一直是数值优化领域中热门的研究课题。本文对传统的方法进行改进和提出新的算法该算法不仅有重要的论 价值,而且有很高的实用价值。例如在天体力学中,有如下Kepler 开普勒方程x-t- sin x=0,0< <1,其中t 表示时间x 表示弧度,行星运动的轨道x 是t 的函数。也就是说,对每个时刻i t 上述方程有唯一解i x ,运动轨道位置。 国内外相关研究综述随着科学技术的高速发展和计算机的广泛应用求解形如F(x)=0 的非线性方程组问题越来越多的被提出来了 其中F 是的连续可微函数。例如非线性有限元问题、非线性断裂问题、弹塑性问题、电路问题、电子系统计算以及经济与非线性规划问题等都可转化为非线性方程组的求解问题。只要包含有未知函数及其导函数的非线性项的微分方程,无论是用差分方法或有限元方法,离散化后得到的方程组都是非线性方程组。与线性方程组相比,非线性方程组的求解问题无论在理论上还是在解法上都不如线性方程组成熟和 有效.例如,非线性方程组是否有解,有多少解,理论上都没有很好的

偏微分方程数值解法的MATLAB源码

[原创]偏微分方程数值解法的MATLAB源码【更新完毕】 说明:由于偏微分的程序都比较长,比其他的算法稍复杂一些,所以另开一贴,专门上传偏微分的程序谢谢大家的支持!其他的数值算法见:..//Announce/Announce.asp?BoardID=209&id=82450041、古典显式格式求解抛物型偏微分方程(一维热传导方程) function [U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C) %古典显式格式求解抛物型偏微分方程 %[U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C) % %方程:u_t=C*u_xx 0 <= x <= uX,0 <= t <= uT %初值条件:u(x,0)=phi(x) %边值条件:u(0,t)=psi1(t), u(uX,t)=psi2(t) % %输出参数:U -解矩阵,第一行表示初值,第一列和最后一列表示边值,第二行表示第2层…… % x -空间变量 % t -时间变量 %输入参数:uX -空间变量x的取值上限 % uT -时间变量t的取值上限 % phi -初值条件,定义为内联函数 % psi1 -边值条件,定义为内联函数 % psi2 -边值条件,定义为内联函数 % M -沿x轴的等分区间数 % N -沿t轴的等分区间数 % C -系数,默认情况下C=1 % %应用举例: %uX=1;uT=0.2;M=15;N=100;C=1; %phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0'); %[U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C); %设置参数C的默认值 if nargin==7 C=1; end %计算步长 dx=uX/M;%x的步长 dt=uT/N;%t的步长 x=(0:M)*dx; t=(0:N)*dt;

非线性方程的数值解法习题解答

填空题: 1. 求方程根的牛顿迭代格式是__________________。 Ans: 2.求解方程在(1, 2)内根的下列迭代法中, (1) (2) (3) (4) 收敛的迭代法是(A ). A .(1)和(2) B. (2)和(3) C. (3)和(4) D. (4)和(1) 3.若,则在内一定有根。 ( ) 4.用二分法求方程在区间[0,1]内的根,进行一步后根的所在区间为 ,进行两步后根的所在区间为 . (答案[,1], [,]) 计算题: 1、已知方程3210x x --=在 1.5x =附近有根,将方程写成以下三种不同的等价形式: ①2 11x x =+ ;②x =x = 试判断以上三种格式迭代函数的收敛性,并选出一种较好的格式。 解:①令121()1x x ?=+ ,则'132()x x ?=-,' 13 2(1.5)0.592611.5?=≈<,故迭代收敛; ②令2()x ?=2' 2 32 2()(1)3 x x x ?-=+,'2 (1.5)0.45581?≈<,故迭代收敛; ③令 3()x ?= ' 3()x ?=,'3 (1.5) 1.41421?≈>,故迭代发散。 以上三中以第二种迭代格式较好。 2、设方程()0f x =有根,且'0()m f x M <≤≤。试证明由迭代格式1()k k k x x f x λ+=- (0,1,2,)k =L 产生的迭代序列{}0k k x ∞ =对任意的初值0(,)x ∈-∞+∞,当2 0M λ<< 时,均收敛于方程的根。 证明:设()()x x f x ?λ=-,则''()1()x f x ?λ=-,故'1()1M x m λ?λ-<<-,进而可知, 当2 0M λ<< 时,'1()1x ?-<<,即'()1x ?<,从而由压缩映像定理可知结论成立。 3、试分别用Newton 法和割线法求以下方程的根 cos 0x x -=

第六章非线性方程的数值解法习题解答

第六章非线性方程的数值解法习题解答 填空题: 1. 求方程()x f x =根的牛顿迭代格式是__________________。 Ans:1()1()n n n n n x f x x x f x +-=- '- 2.求解方程 在(1, 2)内根的下列迭代法中, (1) (2) (3) (4) 收敛的迭代法是(A ). A .(1)和(2) B. (2)和(3) C. (3)和(4) D. (4)和(1) 3.若0)()(,故迭代发散。 以上三中以第二种迭代格式较好。 2、设方程()0f x =有根,且'0()m f x M <≤≤。试证明由迭代格式1()k k k x x f x λ+=- )

文本预览