求解非线性矩阵方程Xα+A*X-1A=Q的免逆迭代算法
- 格式:pdf
- 大小:127.25 KB
- 文档页数:3
遗传算法解决非线性规划问题的Matlab程序首先,让我们来了解一下什么是非线性规划问题。
非线性规划问题是指目标函数或约束条件中至少有一个是非线性函数的规划问题。
与线性规划问题不同,非线性规划问题的求解往往没有通用的解析方法,需要借助数值优化算法来找到最优解或近似最优解。
遗传算法是一种基于自然选择和遗传机制的随机搜索算法。
它模拟了生物进化的过程,通过对种群中个体的选择、交叉和变异操作,逐步优化个体,从而找到问题的最优解。
在解决非线性规划问题时,遗传算法将问题的解编码为染色体,通过适应度函数来评估染色体的优劣,然后通过遗传操作不断进化种群,直到找到满意的解。
接下来,我们开始介绍如何在 Matlab 中实现遗传算法来解决非线性规划问题。
首先,我们需要定义问题的目标函数和约束条件。
假设我们要解决的非线性规划问题是:\\begin{align}&\min f(x) = x_1^2 + x_2^2 2x_1x_2 + 2x_1 4x_2 + 5\\&\text{st } x_1 + x_2 \leq 5\\&-2 \leq x_1 \leq 2\\&-3 \leq x_2 \leq 3\end{align}\在 Matlab 中,我们可以定义目标函数如下:```matlabfunction f = objective(x)f = x(1)^2 + x(2)^2 2x(1)x(2) + 2x(1) 4x(2) + 5; end```约束条件可以通过定义一个函数来判断:```matlabfunction c, ceq = constraints(x)c =;ceq =;if x(1) + x(2) > 5c = x(1) + x(2) 5;endend```然后,我们需要设置遗传算法的参数。
这些参数包括种群大小、最大迭代次数、交叉概率、变异概率等。
```matlabpopSize = 50; %种群大小maxGen = 100; %最大迭代次数pc = 08; %交叉概率pm = 01; %变异概率```接下来,我们需要对个体进行编码。
一、引言在数值计算中,求解非线性方程是一项常见的任务。
牛顿迭代法是一种常用且有效的方法,它通过不断逼近函数的零点来求解方程。
而在MATLAB中,我们可以利用其强大的数值计算功能来实现牛顿迭代法,快速求解各种非线性方程。
二、牛顿迭代法原理与公式推导1. 牛顿迭代法原理牛顿迭代法是一种利用函数的导数信息不断逼近零点的方法。
其核心思想是利用当前点的切线与x轴的交点来更新下一次迭代的值,直至逼近方程的根。
2. 公式推导与迭代过程假设要求解方程f(x)=0,在初始值x0附近进行迭代。
根据泰勒展开,对f(x)进行一阶泰勒展开可得:f(x) ≈ f(x0) + f'(x0)(x - x0)令f(x)≈0,则有:x = x0 - f(x0)/f'(x0)将x带入f(x)的表达式中,即得到下一次迭代的值x1:x1 = x0 - f(x0)/f'(x0)重复以上过程,直至达到精度要求或者迭代次数上限。
三、MATLAB中的牛顿迭代法实现1. 编写函数在MATLAB中,我们可以编写一个函数来实现牛顿迭代法。
需要定义原方程f(x)的表达式,然后计算其一阶导数f'(x)的表达式。
按照上述推导的迭代公式,编写循环语句进行迭代计算,直至满足精度要求或者达到最大迭代次数。
2. 调用函数求解方程在编写好牛顿迭代法的函数之后,可以通过在MATLAB命令窗口中调用该函数来求解具体的方程。
传入初始值、精度要求和最大迭代次数等参数,即可得到方程的近似根。
四、牛顿迭代法在工程实践中的应用1. 求解非线性方程在工程领域,很多问题都可以转化为非线性方程的求解问题,比如电路分析、控制系统设计等。
利用牛顿迭代法可以高效地求解这些复杂方程,为工程实践提供了重要的数值计算手段。
2. 优化问题的求解除了求解非线性方程外,牛顿迭代法还可以应用于优化问题的求解。
通过求解目标函数的导数等于0的方程,可以找到函数的极值点,从而解决各种优化问题。
一:非线性方程的基本迭代方法简单迭代法非线性方程的一般形式f(x)=0 其中f(x)是一元非线性函数。
若存在常数s 使f(s)=0,则称s 是方程的根。
把方程转化为其等价的方程)(x x ϕ=,因而有)(s s ϕ=。
选定s 的初始近似值0x ,用迭代公式)(1k k x x ϕ=+,得到}{k x 收敛于s ,就求出了方程的解。
收敛性:)(s s ϕ=,)(x ϕ'在包含s 的某个开区间内连续。
如果|)(x ϕ'|<1则存在δ>0,0x ∈[s-δ,s+δ]时,由该迭代函数产生的迭代法收敛。
收敛速度:(}{k x 收敛于s ,k e 为s 与k x 的差值绝对值,则c e e r k k k =+∞→1lim,c 是常数,则该迭代是r 阶收敛)Newton 法为了使迭代的收敛速度更快,应尽可能使)(x ϕ在s 处有更多阶的导数等于零。
令)(x ϕ=)()(x f x h x +,)(x h 为待定函数,已知)(s ϕ'=0,推出)(x h =)(1x f '-。
这就得出了牛顿法的迭代形式 )()(1k k k k x f x f x x '-=+,(k=0、1、···) 牛顿法是二阶收敛的迭代方法,但是牛顿法的是局部收敛的,因此要求初值要靠近根。
求解中,对于每一个k 都要计算)(k x f ',而导数的计算比较麻烦,否则会产生很大误差。
割线法 在牛顿法基础上,用11)()(----k k k k x x x f x f 来代替)(k x f ',其中1-x 、0x 预先给定。
得到了割线法的迭代形式 )()())((111--+---=k k k k k k k x f x f x x x f x x ,(k=0、1、···) 割线法的收敛速度至少为1.618这样就避免了牛顿法求导数的繁琐程序单点割线法单点割线法就是在割线法的基础上,用))(,(00x f x 代替))(,(11--k k x f x ,得到的迭代形式 )()()(001k k k k k x f x f x f x x x x ---=+,(k=1、2、···) 单点割线法是一阶收敛的方法,它比割线法初值要少取一个点更加容易选取初值二:非线性方程的迭代解法的拓展修正的Chebyshev 法思想:将函数)(x f 在k x 处进行泰勒展开既 +-''+-'+≈!2)()())(()()(2k k k k k x x x f x x x f x f x f ,如果)(x f ≠0,先取线性部分来代替原来函数,既)(x f =)(k x f +))((k k x x x f -'=0,得到k x x -=)()(k k x f x f '-; 再用二次多项式部分代替原函数,既!2)()())(()()(2k k k k k x x x f x x x f x f x f -''+-'+==0,合并这两次的结果得到)()()))((2)()(1(2k k k k k k x f x f x f x f x f x x ''''⋅+-=,令1+=k x x ,得到就得到了新的迭代公式,这就是Chebyshev 方法的思想,该方法的迭代公式具有三阶收敛速度。
解非线性方程是方法主要有:增量法、迭代法、增量迭代混合法。
几何非线性有限元方法:1、完全的拉格朗日列式法(T.L.Formulation)在整个分析过程中,以t=0时的位形作为参考,且参考位形保持不变,这种列式称为完全的拉格朗日列式(T.L法)对于任意应力-应变关系与几何运动方程,杆系单元的平衡方程可由虚功原理推导得到:式(1)式中各量分别为:应变矩阵,是单元应变与节点位移的关系矩阵;单元的应力向量;杆端位移向量;V是单元体积分域,对T.L列式,是变形前的单元体积域;单元杆端力向量;直接按上式建立单元刚度方程并建立结构有限元列式,称为全量列式法。
在几何非线性分析中,按全量列式法得到的单元刚度矩阵和结构刚度矩阵往往是非对称的,对求解不利,因此多采用增量列式法。
将式(1)写成微分形式变形后得:式(2)这就是增量形式T.L列式的单元平衡方程。
式中为:单元弹性刚度矩阵、单元初位移刚度矩阵或单元大位移刚度矩阵、初应力刚度矩阵、三个刚度矩阵之和,称为单元切线刚度矩阵。
2、修正的拉格朗日列式法(U.L.Formulation)在建立t+∆t时刻物体平衡方程时,如果我们选择的参照位形不是未变形状态t=0时的位形,而是最后一个已知平衡状态,即本增量步起始的t时刻位形为参照位形,这种列式法称为修正的拉格朗日列式法(U.L列式)。
增量形式的U.L列式结构平衡方程可写成:式(3)3、T.L列式与U.L列式的比较T.L列式与U.L列式是不同学派用不同的简化方程及理论导出的不同方法,但是它们在相同的荷载增量步内其线性化的切线刚度矩阵应该相同,这一点已得到多个实际例题的证明。
T.L列式与U.L列式的不同点比较内容| T.L列式| U.L列式| 注意点计算单刚的积分域| 在初始构形的体积域内进行| 在变形后的t时刻体积域内进行| U.L列式必须保留节点坐标值精度| 保留了刚度阵中所有线性与非线性项| 忽略了高阶非线性| U.L列式的荷载增量不能过大单刚组集成总刚| 用初始时刻各单元结构总体坐标系中的方向余弦形成转换阵,计算过程不变| 用变形后t时刻单元在结构总体坐标中的方向余弦形成转换阵,计算过程中不断改变| U.L列式中组集荷载向量也必须注意方向余弦的改变本构关系的处理| 在大应变时,非线性本构关系不易引入| 比较容易引入大应变非线性本构关系| U.L方法更适用于混凝土徐变分析从理论上讲,这这两种方法都可以用于各种几何非线性分析。
《MATLAB 程序设计实践》课程考核1、编程实现以下科学计算算法,并举一例应用之.(参考书籍《精通MALAB科学计算》,王正林等著,电子工业出版社,2009年)“不动点迭代法和牛顿法非线性方程组求解”(1).不动点迭代法非线性方程组求解(a).算法说明:设含有n个未知数与n个方程的非线性方程组记为:F(x)=0,然后把上述方程组改为便于迭代的等价形式:x=φ(x),由此就可以构造不动点迭代法的迭代公式:}满足,则就是φ的不动点,这样就可以求出非线性方程组的解.如果得到的序列{xk在MATLAB中编程实现的非线性方程组的不动点迭代法的函数为:mulStablePoint。
功能:用不动点迭代法求非线性方程组的一个解。
调用格式:[r,n]=mulStablePoint(x0,eps).其中,x0为初始迭代向量;eps为迭代精度;r为求出的解向量;n为迭代步数。
(b)。
流程图:(c).源程序代码:function [r,n]=mulStablePoint(x0,eps) %不动点迭代法求非线性方程组的一个解%初始迭代向量:x0%迭代精度:eps%解向量:r%迭代步数:nif nargin==1eps=1。
0e-4;endr=myf(x0);n=1;tol=1;while tol>epsx0=r;r=myf(x0);%迭代公式tol=norm(r-x0);%注意矩阵的误差求法,norm为矩阵的欧几里德范数n=n+1;if(n〉100000) %迭代步数控制disp(’迭代步数太多,可能不收敛!’);return;endend举例说明:解:首先建立myf.m函数文件,输入以下内容:function f=myf(x)f(1)=0.5*sin(x(1))+0。
1*cos(x(2)*x(1))-x(1);f(2)=0.5*cos(x(1))-0.1*sin(x(2))—x(2);在MATLAB命令窗口中输入:(2)。
在科学与工程计算中,经常遇到求解非线性方程组的问题;非线性方程组在收敛速度及收敛性比线性方程组要差,特别对于非凸的非线性方程组,其求解更是困难。
下面简要介绍非线性方程组的三种解法——牛顿法、拟牛顿法、同伦算法,分析三种解法的适用性,并附Matlab 原程序。
(一)、牛顿迭代法迭代公式为:x k+1=x k-f(x k)/f'(x k);牛顿迭代法是解非线性方程组比较经典的方法,在局部收敛点附近是平方收敛的;但其解依赖于初始解,且迭代每一步都要计算f'(x k),不仅计算量大而且有时会发生计算困难。
(二)、拟牛顿迭代法拟牛顿法是为了解决求Jacobi矩阵时带来的困难,现已成为解决非线性方程组和最优化问题的最有效方法之一。
其迭代格式为:x(k+1)=x(k)-A k-1F(x(k))A k+1=A k+[(y k-A k s k)(y k-A k s k)T]/[(y k-A k s k)T s k]在一定条件下,计算H的序列是超收敛的,但稳定性较差,有时迭代效果不理想。
(三)、同伦算法同伦算法基本思想是从容易求解的方程组开始,逐步过渡到原方程组的求解,从而得到问题的解。
非线性方程组为:F(x)=0,其解为X*。
构造泛函 G:[0,1]XR n->R nG定义为:G(λ,x)=λ F(x)+(1-λ)[F(x)-F(x(0))]=F(x)+(λ-1)F(x(0))(其中:x(0)为任意给的初值,假定为λ函数(λ=0))对于λ的方程G(λ,x)=0,当λ=0时,0=G(0,x)=F(x)-F(x(0));x(0)是方程的解;当λ=1时,0=G(1,x)=F(x);x*是方程的解,即x(1)=x*基于这个思想我们最后可以得到如下关系式:x'(λ)=-[J(x(λ))]-1F(x(0)) ( 0<=λ<=1,对初始值x(0) )J为雅可比矩阵,由上面的式子,对λ在[0,1]上积分,就可得到x*=x(1)上面的非线性方程组问题就转化为数值积分问题。
非线性方程组迭代解法不动点法( unmovepoints.m)%非线性方程组的不动点法function [x,n]=unmovepoints(fun,x0,eps)if nargin<3eps=1e-3;endx1=feval(fun,x0);n=1;while(norm(x1-x0))>=eps x0=x1;x1=feval(fun,x0);n=n+1;if n>100000disp(' 无法收敛!');breakendendx=x1;Newton 迭代法( newtons.m)% 非线性方程组的Newton 迭代法function [x,n]=newtons(fun1,fun2,x0,eps)if nargin<4eps=1e-3;endx1=x0-feval(fun1,x0)/feval(fun2,x0);n=1;while norm(x1-x0)>=epsx0=x1;x1=x0-feval(fun1,x0)/feval(fun2,x0); n=n+1;if n>100000disp(' 无法收敛!');breakendendx=x1;注:方程组的迭代与方程迭代不同之处在于收敛的判断不能用 abs 而应用norm (范数,默认值为向量各元素的平方和的开方;norm(xl-xO)即为向量x1与x0对应元素差的平方和的开方。
在对应的函数程序中应注意向量的运算与数量运算的区别。
)用以上方法求解下列非线性方程组:f 1 X =x 1 - 0.7 sinx ! -0.2cosx 2 =0 f 2 X = x 2 - 0.7 cos% 0.2sinx 2 =0函数:%非线性方程组函数(适用于不动点法) function f=non li nerequsl(x) f(1)=0.7*si n(x(1))+0.2*cos(x (2)); f(2)=0.7*cos(x(1))-0.2*si n(x (2));%非线性方程组函数(适用于Newt on 迭代法) function f=non li nerequs2(x) f(1)=x(1)-0.7*si n(x(1))-0.2*cos(x(2)); f(2)=x (2)-0.7*cos(x(1))+0.2*si n(x (2));%非线性方程组函数导数(适用于Newt on 迭代法) function f=non li nerequs3(x) f=[1-0.7*cos(x(1)),0.2*si n(x(2));0.7*si n(x(1)),1+0.2*cos(x(2))];命令:fsolve(@ non li nerequs2,[0.5,0.5])[x,n]=unmo vepo in ts( @non li nerequs1,[0,0],1e-6)[x,n]=n ewt ons(@non li nerequs2, @non li nerequs3,[0,0],1e-6)计算结果:(eps=0.000001)迭代方法X迭代次数n解析解[0.52652262191818 0.50791971903685] - fsolve[0.52652266171295 0.50791973020932] - 不动点法[0.526521300913880.50792028463452] 30 Newton 迭代法[0.526522793690200.50791961189450]16导数为f 2 f 2对多方程则类似。
利用牛顿迭代法求解非线性代数方程组
利用牛顿迭代法求解非线性代数方程组
一、
问题描述
在实际应用的很多领域中,都涉及到非线性方程组的求解问
题。
由于方程的非线性,给我们解题带来一定困难。
牛顿迭代法是求解非线性方程组的有效方法。
下面具体对牛顿迭代法的算法进行讨论,并通过实例理解牛顿迭代法。
二、
算法基本思想
牛顿迭代法求解非线性代数方程组的主要思想是将非线性函
数线性化。
下面我们具体讨论线性化过程:
令:
00
,,2121n
n x x x x
x
f x f x
f x
F (3-1)
则非线性方程组(3-2)
,,
,0
,,,0,,,21212211n
n n n x x x f x x x f x x x f (3-2)
可写为向量形式
x
F (3-3)
0x
F 成为向量函数。
设k n
k k
x
x
x ,,,2
1是方程组(3-2)的一组近似解,把它的左端。