用MATLAB实现最速下降法

合集下载

matlab最速下降法求解二次凸函数的最小值

matlab最速下降法求解二次凸函数的最小值

matlab最速下降法求解二次凸函数的最小值1.引言1.1 概述概述:在数学和优化领域中,最速下降法是一种常用的优化算法,用于求解二次凸函数的最小值。

该算法通过迭代更新变量的值,以逐步靠近函数的最小值。

在本文中,我们将介绍最速下降法的原理和步骤,并探讨它在求解二次凸函数最小值中的应用。

最速下降法的核心思想是沿着目标函数梯度的反方向移动,以找到函数的最小值。

具体而言,算法从一个初始点开始,计算该点的梯度,并将其与一个步长因子相乘,得到一个移动的方向。

然后,根据这个方向更新变量的值,并重复此过程直到满足停止准则。

对于二次凸函数的最小值求解,最速下降法是一种有效且收敛性良好的方法。

二次凸函数是一种具有凸性和二次项的函数,它在数学和工程问题的建模中经常出现。

通过最速下降法,我们可以通过迭代计算逐步逼近二次凸函数的最小值。

本文主要目的是介绍最速下降法在求解二次凸函数最小值中的应用。

我们将详细讨论最速下降法的原理和步骤,并通过数学推导和示例说明其有效性和收敛性。

我们还将比较最速下降法与其他优化算法的优缺点,并总结结论。

通过本文的阅读,读者将能够了解最速下降法在求解二次凸函数最小值中的原理和应用。

这将有助于读者更好地理解最速下降法的优势和局限性,并为进一步研究和应用提供基础。

1.2文章结构2. 正文2.1 最速下降法的原理和步骤最速下降法是一种常用的优化算法,用于求解函数的最小值。

它基于函数的负梯度方向进行迭代,通过迭代更新自变量的值来逐步逼近最优解。

最速下降法的步骤如下:步骤1:选择初始点。

从问题的可行域内选择一个初始点作为最速下降法的起点。

步骤2:计算负梯度。

在当前点处,计算目标函数的负梯度,即函数在该点处的梯度乘以-1。

步骤3:确定步长。

寻找沿着负梯度方向移动的合适步长,使得目标函数的值能够得到较大的下降。

步骤4:更新自变量。

根据确定的步长,更新自变量的值。

步骤5:重复步骤2-步骤4。

不断迭代执行步骤2到步骤4,直到满足停止准则。

最速下降法

最速下降法

最速下降法姓名:沈东东 班级:研1404 学号:1415033005一、最速下降法的原理目标函数:(1)n f R R n →>在决策变量的当前点()k n x R ∈处的一阶Taylor 展开式为()()()()()()()k k k T f x f x g x δδοδ+=++式中,()()k n g x R ∈为f 在点()k x 处的梯度向量。

当扰动量n R δ∈充分小时,有()()()()()()k k k T f x f x g x δδ+≈+设新的迭代点为(1)()k k x x δ+=+,于是得到(1)()()()()()k k k T f x f x g x δ+-≈为了使(1)k x +处的目标函数值比()k x 处有所下降,需要满足()()0k T g x δ<此外,梯度向量()()k g x 和扰动量δ的内积可以表示为()()()()cos k T k g x g x δδθ=式中,θ为两向量之间的夹角。

若要使目标函数值的下降量尽可能大,可知δ的方向应该为梯度方向的负方向,即cos 1θ=-。

函数f 在点()k x 处的负梯度方向称为该点的最速下降方向。

在每次迭代时都取最速下降方向作为搜索方向的方法就称为最速下降法。

二、最速下降法的特点1.若()k x 不是极小点,则f 在点()k x 处的最速下降方向总是下降方向。

2.如果每次迭代时都用精确搜索方法得到最佳步长作为搜索步长,则寻优过程中相邻的最速下降方向是正交的。

3最速下降法产生的迭代点序列在一定条件下是线性收敛的,其收敛性质与极小点*x 处的Hesse 矩阵有关。

三、最速下降法的计算步骤最速下降法的计算步骤如下:步骤1:已知待求问题的目标函数()f x ,选择初始点(0)x ,并设定精度要求tol ,令:0k =。

步骤2:计算()f x 在点()k x 处的梯度向量()()k g x ,得到最速下降方向()()()k k d g x =-。

matlab数学实验

matlab数学实验

《管理数学实验》实验报告班级姓名实验1:MATLAB的数值运算【实验目的】(1)掌握MATLAB变量的使用(2)掌握MATLAB数组的创建,(3)掌握MA TLAB数组和矩阵的运算。

(4)熟悉MATLAB多项式的运用【实验原理】矩阵运算和数组运算在MA TLAB中属于两种不同类型的运算,数组的运算是从数组元素出发,针对每个元素进行运算,矩阵的运算是从矩阵的整体出发,依照线性代数的运算规则进行。

【实验步骤】(1)使用冒号生成法和定数线性采样法生成一维数组。

(2)使用MA TLAB提供的库函数reshape,将一维数组转换为二维和三维数组。

(3)使用逐个元素输入法生成给定变量,并对变量进行指定的算术运算、关系运算、逻辑运算。

(4)使用MA TLAB绘制指定函数的曲线图,将所有输入的指令保存为M文件。

【实验内容】(1)在[0,2*pi]上产生50个等距采样数据的一维数组,用两种不同的指令实现。

0:(2*pi-0)/(50-1):2*pi 或linspace(0,2*pi,50)(2)将一维数组A=1:18,转换为2×9数组和2×3×3数组。

reshape(A,2,9)ans =Columns 1 through 71 3 5 7 9 11 132 4 6 8 10 12 14Columns 8 through 915 1716 18reshape(A,2,3,3)ans(:,:,1) =1 3 52 4 6ans(:,:,2) =7 9 118 10 12 ans(:,:,3) =13 15 17 14 16 18(3)A=[0 2 3 4 ;1 3 5 0],B=[1 0 5 3;1 5 0 5],计算数组A 、B 乘积,计算A&B,A|B,~A,A= =B,A>B 。

A.*Bans=0 0 15 121 15 0 0 A&Bans =0 0 1 11 1 0 0 A|Bans =1 1 1 11 1 1 1~Aans =1 0 0 00 0 0 1A==Bans =0 0 0 01 0 0 0A>=Bans =0 1 0 11 0 1 0(4)绘制y= 0.53t e -t*t*sin(t),t=[0,pi]并标注峰值和峰值时间,添加标题y= 0.53t e -t*t*sint ,将所有输入的指令保存为M 文件。

最优化方法实验报告(2)

最优化方法实验报告(2)

最优化方法实验报告Numerical Linear Algebra And ItsApplications学生所在学院:理学院学生所在班级:计算数学10-1学生姓名:甘纯指导教师:单锐教务处2013年5月实验三实验名称:无约束最优化方法的MATLAB实现实验时间: 2013年05月10日星期三实验成绩:一、实验目的:通过本次实验的学习,进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。

二、实验背景:(一)最速下降法1、算法原理最速下降法的搜索方向是目标函数的负梯度方向,最速下降法从目标函数的负梯度方向一直前进,直到到达目标函数的最低点。

2、算法步骤用最速下降法求无约束问题n R()min的算法步骤如下:xxf,a )给定初始点)0(x ,精度0>ε,并令k=0;b )计算搜索方向)()()(k k x f v -∇=,其中)()(k x f ∇表示函数)(x f 在点)(k x 处的梯度;c )若ε≤)(k v ,则停止计算;否则,从)(k x 出发,沿)(k v 进行一维搜索,即求k λ,使得)(min )()()(0)()(k k k k v x f v x f λλλ+=+≥; d )令1,)()()1(+=+=+k k v x x k k k k λ,转b )。

(二)牛顿法1、算法原理牛顿法是基于多元函数的泰勒展开而来的,它将)()]([-)(1)(2k k x f x f ∇∇-作为搜索方向,因此它的迭代公式可直接写出来:)()]([)(1)(2)()(k k k k x f x f x x ∇∇-=-2、算法步骤用牛顿法求无约束问题n R x x f ∈),(min 的算法步骤如下:a )给定初始点)0(x ,精度0>ε,并令k=0;b )若ε≤∇)()(k x f ,停止,极小点为)(k x ,否则转c );c )计算)()]([,)]([)(1)(2)(1)(2k k k k x f x f p x f ∇∇-=∇--令;d )令1,)()()1(+=+=+k k p x x k k k ,转b )。

基于matlab平台的三种迭代法求解矩阵方程

基于matlab平台的三种迭代法求解矩阵方程

数值分析第二次作业学院:电子工程学院基于matlab平台的三种迭代法求解矩阵方程组求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/1431,816/409,2035/1187,2155/1423,538/395,1587/1279,573/502,947 /895,1669/1691,1589/1717,414/475,337/409,905/1158,1272/1711,173/244].要求:1)Gauss_Sedel迭代法;2)最速下降法;3)共轭梯度法;4)将结果进行分析对比。

解:根据题目要求,编写了对应算法的matlab程序,求解结果如下:(求解精度为10e-4,最大迭代次数1000)1、方程的解:如下图1所示图1 三种方法求解的结果对比图2 Gause_Sedel算法收敛特性图3 最速下降法收敛特性图3 共轭梯度法收敛特性从图中可以看到,在相同的最大迭代次数和预设求解精度条件下,共轭梯度算法仅需要4次迭代便可求出方程组的解,耗时0.000454秒,而且求出解的精度最高;Gauss_Sedel方法需要465次迭代,耗时0.006779秒,求解精度最差;最速下降法需要398次迭代,耗时0.007595秒,求解精度与共轭梯度算法差不多,因此两者求出的解也几乎相同。

从中可以得出结论,共轭梯度算法无论从求解精度还是求解速度上都优于其他两种,最速下降法在求解精度上几乎与共轭梯度算法持平,但求解速度更慢。

Gauss_Sedel方法在求解精度和速度两方面都最差。

具体的解为:Gauss_Sedel迭代法:(共需465次迭代,求解精度达到9.97e-5) X=[0.995328360833192 1.01431732497804 1.052861239300110.934006974137998 0.931493373808838 0.9665081384030661.00661848511341 1.03799789809258 1.051806903036541.06215849948572 1.04857676431223 1.028561990411131.01999170162638 0.971831831519515 0.9525261666348130.916996019179182].最速下降法:(共需398次迭代,求解精度达到9.94e-5)X=[0.998835379744322 1.01507463472900 0.9825890937201850.980191460759243 0.991245169713628 1.003780222253291.01350884374478 1.01928337905816 1.020859096651941.01930314197028 1.01444777381651 1.007040589892970.998384452250809 0.987399404644377 0.9757678149709120.963209150871750].共轭梯度法:(共需4次迭代,求解精度达到3.98e-5)X=[0.996472751179456 1.02707840189049 0.9776233734098530.973206695321590 0.986133032967607 1.001289025642341.01322158496914 1.02047386502293 1.023009050605651.02163015083975 1.01678089454399 1.009203108638740.999772406055155 0.988443827498859 0.9760941924969490.962844741655005].Matlab程序主程序:clc;clear;%% 本程序用于计算第二次数值分析作业,关于希尔伯特矩阵方程的解,用三种方法,分析并比较,也可推广至任意n维的矩阵方程%%A=hilb(16); %生成希尔伯特系数矩阵b=[2877/851;3491/1431;816/409;2035/1187;2155/1423;538/395;1587/1279;573/502;947/895;166 9/1691;1589/1717;414/475;337/409;905/1158;1272/1711;173/244]; %右端向量M=1000; %最大迭代次数err=1.0e-4; %求解精度[x,n,xx,cc,jingdu]=yakebi_diedai(A,b,err,M); % 雅克比算法求解tic;[x1,n1,xx1,cc1,jingdu1]=gauss_seidel(A,b,err,M); % gauss_seidel算法求解toc;tic;[x2,n2,xx2,jingdu2]=zuisuxiajiangfa(A,b,err,M); % 最速下降法求解toc;tic;[x3,flag,jingdu3,n3]=bicg(A,b,err); % matlab内置双共轭梯度算法求解toc;tic;[x4,xx4,n4,jingdu4]=con_grad(A,b,err,M); % 教材共轭梯度算法求解toc;%% 计算相应结果,用于作图%%num=[1:16]';jie=[num,x1,x2,x4]; % 三者的解对比% 三者的收敛情况对比num1=[1:n1]';fit1=[num1,jingdu1'];num2=[1:n2]';fit2=[num2,jingdu2'];num4=[1:n4]';fit4=[num4,jingdu4'];子函数1(Gause_Sedel算法):function [x,n,xx,cc,jingdu] = gauss_seidel(A,b,err,M)% 利用迭代方法求解矩阵方程这里是高斯赛尔得迭代方法% A 为系数矩阵b 为右端向量err为精度大小返回求解所得向量x及迭代次数% M 为最大迭代次数cc 迭代矩阵普半径jingdu 求解过程的精度n 所需迭代次数xx 存储求解过程中每次迭代产生的解for ii=1:length(b)if A(ii,ii)==0x='error';break;endendD=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=(D-L)\U;cc=vrho(B); %迭代矩阵普半径FG=(D-L)\b;x0=zeros(length(b),1);x=B*x0+FG;k=0;xx(:,1)=x;while norm(A*x-b)>errx0=x;x=B*x0+FG;k=k+1;xx(:,k+1)=x;if k>=Mdisp('迭代次数太多可能不收敛!');break;endjingdu(k)=norm(A*x-b);endend子函数2(最速下降算法):function [x,n,xx,jingdu]=zuisuxiajiangfa(A,b,eps,M)% 利用迭代方法求解矩阵方程这里是最速下降迭代方法% A 为系数矩阵b 为右端向量err为精度大小返回求解所得向量x及迭代次数% % M 为最大迭代次数jingdu 求解过程的精度n 所需迭代次数xx 存储求解过程中每次迭代产生的解x0=zeros(length(b),1);r0=b-A*x0;t0=r0'*r0/(r0'*A*r0);x=x0+t0*r0;r=b-A*x;xx(:,1)=x;k=0;while norm(r)>epsr=r;x=x;t=r'*r/(r'*A*r);x=x+t*r;r=b-A*x;k=k+1;xx(:,k+1)=x;if k>=Mdisp('迭代次数太多可能不收敛!');break;endn=k;jingdu(k)=norm(r);endend子函31(共轭梯度法):function [x,xx,n,jingdu]=con_grad(A,b,eps,M)% 利用迭代方法求解矩阵方程这里是共轭梯度迭代方法% A 为系数矩阵b 为右端向量err为精度大小返回求解所得向量x及迭代次数% M 为最大迭代次数jingdu 求解过程的精度n 所需迭代次数xx 存储求解过程中每次迭代产生的解x0=zeros(length(b),1);r0=b-A*x0;p0=r0;% t0=r0'*r0/(r0'*A*r0);% x=x0+t0*r0;% xx(:,1)=x;k=0;x=x0;r=r0;p=p0;while norm(r)>epsx=x;r=r;p=p;afa=r'*r/(p'*A*p);x1=x+afa*p;r1=r-afa*A*p;beta=r1'*r1/(r'*r);p1=r1+beta*p;x=x1;r=r1;p=p1;k=k+1;xx(:,k)=x;if k>=Mdisp('迭代次数太多可能不收敛!');break;endn=k;jingdu(k)=norm(r);endend。

最速下降法matlab

最速下降法matlab

最速下降法matlabmatlab步0:选取初始点x0,容许误差是e=[0~1],令k=1步1:计算目标函数的梯度若||gk||&lt;=e,即达到误差要求,立即停止计算,并输出xk作为近似最优解。

步2:取搜索方向为dk=-gk(即负梯度方向)。

步3:利用线搜索技术确定步长k(这里采用Armijo准则来求步长)步长为k=^mk是给定的,所以要求出mkAmrijo准则就是(1)给定(0~1),(0,0.5),令m=0(2)若不等式f(xk+^m*dk)&lt;=f(xk)+*^m*gk'*dk成立,则令mk=m,Xk+1=xk+m*dk.停止运算,输出mk得到步长(3)若不满足上述不等式,则令m=m+1,然后回到第二步。

步4:确定步长后,令Xk+1=Xk+k*dk,k=k+1,转步骤1.matlab具体代码如下:1.主函数1clear all2clc%利用grad函数求解minif(x)=100*(x1^2-x2)^2+(x1-1)^2 4%此时还要建立两个函数,一个目标函数fun,一个梯度gfun 5x0=[-1.2 1]';6[x,val,k]=grad('fun','gfun',x0);7disp(['最优解:x='])8disp(x)9disp(['此时:f(x)=',num2str(val)])102.最速下降法1function[x,val,k]=grad(fun,gfun,x0)2%功能:用最速下降法求解无约束问题minif(x)3%输入:fun,gfun分别是目标函数和梯度,x0是初始点%输出:x,val分别是近似最优值和最优值,k是迭代次数5maxk=5000;%最大迭代次数6rho=0.5;7sigma=0.4;8k=0;9e=1e-5;%精度10while(k&lt;maxk)11g=feval(gfun,x0);%计算梯度15m=0;mk=0;3.目标函数3f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;44.目标函数的梯度1function g=gfun(x)2%目标函数的梯度3g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';4end5.运行结果。

matlab 最速下降迭代路径

matlab 最速下降迭代路径

一、Matlab最速下降迭代路径介绍Matlab是一款强大的数学软件工具,其中包含了各种数学工具箱,用于解决不同领域的数学问题。

最速下降迭代路径是其中的一个重要工具,用于求解非线性方程组或最优化问题。

二、最速下降迭代路径原理1.首先介绍最速下降法的思想:即在迭代过程中,每次选取下降方向时选择负梯度方向,使得目标函数值下降最快。

2.最速下降法的迭代公式:x^(k+1) = x^k - α * ∇f(x^k),其中x^k 为迭代的当前点,α为步长,∇f(x^k)为目标函数在x^k点的梯度。

三、Matlab中最速下降迭代路径的函数及使用方法1.在Matlab中,可以使用fminunc函数来实现最速下降迭代路径。

其用法为[fval, x] = fminunc(fun, x0, options),其中fun为目标函数的句柄,x0为迭代的初始点,options为优化选项。

2.在使用fminunc函数时,需注意定义目标函数的句柄,并设定合适的初始点和优化选项,以确保得到准确的最速下降迭代路径。

四、最速下降迭代路径的应用实例以一个简单的非线性方程组为例:f(x) = x^2 + 2y^2,其中目标是求解该方程组的最小值。

通过Matlab最速下降迭代路径,可以求解该方程组的最小值点。

五、总结与展望最速下降迭代路径是一种常用的非线性方程组求解方法,Matlab中的fminunc函数提供了便捷的实现途径。

今后,我们可以进一步深入研究不同类型问题下的最速下降迭代路径,并探索更多有效的数值计算方法。

以上是关于Matlab最速下降迭代路径的简要介绍,希望能为您提供一些帮助。

感谢阅读!最速下降迭代路径是一种常用的优化方法,广泛应用于解决非线性方程组和优化问题。

在Matlab中,最速下降迭代路径的实现通过fminunc函数来完成。

在本文中,我们将进一步探讨最速下降迭代路径的原理、Matlab中的具体使用方法以及其应用实例。

让我们更深入地了解最速下降迭代路径的原理。

最速下降法matlab代码

最速下降法matlab代码

最速下降法matlab代码最速下降法(Steepest Descent Method)是一种用于数值优化问题的迭代算法。

下面是一个简单的最速下降法的MATLAB 代码示例:1.定义目标函数function f = objective(x)f = x(1)^2 + 4*x(2)^2 - 4*x(1) - 8*x(2); % 示例目标函数,可根据实际问题进行修改end2.定义目标函数的梯度function g = gradient(x)g = [2*x(1) - 4; 8*x(2) - 8]; % 示例目标函数的梯度,可根据实际问题进行修改end3.最速下降法function steepestDescent()x = [0; 0]; % 初始点epsilon = 1e-6; % 收敛准则,可根据实际问题调整maxIterations = 1000; % 最大迭代次数,可根据实际问题调整for k = 1:maxIterationsg = gradient(x); % 计算梯度if norm(g) < epsilon % 判断梯度范数是否小于收敛准则break;endalpha = 0.01; % 步长,可根据实际问题调整x = x - alpha * g; % 更新参数enddisp('Optimization Results:');disp('---------------------');disp(['Iterations: ', num2str(k)]);disp(['Minimum point: (', num2str(x(1)), ', ', num2str(x(2)), ')']);disp(['Objective function value: ', num2str(objective(x))]);end4.调用最速下降法函数steepestDescent();上述代码包含了以下几个关键部分:objective 函数:定义了目标函数,根据实际问题进行修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验的题目和要求
一、所属课程名称:
最优化方法
二、实验日期:
2010年5月10日~2010年5月15日
三、实验目的
掌握最速下降法,牛顿法和共轭梯度法的算法思想,并能上机编程实现相应的算法。

二、实验要求
用MA TLA B实现最速下降法,牛顿法和共轭梯度法求解实例。

四、实验原理
最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。

牛顿法是利用目标函数)(x f 在迭代点k x 处的T aylor 展开式作为模型函数,并利用这个二次模型函数的极
小点序列去逼近目标函数的极小点。

共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向k d 仅仅是负梯度方向k g -与上一次接
待的搜索方向1-k d 的组合。

五.运行及结果如下:
最速下降法:
题目:f=(x-2)^2+(y-4)^2
M文件:
fu ncti on [R,n]=stee l(x0,y0,e ps)
syms x;
syms y ;
f=(x-2)^2+(y-4)^2;
v=[x,y];
j=jac obi an(f ,v);
T=[s ubs(j(1),x,x0),subs (j (2),y,y0)];
temp=s qrt((T(1))^2+(T (2))^2);
x 1=x0;y 1=y 0;
n=0;
sym s k k;
w hi le (temp>eps )
d=-T;
f1=x 1+kk*d(1);f2=y1+k k*d(2);
fT=[su bs(j (1),x,f1),sub s(j(2),y,f2)];
fu n=sqrt((fT(1))^2+(fT(2))^2);
Mini=Gold(fun,0,1,0.00001);
x0=x1+Mini*d(1);y0=y1+Mini*d(2);
T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2);
x1=x0;y1=y0;
n=n+1;
end
R=[x0,y0]
调用黄金分割法:
M文件:
functionMini=Gold(f,a0,b0,eps)
syms x;format long;
syms kk;
u=a0+0.382*(b0-a0);
v=a0+0.618*(b0-a0);
k=0;
a=a0;b=b0;
array(k+1,1)=a;array(k+1,2)=b;
while((b-a)/(b0-a0)>=eps)
Fu=subs(f,kk,u);
Fv=subs(f,kk,v);
if(Fu<=Fv)
b=v;
v=u;
u=a+0.382*(b-a);
k=k+1;
elseif(Fu>Fv)
a=u;
u=v;
v=a+0.618*(b-a);
k=k+1;
end
array(k+1,1)=a;array(k+1,2)=b;
end
Mini=(a+b)/2;
输入:
[R,n]=steel(0,1,0.0001)
R= 1.99999413667642 3.99999120501463 R = 1.99999413667642 3.99999120501463
n= 1
牛顿法:
题目:f=(x-2)^2+(y-4)^2
M文件:
syms x1x2;
f=(x1-2)^2+(x2-4)^2;
v=[x1,x2];
df=jacobian(f,v);
df=df.';
G=jacobian(df,v);
epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=su bs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0; mul_count=mul_count+12;sum_count=sum_count+6;
while(norm(g1)>epson)
p=-G1\g1;
x0=x0+p;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});
k=k+1;
mul_count=mul_count+16;sum_count=sum_count+11;
end;

x0
mul_count
sum_count
结果::k= 1
x0=

4
mul_count = 28
sum_count = 17
共轭梯度法:
题目:f=(x-2)^2+(y-4)^2
M文件:
functionf=conjugate_grad_2d(x0,t)
x=x0;
symsxi yi a
f=(xi-2)^2+(yi-4)^2;
fx=diff(f,xi);
fy=diff(f,yi);
fx=subs(fx,{xi,yi},x0);
fy=subs(fy,{xi,yi},x0);
fi=[fx,fy];
count=0;
while double(sqrt(fx^2+fy^2))>t
s=-fi;
if count<=0
s=-fi;
else
s=s1;
end
x=x+a*s;
f=subs(f,{xi,yi},x);
f1=diff(f);
f1=solve(f1);
iff1~=0
ai=double(f1);
else
break
x,f=subs(f,{xi,yi},x),count
end
x=subs(x,a,ai);
f=xi-xi^2+2*xi*yi+yi^2;
fxi=diff(f,xi);
fyi=diff(f,yi);
fxi=subs(fxi,{xi,yi},x);
fyi=subs(fyi,{xi,yi},x);
fii=[fxi,fyi];
d=(fxi^2+fyi^2)/(fx^2+fy^2);
s1=-fii+d*s;
count=count+1;
fx=fxi;
fy=fyi;
end
x,f=subs(f,{xi,yi},x),count
输入:conjugate_grad_2d([0,0],0.0001)
结果:
x=0.24998825499785 -0.24999998741273
f=0.12499999986176
count=10
ans = 0.12499999986176
六、结论如下:
最速下降法越接近极小值,步长越小,前进越慢。

牛顿法要求二阶导数,计算量很大。

共轭梯度法是介于最速下降和牛顿法之间的算法,
克服了最速下降法的收敛速度慢的缺点,又避免了牛顿法的大计算量。

--。

相关文档
最新文档