当前位置:文档之家› 非线性方程组的求解

非线性方程组的求解

非线性方程组的求解
非线性方程组的求解

非线性方程组的求解

摘要:非线性方程组求解是数学教学中,数值分析课程的一个重要组成部分,作为一门学科,其研究对象是非线性方程组。求解非线性方程组主要有两种方法:一种是传统的数学方法,如牛顿法、梯度法、共轭方向法、混沌法、BFGS 法、单纯形法等。传统数值方法的优点是计算精度高,缺点是对初始迭代值具有敏感性,同时传统数值方法还会遇到计算函数的导数和矩阵求逆的问题,对于某些导数不存在或是导数难求的方程,传统数值方法具有一定局限性。另一种方法是进化算法,如遗传算法、粒子群算法、人工鱼群算法、差分进化算法等。进化算法的优点是对函数本身没有要求,不需求导,计算速度快,但是精度不高。 关键字:非线性方程组、牛顿法、BFGS 法、记忆梯度法、Memetic 算法

1: 三种牛顿法:Newton 法、简化Newton 法、修改的Newton 法【1-3】 求解非线性方程组的Newton 法是一个最基本而且十分重要的方法, 目前使用的很多有效的迭代法都是以Newton 法为基础, 或由它派生而来。 n 个变量n 个方程的非线性方程组, 其一般形式如下:

???????===0),...,(...

0),...,(0),...,(21212211n n n n x x x f x x x f x x x f (1)

式(1)中,),...,(21n i x x x f ( i=1, ?, n) 是定义在n 维Euclid 空间Rn 中开域 D 上 的实值函数。若用向量记号,令:

????????????=n x x x ...X 21,????????????=??????????????====)(...)()(0),...,(...0),..,(0)...,()(2121212,211X f X f X f x x x f x x x f x x x f X F n

n n n n

则方程组(1)也可表示为:

0)(=X F (2)

其中:X ∈R n ,F ∶R n →R 0, F(X) ∈R n , R n 为赋值空间。一般地, 若在包含的某邻域

D 内, 按某种近似意义,用线性函数:

k k k b X A +=)X (l (3)

近似地代替向量值函数F(X),此处A k 是n 阶矩阵,则可将线性方程组:

k k k b X A +=)X (l (4)

的解作为非线性方程组( 2) 的近似解。

1.1 Newton 法[1]

Newton 法的迭代公式为:

,...2,1,0k )

-F(X )X )((X F'X X X k k k k k 1k =???=??+=+ (5)其中k 1k k X -X X +=?.

1.2 简化Newton 法[1]

尽管Newton 法具有较高的收敛速度,但在每一步迭代中,要计算n 个函数值f ,以及n 2个导数值f ′形成Jacobi 矩阵)('k X f ,而且要求)('k X f 的逆阵或者解一个n 阶线性方程组,计算量很大。为了减少计算量,在上述Newton 法中对一切k=0,1,2,...,取)('k X f 为.)('X f ,于是迭代公式修改为:

[]...2,1,0),X ()X ('X X k 1

k k 1k =-=-+k f f (6) 式( 5) 即为简化的Newton 法。该方法能使计算量大为减少,但却大大降低了收敛速度。简化的Newton 法的算法与Newton 法的算法区别就在于只由给定的初始近似值计算一次)('X f ,以后在每一次迭代过程中不再计算)('k X f ,保持初始计算值。

1.3 修正的Newton 法[2]

吸取Newton 法收敛快与简化的Newton 法工作量省的优点,文献【2】把m 步简化的Newton 步合并成一次Newton 步。则可以得到下列迭代程序: ??

???=-==+--m ,k 1k 1j ,k 1k j ,k j k,k k,0X X )X (f )X ('f X X X X (7)

式中: j=1, 2, ?, m, k=0, 1, 2, ?, 该式称为修正的Newton 法。

通过分析Newton 法、简化的Newton 法和修正Newton 法的原理, 并通过对算例的分析比较,我们可知: Newton 法(5)式具有较高的收敛速度,但计算量大,在每一步迭代中,要计算n 个函数值f ,以及n2个导数值f'形成Jacobi 矩阵

)('k X f ,

而且要求)('k X f 的逆阵或者解一个n 阶线性方程组;简化的Newton 法( 6) 式,它用迭代初值X 0来计算)('k X f ,并在每个迭代步中保持不变,它能使每步迭代过程的计算量大为减少,但大大降低了收敛速度。修正Newton 法(7)与Newton 法(5)相比,在每步迭代过程中增加计算n 个函数值,并不增加求逆次数,然而收敛速度提高了。

2: BFGS 法【4-6】

非线性方程组一般形式为:方程组(1)将其转化为一个全局优化问题。构造能量函数:)

()(n n

i i x x x X X f X ,...,),(2112==Φ∑=求非线性方程组解的问题就转化为求解能量函数极小值的问题。即给定一个充分小的实常数ε,搜索

(**2*1*,...,X n x x x =使得εφ<)(*X 则X *即是非线性方程组(1)对应的近似解。 2.1 BFGS 查分算法【4】

文献【4】将传统的BFGS 算法和查分算法有机融合,用来求解非线性方程组,效果显著,可以较为广泛地应用于非线性方程组的求解。BFGS 方法是由Broyden 、

Fletcher 、Goldfarb 和Shanno 等人在1970年提出的。它是一个拟牛顿方法,具有二次终止性、整体收敛性和超线性收敛性,且算法所产生的搜索方向是共轭的。BFGS 方法是一个有效的局部算法,用来求解极小值的。

例如方程组

???????===n n n n n A x x x f A x x x f A x x x f ),...,(...

),...,(),...,(2122121211 (8)

可将它够着适应度函数

∑=-=n i i i A x f X F 1|

)(|)( (9)

那么求非线性方程组(8)的根问题就转化成了求适应度函数)(X F 最小值的优化问题。这就是它最基本的思想。

DE 算法(差分进化算法)(文献【5】)具有良好的全局搜索能力,并具有对初始值、参数选择不敏感、鲁棒性强、原理简单、容易操作等优点,是一种较好的全局优化方法。但在优化后期DE 算法的收敛速度明显变慢,而且搜索结果仅获得满意解域而不是精确解。为了克服这些缺点,该文在DE 算法的进化后期阶段引入BFGS 方法,利用BFGS 方法的整体收敛性和超收敛性来加快收敛速度。BFGS 方法属于局部算法,其优化结果的优劣在很大程度上取决于初始值的选取,为此可以利用具有全局搜索能力的DE 算法提供给BFGS 方法良好的初始值。

2.2 改进的BFGS 变尺度法【4】

对于高维的大型问题(维数大于100),变尺度法由于收敛快、效果好,被认为是最好的优化方法之一。其中BFGS 法的数值稳定性较好,是最成功的一种变尺度法。BFGS 法中有2个非常关键的环节:求函数的偏导数和一维探索。这2个环

节的算法精度对最后结果的精度影响很大。

2.2.1 改进的遗传算法【7】

遗传算法的优越性主要表现在:算法具有固有的并行性,通过对种群的遗传处理可处理大量的模式,并且容易并行实现。

(a) 选择复制操作

采用保优操作与比例复制相结合, 即最优秀的个体被无条件保留下来,其余的以正比于个体适配值的概率来选择相应的个体。

(b) 交叉操作

采用保优操作与算数交叉结合,即最优秀的个体被无条件保留下来,其余的以交叉概率进行算数交叉。算数交叉的方式为:

1

22211)1(,)1(X X X X X X αααα-+=-+= (10) 式中21,1,0X X );(∈α为父代个体;X 1,X 2为后代个体。

(c )变异操作

采用保优操作与扰动变异结合,即最优秀的个体被无条件保留下来,其余的以变异概率进行扰动变异。扰动变异的方式为ηξ+=X X '。式中ξ为满足正态分布的随机扰动;η为尺度参数; X 为父代个体; X'为后代个体。

2.3 混合优化【7】

改进的BFGS 方法是一种非常有效而且收敛速度很快的局部搜索算法,而改进的遗传算法实现并行搜索,有非常强的全局搜索的能力。文献【7】将2种方法混合起来,实现了并行与串行,全局与局部的融合,极大地提高了优化性能、优化效率和鲁棒性.。尤其对于高维复杂函数效果非常好。

混合法的步骤为:

(1)给定算法参数,初始化种群。(2)评价当前种群中各个体。(3)判断算法收敛准则是否满足。若满足则输出搜索结果,否则转(4)。(4)执行改进的遗传算法的选择复制操作。(5)执行改进的遗传算法的交叉操作。(6)执行改进的遗传算法的变异操作。(7)以当前种群中各个个体作为改进的BFGS 方法的初始解,分别用改进的BFGS 方法进行搜索得到新的个体,将这些新的个体组成新的种群,转

(2)。

3: 记忆梯度法[8-10]

考虑非线性方程组

n R x x F ∈=,0)( ,

(11) 其中n n R R F →:是非线性映射。

定义T n x F x F x F x F ))(),...(),(()(21=,其雅可比矩阵J(X)。记忆梯度法(文献【8-9】)是求解无约束优化问题非常有效的方法,该方法在每步迭代时不需计算和存储矩阵,结构简单,因而适于求解大型优化问题。

算法的基本思想是: 首先将非线性方程组问题(12)转化为一个无约束极小化问题

n R x x f ∈),(min , (12) 其中2)(21)(x F x f =。 这里.采用二范数,然后利用记忆梯度法求解问题(13)。因为f( x) ≥ 0。所以如果x* 是无约束优化问题(12)的最优解,那么x * 必是非线性方程组(11) 的近似最优解。设f(X)的梯度为g(x),则g(x)=▽f(x)=J(x)F(x).求解无约束优化问题的记忆梯度法应用于求解非线性方程组,给出了一类新的求解非线性方程组的记忆梯度算法,并分析了算法的全局收敛性。该算法无需求雅克比矩阵的逆矩阵,

所以具有更广泛的应用性。此外,算法在迭代过程中也无需每一步都计算F(X) 的雅克比矩阵,大大减少了算法的计算量,节省了运算时间。与牛顿法相比,记忆梯度法更适于求解大规模非线性方程组。

4: 基于Memetic 算法的非线性方程组求解算法【11-12】

Memetic 算法是建立在模拟文化进化基础上的优化算法,它实质上是一种基于种群的全局搜索和基于个体的局部启发式搜索的结合体。Memetic 算法流程和GA 有很大的相似。其关键区别是Memetic 算法在交叉和变异后多了一个局部搜索优化的过程。针对函数优化问题,传统的遗传算法虽然能够全局寻优,但是它很容易早熟。对于传统的局部搜索算法,它一个初始解开始,在其邻域中搜寻比其更好的解,它可以快速求出较优解,其不足主要是只有当迭代初值在真实解附近时,其较快的局部搜索性能才能得以发挥。Memetic 算法充分吸收了遗传算法和传统局部搜索算法的优点,采用遗传算法的操作流程,但是在每次交叉和变异后进行局部搜索,通过优化种群分布及早剔除不良种群,进而减少迭代次数,在Memetic 算法的设计过程中各个参数的选择策略对算法求解结果具有重要的影响。

仍然以方程组(1)为例,现在定义:

∑==n i i X f

x f 12)()( (13)

则求解方程组( 1) 等价于求解这样一个极值优化问题: 若在方程组( 1) 的解空间内找到一组],...,[21n X X X X =,使得式(13)达到最小值则此时的],...,[21n X X X X = 就是方程组( 1) 的解。

总结文献【11】的算法大致思路:先初始化种群,看其是否满足停止准则,是的话显示结果,算法结束。否则的话,进行以下步骤:(1)适应度评价与选择。

(2)染色体多点交叉。(3)拟牛顿局部搜索。(4)染色体随机变异。(5)拟牛顿局部搜索。返回看是否满足停止准则,满足显示结果,不满足继续循环。

Memetic算法充分发挥了Memetic算法大范围搜索全局解的特点以及拟牛顿算子局部细致搜索的特点,对非单调多峰函数组成的非线性方程组,求到解的概率显著高于拟牛顿法和GA,实验表明基于Memetic算法求解非线性方程组具有较高的收敛可靠性和较高的精度。

综上,非线性方程组求解是实际工程领域的一个重要问题,在数值天气预报、石油地质勘探、计算生物化学、控制领域和轨道设计等方面均有较强的应用背景。从实际应用角度出发,有必要探索高效可靠的算法去求解,可以解决我们生活中的很多问题。

参考文献

[1]谢世坤,段芳,李强征,罗志扬,郑慧.非线性方程组求解的三种Newton法比较[J].井冈山学院学报( 自然科学),2006,27(8):8-11.

[2]余芝云,陈争,马昌凤.求解对称非线性方程组基于信赖域的修正牛顿法[J].福建师范大学学报( 自然科学版),2010,26(1):22-27.

[3]Li D H,Cheng W Y. Recent progress in the global convergence of quasi-Newton methods for nonlinear equations[J]. Hokkaido Math J,2007,36 ( 2) : 729-743.

[4]刘利斌,欧阳艾嘉,许卫明,李肯立.求解非线性方程组的BFGS差分进化算法[J].2011,47(33):55-58.

[5]周丽,姜长生.非线性方程组求解的一种新方法[J].小型微型计算机系统,2008,9:1709-1713.

[6]张飞飞,马群,黄家庆,佟晓君.求解非线性方程组的二分法[J].科技创新导报,2009,08(c):146-149.

[7]李涛,刘华伟,陈耀元.非线性方程组求解的新方法[J].武汉理工大学学报(交通科学与工程版),2009,33(3):569-572.

[8]李敏,苏醒,时贞.求解非线性方程组的记忆梯度算法[J]. 工程数学学报,2009,26(3):563-566.

[9]Shi Z J. A new super-memory gradient method for unconstrained optimization[J]. Advances in Mathematics,2006,3( 35) : 265-273.[10]陈长忆,叶永春.基于粒子群算法的非线性方程组求解[J].计算机应用与软件,2006,23(5):137-139.

[11]屈爱平,李敏.MEMETIC算法在非线性方程组求解中的应用[J].湖南文理学院学报(自然科学版),2009,21(4):13-15.

[12]Sudholt D.The impact of parametrization in memetic evolutionary algorithms[J] .Theoretical Computer Science, 2009, 26(410) : 2 511-2528.

非线性方程组的求解(汇编)

非线性方程组的求解 摘要:非线性方程组求解是数学教学中,数值分析课程的一个重要组成部分,作为一门学科,其研究对象是非线性方程组。求解非线性方程组主要有两种方法:一种是传统的数学方法,如牛顿法、梯度法、共轭方向法、混沌法、BFGS 法、单纯形法等。传统数值方法的优点是计算精度高,缺点是对初始迭代值具有敏感性,同时传统数值方法还会遇到计算函数的导数和矩阵求逆的问题,对于某些导数不存在或是导数难求的方程,传统数值方法具有一定局限性。另一种方法是进化算法,如遗传算法、粒子群算法、人工鱼群算法、差分进化算法等。进化算法的优点是对函数本身没有要求,不需求导,计算速度快,但是精度不高。 关键字:非线性方程组、牛顿法、BFGS 法、记忆梯度法、Memetic 算法 1: 三种牛顿法:Newton 法、简化Newton 法、修改的Newton 法【1-3】 求解非线性方程组的Newton 法是一个最基本而且十分重要的方法, 目前使用的很多有效的迭代法都是以Newton 法为基础, 或由它派生而来。 n 个变量n 个方程的非线性方程组, 其一般形式如下: ???????===0),...,(... 0),...,(0),...,(21212211n n n n x x x f x x x f x x x f (1) 式(1)中,),...,(21n i x x x f ( i=1, ?, n) 是定义在n 维Euclid 空间Rn 中开域 D 上 的实值函数。若用向量记号,令: ????????????=n x x x ...X 21,????????????=??????????????====)(...)()(0),...,(...0),..,(0)...,()(2121212,211X f X f X f x x x f x x x f x x x f X F n n n n n

推荐-Broyden方法求解非线性方程组的Matlab实现 精品

Broyden方法求解非线性方程组的Matlab实现 注:matlab代码来自网络,仅供学习参考。 1.把以下代码复制在一个.m文件上 function [sol, it_hist, ierr] = brsola(x,f,tol, parms) % Broyden's Method solver, globally convergent % solver for f(x) = 0, Armijo rule, one vector storage % % This code es with no guarantee or warranty of any kind. % % function [sol, it_hist, ierr] = brsola(x,f,tol,parms) % % inputs: % initial iterate = x % function = f % tol = [atol, rtol] relative/absolute % error tolerances for the nonlinear iteration % parms = [maxit, maxdim] % maxit = maxmium number of nonlinear iterations % default = 40 % maxdim = maximum number of Broyden iterations % before restart, so maxdim-1 vectors are % stored % default = 40 % % output: % sol = solution % it_hist(maxit,3) = scaled l2 norms of nonlinear residuals % for the iteration, number function evaluations, % and number of steplength reductions % ierr = 0 upon successful termination % ierr = 1 if after maxit iterations % the termination criterion is not satsified. % ierr = 2 failure in the line search. The iteration % is terminated if too many steplength reductions % are taken. % % % internal parameter: % debug = turns on/off iteration statistics display as % the iteration progresses

非线性方程求根

第七章 非线性方程求根 教学目的与要求: 理解二分法求根的思想;掌握二分法求解过程;了解二分法的优点和缺点。了解迭代法的基本思想,迭代法的收敛条件以及局部收敛性的定义;理解基本迭代法的迭代思路,收敛条件的产生与求证过程;掌握基本迭代法的迭代格式,收敛条件的应用以及局部收敛定理。 重点和难点:迭代法的基本思想,迭代法的收敛性 ■ 教学内容: 基本概念: 的零点; 的m 重零点。 )(x f )(x f 非线性方程的求根通常分为两个步骤:一是对根的搜索,二是根的精确化,求得根的足够精确的近似值。 求方程的有根区间有如下方法: (1)描图法。画出的简图,从曲线与)(x f y =x 轴交点的位置确定有根区间。 (2)解析法。根据函数的连续性、介值定理以及单调性等寻找有根区间。 § 1 二分法 分析二分法的基本原理 例1 用二分法求方程的一个正根,要求误差不超过. 01)(6=??=x x x f 2105.0?ק 2 迭代法及其收敛性 一、迭代法的定义 二、基本迭代法 定义:将方程改写成以下等价形式() x x ?=取定初始值0x ,由迭代公式1() (0,1,2,)n n x x n ?+==L 产生迭代序列{}n x 。显然,若{}n x 收敛于*x ,()x ?在*x 处连续,就有** 1lim lim ()()n n n n x x x ??+→∞→∞ ===x 即*x 是方程() x x ?=的解,从而也是0)(=x f 的解。故当充分大时,可取作为方程根的近似值。用迭代格式求得方程近似根的方法称为基本迭代法,n n x )(x ?称为迭代函数。由于收敛点*x 满足*()* x x ?=,故称*x 为)(x ?的不动点 例 求方程的一个实根,要求精确到六位小数。 032)(3 =??=x x x f 注意:把此方程转换成三种等价形式 ,32)(31+==x x x ?)3(2 1)(32?= =x x x ?, 3)(33??==x x x x ?三、迭代法的收敛条件

matlab求解非线性方程组及极值

matlab求解非线性方程组及极值 默认分类2010-05-18 15:46:13 阅读1012 评论2 字号:大中小订阅 一、概述: 求函数零点和极值点: Matlab中三种表示函数的方法: 1. 定义一个m函数文件, 2.使用函数句柄; 3.定义inline函数, 其中第一个要掌握简单函数编写, 二, 三中掌握一个。 函数的'常规'使用 有了函数了, 我们怎么用呢, 一种是直接利用函数来计算, 例如: sin(pi), 还有我们提到的mysqr(3)... 另一种是函数画图, 例如Plottools中提到的ezplot, ezsurf... 但是这也太小儿科了, 有没有想过定义函数后, 利用它来: 求解零点(即解f(x)=0方程), 最优化(求最值/极值点), 求定积分, 常微分方程求解等. 当然这里由于篇幅有限(空间快满了)以及这个只是'基础教程'的缘故, 只提及一些皮毛知识, 掌握这些后, 如果需要 你可以进一步学习. 解f(x)=0 已知函数求解函数值=0所表示的方程, Matlab中有两个函数可以做到, fzero和fsolve前者只能解一元方程, 后者可以解多元方程组, 不过基本使用形式上差不多: 解=fzero(函数, 初值, options) 解=fsolve(函数, 初值, options) 关于解: fzero给出的是x单值的解, fsolve给出的是解x可能处于的区间, 当然, 这个区间很窄. 关于'函数', 还记得前面提到的三种表示方法吧, 在这里都可以用, 记住就是: 如果直接使用函数名, 要用 单引号将它括起来, 而函数句柄, inline函数可以直接使用. 关于'初值': 电脑比较笨, 它寻找解的办法是尝试不同地x值, 摸索解在哪里, 所以我们一开始就要给它指 明从哪里开始下手, 初值这里, 可以只给它一个值, 让它在这个值附近找解, 也可以给它一个区间(区间用[下限,上限]这种方式表示), 它会在这个区间内找解. fzero的一些局限, 如果你给定的初值是区间, 而恰好函数在区间端点处同号, fzero会出错, 而如果你只给一个初值, fezro又有可能'走错方向', 例如给初值2让它解mysqr这个函数方程就出错了, FT! 寻找函数极值/最值 Matlab中也有两个函数可以做到, 是: fminbnd: 寻找一元函数极小值; fminsearch: 寻找多元函数极小值(当然一元也行). 别问我怎么没有找极大值的Matlab函数, 你把原函数取负数, 寻找它的极小值不就行了. 相关语法: x=fminbnd(函数, 区间起始值, 区间终止值) x=fminsearch(函数, 自变量初值)

非线性方程组求根的牛顿迭代法

二元非线性方程组求根的牛顿迭代法 摘要:本文根据一元函数的Taybr 公式和求解一元非线性方程的牛顿迭代法之间的关系,利用多元函数的Taybr 公式推导出了二元非线性方程组的牛顿迭代法;在此基础上,通过MA TLAB 仿真计算一个方程组的根来说明该方法是可行的。 关键词:牛顿迭代法;一元函数;二元函数; Taybr 公式; Matlab 0 引言 非线性方程()0f x =的数值解法有逐步搜索法、区间二分法、迭代法、牛顿 迭代法等, 那么, 对于对于非线性方程组(,)0 (,)0f x y g x y =??=?,其牛顿迭代法的迭代方 程是什么? 本文根据一元函数的Taybr 公式和一元非线性方程牛顿迭代法之间的关系,利用多元函数的Taybr 公式推导出了二元非线性方程组的牛顿迭代法,在此基础上利用推导出的二元非线性方程组求根的牛顿迭代法通过matlab 仿真计算出一个方程组的根,检验了所得方法的有效性。 1 基本定理、结论 定理1 (一元函数的Taybr 公式) 如果函数()f x 在含有0x 的某个开区间(,)a b 内具有直(1)n +阶的导数,则对任一(,)x a b ∈ ,有 ()2 0000000()()()()()()()...()()2!! n n n f x f x f x f x f x x x x x x x R x n '''=+-+-++-+ 其中()n R x = ()(1)10() ()1! n n f x x n ξ++-+,这里ξ是0x 与x 之间的某个值。 定理2 (二元函数的Taybr 公式) 设(,)z f x y =在点00(,)x y 的某一邻域内连续且有直到(1)n +阶的连续偏导数, 00(,)x k y k ++为此邻域内任一点,则有 2 000000001(,)(,)(,)(,)... 2!f x k y k f x y h k f x y h k f x y x y x y αααααααα???? ++=++++++ ? ?????

用割线法解非线性方程组

用割线法解非线性方程组 自动化学院1011203050 陈晓祺拟牛顿法解下列方程组 sin 1.0 cos 5.00 ) cos( 1.0 sin 5.0 2 2 11 2 1 1 = - -= -+ x x x x x x x 先将拟牛顿法的程序代码如下 Function[r,m]=mulVlineF,x0,A, eps) Format long; If nargin=3 Eps=1e-4; End X0=transpose(x0); X1=tanspose(x1); N=length(x0); Fx=subs(F,findsym(F),x0); Fx1=subs(F,findsym(F),x1); H=x0-x1; J=zeros(n,n); Xt=x1; Xt(1)=x0(1); J(:,1)=(subs(F,findsym(F),xt)-sbus(F,findsym(F),x1))/h(1); For i=2:n Xt=x1; Xt(1:i)=x0(1:i); Xt_m=xl; Xt_m(1:i-1)=x0(1:i-1); J(:,i)=(subs(F,findsym(F),xt)-sbus(F,findsym(F),xt_m))/h(1); End R=x1-inv(J)*fx1; M=1; Tol=1; While tol>eps X0=x1; X1=r; Fx=subs(F,findsym(F),x0); Fx1=subs(F,findsym(F),x1); H=x0-x1;

J=zeros(n,n); Xt=x1; Xt(1)=x0(1); J(:,1)=(subs(F,findsym(F),xt)-subs(F,findsym(F),x1))/h(1); For i=2:n Xt=x1; Xt(1:i)=x0(1:i); Xt_m=x1; Xt_m(1:i-1)x0(1:i-1); J(:,1)=(subs(F,findsym(F),xt)-subs(F,findsym(F),xt_m))/h(1); End R=x1-inv(J)*fx1; Tol=norm(r-x1); M=m+1; If(m>100000) Disp('fail'); Return; End End 然后直接调用该方法 Syms x y Z=[x^2+y^2-5;2*x-y-3]; [r,m]=mulline(z,[0 1],[4,3]) [r,m]=mulline(z,[-3 1],[4,3]) 得到解为(2,1)(0.4,-2.2)

Maab求解线性方程组非线性方程组

M a a b求解线性方程组非 线性方程组 The latest revision on November 22, 2020

求解线性方程组solve,linsolve例:A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1];%矩阵的行之间用分号隔开,元素之间用逗号或空格B=[3;1;1;0]X=zeros(4,1);%建立一个4元列向量 X=linsolve(A,B)diff(fun,var,n):对表达式fun中的变量var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式diff(F); %matlab区分大小写pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式 非线性方程求解 fsolve(fun,x0,options) 其中fun为待解方程或方程组的文件名; x0位求解方程的初始向量或矩阵; option为设置命令参数 建立文件: function y=fun(x) y=[x(1)*sin(x(1))*cos(x(2)), ... x(2) - *cos(x(1))+*sin(x(2))]; >>clear;x0=[,];fsolve(@fun,x0,optimset('fsolve'))注:...为续行符m文件必须以function 为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。 Matlab求解线性方程组AX=B或XA=B在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如:X=A\B表示求矩阵方程AX=B的解;X=B/A表示矩阵方程XA=B 的解。对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A 的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有:m=n 恰定方程,求解精确解;m>n 超定方程,寻求最小二乘解;m

5非线性方程求根习题课

非线性方程求根 一、证明:对任意初始值01,13x ?? ∈???? ,由不动点迭代12 k x k x -+=,k=0,1,2,…产生的序 列{}k x 都收敛于方程2x x -=在1,13?????? 的唯一 根p 。 若要求p 的近似值的误差不超过4 10 -(取初始值02 3x =),试估计迭代次数。 解:由()12k x k k x x ?-+==知迭代函数()2x x ?-= 对[]1/3,1x ∈,有 ()()()[][]1,1/30.5,0.79371/3,1x ???∈=????? 另外有 ()1/32ln 22ln 20.55011x x ?--'=-≤=< 由定理得本题证明部分。 为使解p 的近似值k x 的误差不超过410-,根据误 差估计式: 10,1k k L x p x x L -≤-- 令 4 10101k L x x L --<-,得k 应取为

10 4ln10ln 111.22ln x x L k L ---->≈ 取k=12可使近似解的误差不超过410- 二、证明: 设()x ?在[],a b 上连续可微,且()01x ?'<<, ()x x ?=在[],a b 上有根*x ,0[,]x a b ∈,但* 0x x ≠, 则由 ()1, 0,1,2...k k x x k ?+== 产生的迭代序列{}k x 单调收敛于* x 。 证明:因为()x x ?=在[],a b 上有根* x ,故有()**x x ?=, 设*0x x b <≤,则由 ()() * * 10x x x x ??-=-()()*00x x ?ξ'=- 及()01x ?'<<知 * * 100x x x x <-<- 于是 * 10x x x << 同理可得* * 211,,k k x x x x x x +<<<< ,因而{}0 k k x ∞ = 单调下降并以*x 为下界,所以lim k k x →∞ 存在,记为x 。 由()01x ?'<<知方程在[],a b 内的根是唯一的,显然有 x =*x 。所以 *lim k k x x →∞= 三、设函数()f x 的导数满足'0()m f x M <≤≤,x 任意,且0)(=x f 的根存在,证明:

Matlab求解线性方程组非线性方程组

求解线性方程组 solve,linsolve 例: A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1);%建立一个4元列向量 X=linsolve(A,B) diff(fun,var,n):对表达式fun中的变量var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式 diff(F); %matlab区分大小写 pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式 非线性方程求解 fsolve(fun,x0,options) 为待解方程或方程组的文件名;fun其中 x0位求解方程的初始向量或矩阵; option为设置命令参数 建立文件fun.m: function y=fun(x) y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))]; >>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve')) 注: ...为续行符 m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。Matlab求解线性方程组 AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如: X=A\B表示求矩阵方程AX=B的解; 的解。XA=B表示矩阵方程B/A=X. 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有: m=n 恰定方程,求解精确解; m>n 超定方程,寻求最小二乘解; m

非线性方程求根问题

计算机学院上机实践报告 一、目的 1.通过本实验,帮助加深对非线性方程求根方法的构造过程的理解; 2.能将各种方法编写为程序并上机实现; 3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。 二、容与设计思想 1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]的根。 2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛。 三、使用环境 1. 硬件环境 微型计算机(Intel x86系列CPU)一台 2. 软件环境 Windows2000/XP操作系统 VC++6.0或其它的开发工具。 四、核心代码及调试过程 1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]的根主要代码: void bisect(double a,double b,int max_B) { double root, ya,yb,yroot; int i,actual_B; ya=f(a);yb=f(b); if(ya*yb>0) { printf("method failed!\n"); exit(0); } for(i=1;i<=max_B;i++) { root=(a+b)/2;yroot=f(root); //取当前含根区间的中点 if(yroot==0) { a=root;b=root;} else if(yb*yroot>0) //取含根区间为[a,(a+b)/2]

{ b=root;yb=yroot;} Else //取含根区间为[(a+b)/2,b] { a=root;ya=yroot;} if(fabs(b-a)b)) { printf("re_select a proper initial value x0!\n"); exit(0); } if(fabs(x1-x0)

Broyden方法解非线性方程组

用Broyden 方法求解非线性方程 沈欢 北京大学工学院,北京100871 2011年10月26日 摘要 用Broyden 方法求解给定的非线性方程组。 1问题描述 用Broyden 方法计算非线性方程组(x 1+3)(x 32?7)+18=0 (1)sin (x 2e x 1?1)=0(2) 的解,取初始猜测为?→x 0 =(?0.5,1.4)T 。2问题分析 通过观察不难看出(0,1)点是方程的一个精确解。取初始猜测?→x 0=(?0.5,1.4)T 在精确解附近,可以用Broyden 方法求解。设:??????→F (x 1,x 2)=F 1(x 1,x 2)?→i +F 2(x 1,x 2)?→j 其中F 1(x 1,x 2)= (x 1+3)(x 32?7)+18;F 2(x 1,x 2)=sin (x 2e x 1?1)。3Broyden 算法 Broyden 算法类似于牛顿方法,它通过在已知的雅可比矩阵上加上一个修正项得到新的雅可比矩阵,从而避免了牛顿方法计算雅可比矩阵的复杂度。Broyden 算法如图一所示。Broyden 算法说明:a )初始迭代点取?→x 0 =(?0.5,1.4)T ;初始的雅可比矩阵的近似矩阵取为真实的雅可比矩阵,即:A =?F (?→x )= x 32?73(x 1+3)x 22cos (x 2e x 1?1)?x 2?e x 1cos (x 2e x 1?1)?e x 1 (3)1

图1:Broyden方法的算法简图 A0=?F(?→x)= ?4.256014.7000 0.83950.5996 (4) 取精度为10?8。并计算得到?→x1=[?0.0553,1.0281]T。 b)在每步迭代中用?→ x k和??→ x k?1来估计新的雅可比近似矩阵。 A k=A k?1+g k?A k?1.y k y k .y k ?y T k(5) 其中:g k=F(??→ x k?1)?F(?→ x k),y k=??→ x k?1??→ x k。 c)解线性方程 A k??→s=?F(?→ x k)(6)得到位移向量?→ x k,从而计算出新的迭代点; ??→ x k+1=?→ x k+?→s(7) 4计算结果 调用所编写的函数[roots,flag]=Broyden,得到结果roots=[0.0000,1.0000]T,flag=6。说明,当初值取?→x0=(?0.5,1.4)T时,经过6次迭代得到该非线性方程组满足精度要求的解x1=0.0000,x2=1.0000。与理论解比较,Broyden方法给出的结果非常准确,且迭代次数较少,收敛速度很高。 2

非线性方程求根

第二章非线性方程求根 线性方程是方程式中仅包含未知量的一次方项和常数项的方程,除此之外的方程都是非线性方程(nonlinear equation). 例如,大家熟知的“一元二次方程”就是一个非线性方程. 多元线性方程组的求解是数值计算领域的一个重要问题,在后续几章将专门讨论. 本章介绍求解非线性方程的数值方法,主要针对实数域,重点是单个非线性方程的求根问题. 2.1引言 2.1.1非线性方程的解 记要求解的单变量非线性方程为 f(x)=0(2.1) 其中函数f: ?→?. 一般而言,非线性方程的解的存在性和个数是很难确定的,它可能无解,也可能有一个或多个解. 例2.1 (非线性方程的解):分析下列非线性方程的解是否存在和解的个数. (1) e x+1=0. 此方程无解. (2) e?x?x=0. 此方程有一个解. (3) x2?4sinx=0. 此方程有两个解. (4) x3?6x2+5x=0. 此方程有三个解. (5) cosx=0. 此方程有无穷多个解. 在实际问题中,往往要求的是自变量在一定范围内的解,比如限定x∈[a,b]. 函数f一般为连续函数,则可记为f(x)∈C[a,b],C[a,b]表示区间[a,b]上所有连续实函数的集合. 假设在区间[a, b]上方程(2.1)的根为x?,也称x?为函数f(x)的零点. 方程的根可能不唯一,而且同一个根x?也可能是方程(2.1)的多重根. 定义2.1:对光滑函数f,若f(x?)=f′(x?)=?=f(m?1)(x?)=0,但f(m)(x?)≠0,则称x?为方程(2.1)的m重根. 当m=1时,即f(x?)=0,f′(x?)≠0时,称x?为单根. 对于多项式函数f(x),若x?为m重根,则f(x)可因式分解为 f(x)=(x?x?)m g(x) 其中g(x)也是多项式函数,且g(x?)≠0. 很容易验证,f(x?)=f′(x?)=?=f(m?1)(x?)=0,但f(m)(x?)≠0,即多项式方程重根的概念与定义2.1是一致的. 对一般的函数f,x?是方程(2.1)的重根的几何含义是,函数曲线在x?处的斜率为0,且在该点处与x轴相交. 非线性方程的一个特例是n次多项式方程(n≥2),根据代数基本定理可知,n次方程在复数域上有n个根(m重根计为m个根). 当n=1, 2时,方程的求解方法是大家熟知的. 当 n=3, 4时,虽然也有求根公式,但已经很复杂,在实际计算时并不一定适用. 当n≥5时,不存在一般的求根公式,只能借助数值求解方法来求根. 2.1.2问题的敏感性 根据问题敏感性的定义,这里需要考虑输入数据的扰动对方程的根有多大影响. 要分析敏感性首先应假设问题中的数据如何扰动,一种易于分析的情况是将非线性方程写成: f(x)=y 的形式,然后讨论y在0值附近的扰动造成的问题敏感性. 此时,求根问题变成了函数求值

c++求解非线性方程组的牛顿顿迭代法

牛顿迭代法c++程序设计 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数 #define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 //最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]);/ /计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符, 就可以由键盘向x0读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

第六章非线性方程组的迭代解法

第六章非线性方程组的迭代解法6.4 非线性方程组的数值解法 6.4.1 非线性方程组的不动点迭代法 6.4.2 非线性方程组的Newton法 6.4.3非线性方程组的Newton法

第六章非线性方程组的迭代解法 T n x f x f x f x F )) (),(),(()(21L =设含有n 个未知数的n 个方程的非线性方程组为 (6,4,1)其中为n 维列向量, 0)(=x F T n x x x x ),,(21L =6.4.1 非线性方程组的不动点迭代法 ),,2,1)((n i x f i L =中至少有一个是x 的非线性函数, 并假设自变量和函数值都是实数。多元非线性方程组 (6.4.1)与一元非线性方程f(x)=0具有相同的形式,可以与一元非线性方程并行地讨论它的迭代解法。例如不动点迭代法和Newton 型迭代法。但是,这里某些定理的证明较为复杂,我们将略去其证明。

第六章非线性方程组的迭代解法 T n x x x x x )) (,),(),(()(21???L =Φ=(6.4.2) 并构造不动点迭代法 L ,1,0),()()1(=Φ=+k x x k k (6.4.3) 把方程组(6.4.1)改写成下面便于迭代的等价形式: 的解。是方程组 从而的不动点,是迭代函数即满足连续函数.则的是自变量 是连续的,即且收敛, 若由此生成的序列对于给定的初始点)1.4.6()(),(,,,)(,),(),()(,*****2121)0(x x x x x x x x x x x x x x n n φφ???φ=L K {}k x *)(lim x x k k =∞ →

多元非线性方程组求解 牛顿--拉夫逊方法含matlab案例代码

多元非线性方程组求解 牛顿--拉夫逊方法含matlab 案例代码 牛顿迭代法可以推广到多元非线性方程组F(x)=0的情况,称为牛顿--拉夫逊方法 (Newton-Raphson method). 当 F(x)关于x 的 Jacobi 矩阵 J(x)=(?F/?x)可逆时, 有: 11()()k k k k x x J x F x +-=- 111122221 21 2 () n n n n n n f f f x x x f f f x x x J x f f f x x x ??????? ???????????????=???? ?????????????? 求解案例: 1、多元非线性方程组 2 1221122330560x x x x x ?++=??+-=?? 2、转换方程组F(x)=0 21122 211223356f x x F f x x x ?=++?=?=+-?? 3、求Jacobi 矩阵 J(x) 1 11 22221211 226()=255f f x x x J x f f x x x x x ?????????? ? ?=? ???+???? ?????? 4、取初始值 0=[1;1] x 5、进行迭代计算 11()()k k k k x x J x F x +-=- 6、matlab 程序代码 clear clc % 构造函数 F=@(x)[2*x(1)+3*x(2)^2+3;

x(1)^2+5*x(1)*x(2)-6]; % Jacobi矩阵 J=@(x)[2 6*x(2); 2*x(1)+5*x(2) 5*x(1)]; % 初始值 x0=[1;1]; % 迭代计算 for ci = 1:100 x1=x0-J(x0)^(-1)*F(x0); if sum(abs(x1-x0))<1e-6 x=x1; break end x0=x1; end disp(['迭代了:',num2str(ci),'次']) x

遗传算法解非线性方程

遗传算法解非线性方程组的Matlab程序 程序用MATLAB语言编写。之所以选择MATLB,是因为它简单,但又功能强大。写1行MATLAB程序,相当于写10行C++程序。在编写算法阶段,最好用MATLAB语言,算法验证以后,要进入工程阶段,再把它翻译成C++语言。 本程序的算法很简单,只具有示意性,不能用于实战。 非线性方程组的实例在函数(2)nonLinearSumError1(x)中,你可以用这个实例做样子构造你自己待解的非线性方程组。 %注意:标准遗传算法的一个重要概念是,染色体是可能解的2进制顺序号,由这个序号在可能解的集合(解空间)中找到可能解 %程序的流程如下: %程序初始化,随机生成一组可能解(第一批染色体) %1: 由可能解的序号寻找解本身(关键步骤) %2:把解代入非线性方程计算误差,如果误差符合要求,停止计算 %3:选择最好解对应的最优染色体 %4:保留每次迭代产生的最好的染色体,以防最好染色体丢失 %5: 把保留的最好的染色体holdBestChromosome加入到染色体群中 %6: 为每一条染色体(即可能解的序号)定义一个概率(关键步骤) %7:按照概率筛选染色体(关键步骤) %8:染色体杂交(关键步骤) %9:变异 %10:到1 %这是遗传算法的主程序,它需要调用的函数如下。 %由染色体(可能解的2进制)顺序号找到可能解: %(1)x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionS um); %把解代入非线性方程组计算误差函数:(2)functionError=nonLinearSumError1(x); %判定程是否得解函数:(3)[solution,isTrue]=isSolution(x,funtionError,solutionSumError); %选择最优染色体函数: %(4)[bestChromosome,leastFunctionError]=best_worstChromosome(fatherC hromosomeGroup,functionError); %误差比较函数:从两个染色体中,选出误差较小的染色体 %(5)[holdBestChromosome,holdLeastFunctionError]... % =compareBestChromosome(holdBestChromosome,holdLeastFunctionError,... % bestChromosome,leastFuntionError) %为染色体定义概率函数,好的染色体概率高,坏染色体概率低 %(6)p=chromosomeProbability(functionError); %按概率选择染色体函数: %(7)slecteChromosomeGroup=selecteChromome(fatherChromosomeGroup,p );

实验6_非线性方程求解

实验6 非线性方程求解 化工系 分0班 2010011805 亚清 【实验目的】 1、 掌握用MATLAB 软件求解非线性方程和方程组的基本用法,并对结果作初步分析; 2、 练习用非线性方程和方程组建立实际问题的模型并进行求解。 【实验容】 1、 题目1 分别用fzero 和fsolve 程序求方程 的所有根,准确到 ,取不同 的 初值计算,输出初值、根的近似值和迭代次数,分析不同根的收敛域;自己构造某个迭代公式(如 等)用迭代法求解,并自己编写牛顿法的程序进行求解和 比较。 【问题分析】 首先做定性分析,用MATLAB 做出y1=sinx ,y2=x^2/2的图像,研究零点的取值区间。程序如下: x=-3:0.01:5; y1=sin(x); y2=x.^2/2; plot(x,y1,x,y2) -3 -2-1012345 -20246 8101214y1=sinx y2=x 2/2 由图可见,原函数有两个零点,分别在[-0.5,0.5]和[1,2]。

【问题解答】 用MATLAB中fzero函数求解,程序如下: format long g opt=optimset('fzero'); opt=optimset(opt,'tolx',1e-10); [x,fv,ef,out]=fzero(inline('sin(x)-x^2/2'),[-0.5,0.5],opt) [x,fv,ef,out]=fzero(inline('sin(x)-x^2/2'),[1,2],opt) 运行后得到结果: x = 2.624e-014 fv = 2.622e-014 ef = 1 out = intervaliterations: 0 iterations: 7 funcCount: 9 algorithm: 'bisection, interpolation' message: 'Zero found in the interval [-0.5, 0.5]' x = 1.454 fv = 8.413e-011 ef = 1 out = intervaliterations: 0 iterations: 7 funcCount: 9 algorithm: 'bisection, interpolation' message: 'Zero found in the interval [1, 2]' 由此可得原方程共有两个根,x1=0,x2=1.454。 下面取不同的初值计算,输出初值、根的近似值和迭代次数,分析不同根的收敛域。 对于x1得到如下结果: 用fzero求解 -5 4.102e-013 12 -4.5 -7.077e-018 13 -4 -1.583e-011 12 -3.5 1.808e-016 12 -3 -6.844e-012 10 -2.5 5.283e-012 9 -2 5.09e-013 8 -1.5 8.828e-012 7 -1 -8.862e-011 6 -0.5 -1.814e-015 6 0 0 0 经试验,fzero函数x1的收敛域为[-5.015,0.737]。

线性回归方程——非线性方程转化为线性方程

线性回归方程——非线性方程转化为线性方程 例1.(2015·高考全国卷Ⅰ)某公司为确定下一年度投入某种产品的宣传费,需了解年宣传费x(单位:千元)对年销售量y(单位:t)和年利润z(单位:千元)的影响,对近8年的宣传费和年销售量数据作了初步处理,得到下面的散点图及一些统计量的值. 5631469 表中=,=. (I)根据散点图判断,与,哪一个适宜作为年销售量y关于年宣传费x的回归方程类型(给出判断即可,不必说明理由); (II)根据(I)的判断结果及表中数据,建立y关于x的回归方程; (III)已知这种产品的年利润z与x,y的关系为,根据(II)的结果回答下列问题: (i)年宣传费时,年销售量及年利润的预报值是多少? (ii)年宣传费为何值时,年利润的预报值最大? 附:对于一组数据,,…,,其回归直线的斜率和截距的最小二乘估计分别为:,. 【答案】(Ⅰ)适宜作为年销售量关于年宣传费的回归方程类型;(Ⅱ);(Ⅲ)(i)答案见解析;(ii)千元. 【解析】(I)由散点图可以判断,适宜作为年销售量关于年宣传费的回归方程类型. (II)令,先建立关于的线性回归方程,由于=68, ∴=563?68×=,∴关于的线性回归方程为, 因此关于的回归方程为. (III)(ⅰ)由(II)知,当=49时,年销售量的预报值=, 年利润z的预报值为. (ⅱ)根据(II)的结果知,年利润z的预报值, 所以当,即时,取得最大值. 故年宣传费为千元时,年利润的预报值最大. 例2.某地级市共有200000中小学生,其中有7%学生在2017年享受了“国家精准扶贫”政策,在享受“国家精准扶贫”政策的学生中困难程度分为三个等次:一般困难、很困难、特别困难,且人数之比为5:3:2,为进一步帮助

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