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 科学计算》,王正林等著,电子工业出版社,2009年)“最速下降法无约束最优化”最速下降法:解: 算法说明:最速下降法是一种沿着N 维目标函数的负梯度方向搜索最小值的方法。
原理:由高等数学知识知道任一点的负梯度方向是函数值在该点下降最快的方向,那么利用负梯度作为极值搜索方向,达到搜寻区间最速下降的目的。
而极值点导数性质,知道该点的梯度=0,故而其终止条件也就是梯度逼近于0,也就是当搜寻区间非常逼近极值点时,即:当▽f(a )→0推出f(a )→极值)(x f ,f(a )即为所求。
该方法是一种局部极值搜寻方法。
函数的负梯度表示如下:-g(x )=-▽f(x)=-⎢⎣⎡∂∂1)(x x f 2)(x x f ∂∂ … T N x x f ⎥⎦⎤∂∂)(搜索步长可调整,通常记为αk (第k 次迭代中的步长)。
该算法利用一维的线性搜索方法,如二次逼近法,沿着负梯度方向不断搜索函数的较小值,从而找到最优解。
方法特点(1)初始值可任选,每次迭代计算量小,存储量少,程序简短。
即使从一个不好的初始点出发,开始的几步迭代,目标函数值下降很快,然后慢慢逼近局部极小点。
(2)任意相邻两点的搜索方向是正交的,它的迭代路径胃绕道逼近极小点。
当迭代点接近极小点时,步长变得很小,越走越慢。
(3)全局收敛,线性收敛,易产生扭摆现象而造成早停。
算法步骤:最速下降法的基本求解流程如下:第一步迭代次数初始化为k=0,求出初始点0x 的函数值f 0=f (0x )。
第二步迭代次数加1,即k=k+1,用一维线性搜索方法确定沿负梯度方向-1-k g 的步长1k -α,其中1k -α=ArgMinaf (111k /----k k g g x α)。
第三步沿着负梯度方向寻找下一个接近最小值的点,其中步长为1k -α,得到下一点的坐标为:1111/-----=k k k k k g g x x α。
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)
最优化方法实验报告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最速下降法最速下降法是一种求解非线性函数的最优化方法。
在数学上,最速下降法是一种迭代算法,用于寻找多元函数的最小值。
最速下降法常常被用在优化和数值分析领域。
最速下降法基于负梯度方向更新搜索点的方法寻找函数最小值。
方法使用梯度下降的技术,因为负梯度方向是函数值下降最快的方向。
梯度是指函数在指定点的变化率。
对于给定的函数f(x),我们定义梯度为∇f(x)=[∂f/∂x1, ∂f/∂x2, … , ∂f/∂xn]^T因此,最速下降法是根据梯度的方向(也就是负梯度的方向)来改变搜索方向和步长的。
最速下降法的流程如下:(1)确定起始点x0和收敛精度ε;(2)计算f(x)在x0处对各个方向上的导数;(3)按照负梯度方向进行搜索;(4)最终收敛到函数的最小值。
最速下降法的算法可以表示为算法1 最速下降法%输入:f(x),∇f(x)表示函数f(x)的梯度,x0表示搜索起点,ε表示收敛精度,α表示步长%输出:x表示函数f(x)的最小值点function x = steepest_descent_method(f, grad_f, x0, epsilon, alpha)k = 0;x = x0;while norm(grad_f(x)) > epsilondk = -grad_f(x);x = x + alpha*dk;k = k + 1;endend其中,norm是向量的范数,grad_f表示函数f的梯度,alpha是步长因子,可以通过试验或线搜索确定。
在上述算法中,基于梯度的每一步都保证了函数值下降。
算法的停止条件通常是达到预定的精度或规定的最大迭代次数。
最速下降法的优缺点优点:(1)相对简单,易于理解和实现;(2)算法的执行速度相对较快。
(1)可能会在迭代过程中陷入局部最小值;(2)需要对步长因子α进行调整;(3)在非线性函数的优化中,最速下降法可能需要许多迭代才能收敛,导致计算量大。
最速下降法是一种通用的非线性优化算法,广泛应用于各种数学和工程问题中。
基于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
最速下降法matlabmatlab步0:选取初始点x0,容许误差是e=[0~1],令k=1步1:计算目标函数的梯度若||gk||<=e,即达到误差要求,立即停止计算,并输出xk作为近似最优解。
步2:取搜索方向为dk=-gk(即负梯度方向)。
步3:利用线搜索技术确定步长k(这里采用Armijo准则来求步长)步长为k=^mk是给定的,所以要求出mkAmrijo准则就是(1)给定(0~1),(0,0.5),令m=0(2)若不等式f(xk+^m*dk)<=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<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.运行结果。
最速下降法实验报告
竭诚为您提供优质文档/双击可除最速下降法实验报告篇一:最速下降法报告资料篇二:最优化方法实验报告最优化方法实验报告学生所在学院:理学院学生所在班级:信息1学生姓名:教务处20XX4年5月最优化方法实验报告书说明:1.下面程序在mATLAbR20XXa中均能正常运行。
程序之间有关联。
2.实验一熟悉mATLAb基本功能(2学时)实验的目的和要求:在本次实验中,通过亲临使用mATLAb,对该软件做一全面了解并掌握重点内容。
实验内容:1、全面了解mATLAb系统2、实验常用工具的具体操作和功能学习建议:本次实验在全面了解软件系统基础之上,学习和熟悉一些mATLAb的基础用途,重点掌握优化工具箱函数选用的内容。
重点和难点:优化工具箱函数选用。
数学模型:其中f,x,b,beq,lb和ub为向量,A和Aeq为矩阵。
语法:x=linprog(f,A,b,Aeq,beq)x=linprog(f,A,b,Aeq,beq,lb, ub)x=linprog(f,A,b,Aeq,beq,lb,ub,x0)x=linprog(f,A,b ,Aeq,beq,lb,ub,x0,options)[x,fval]=linprog(...)[x,fval,exitflag]=linprog(...)[x,fval,exitflag,outp ut]=linprog(...)[x,fval,exitflag,output,lambda]=lin prog(...)描述:x=linprog(f,A,b)求解问题minf*x,约束条件为A*x 篇三:实验2最速下降法和共轭梯度法的程序设计实验2最速下降法和共轭梯度法的程序设计一、实验目的1、熟悉无约束优化问题的最速下降算法和共轭梯度法。
2、培养matlab编程与上机调试能力。
二、实验课时:2个课时三、实验准备1、预习无约束优化问题的最速下降算法和共轭梯度法。
2、熟悉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代码最速下降法(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 函数:定义了目标函数,根据实际问题进行修改。
最速下降法+Matlab代码
最速下降法+Matlab代码算法原理to-doMatlab代码clc; clear;f = @(x) x(1).^2+2*x(1)*x(2)+3*x(2).^2; %待求函数,x1,x2,x3...% f = @(x) x(1).^2+2*x(2).^2;paraNum = 2; %函数参数的个数,x1,x2,x3...的个数x0 = [3,3]; %初始值tol = 1e-5; %迭代容忍度flag = inf; %结束条件error = []; %函数变化while flag > tolp = g(f,x0,paraNum); %列向量f2 = @(a) f(x0-a*p');buChang = argmin(f2); %求步长,line search:argmin functionx1 = x0-buChang*p';flag = norm(x1-x0);error = [error,flag];x0 = x1;endplot(0:length(error)-1,error)function [f_grad] = g(f,x0,paraNum)temp = sym('x',[1,paraNum]);f1=f(temp);Z = gradient(f1);f_grad = double(subs(Z,temp,x0));endfunction [x] = argmin(f)%求步长t = 0;options = optimset('Display','off');[x,~] = fminunc(f,t,options);end代码问题1. Matlab符号运算,耗时2. 最速下降法的步长使⽤line-search,耗时代码改进clc; clear;f = @(x) x(1).^2+2*x(1)*x(2)+3*x(2).^2; %待求函数,x1,x2,x3...% f = @(x) x(1).^2+2*x(2).^2;paraNum = 2; %函数参数的个数,x1,x2,x3...的个数x0 = [3,3]; %初始值tol = 1e-3; %迭代容忍度flag = inf; %结束条件error = []; %函数变化while flag > tol% for i =1:1p = g(f,x0,paraNum); %列向量if norm(p) < tolbuChang = 0;elsebuChang = argmin(f,x0,p,paraNum); %求步长,line search:argmin functionendx1 = x0-buChang.*p';flag = norm(x1-x0);error = [error,flag];x0 = x1;endplot(0:length(error)-1,error)function [f_grad] = g(f,x0,paraNum)temp = sym('x',[1,paraNum]);f1=f(temp);Z = gradient(f1);f_grad = double(subs(Z,temp,x0)); end% function [x] = argmin(f,paraNum) % %求步长% t = zeros(1,paraNum);% options = optimset('Display','off'); % [x,~] = fminunc(f,t,options);% endfunction [x] = argmin(f,x0,p,num) % 求步长% for i=1:paraNum% syms(['x',num2str(i)]);% endtemp = sym('x',[1,num]);f1=f(x0 - temp.*p');for i = 1:numtemp(i) = diff(f1,temp(i));endjieGuo = solve(temp);jieGuo = struct2cell(jieGuo);x = zeros(1,num);for i = 1:numx(i) = double(jieGuo{i});endend。
最速下降法求最优解西安电子科技大学matlab结课大作业
西安电子科技大学课程论文数学软件与实验最速下降法求最优解姓名:方正阳学号:07117020班级:07117107112016、最速下降法求最优解1 2 n,然后MATLAB 结课大作业摘要:最速下降法,又称为梯度法,是一种重要的无约束最优化方法。
它是 1847年由著名数学家 Cauchy 给出的,其他解析方法或是它的变形,或是受它 启发而得到,因此它是最优化方法的基础。
该法将 n 维问题转化为一系列 不断迭代过程中沿负梯度方向用一维搜索方法寻优的问题,本次程序设计 利用最速下降法算法,反复迭代,最终收敛于局部最优点,即为解出的二 元函数的无约束非线性规划问题 minf(x,y)。
引言:最优化理论作为运筹学中的一个重要理论方法,在工业生产,金融经济活 动,工商管理,国防建设,计算机应用中,都有着重要的应用。
最优化理论 通过给出生产活动中的各类实际问题的数学模型,通过最优化方法,寻求 该问题的最优解或满意解。
最速下降算法是最优化理论中常见的一个重要 算法,理论证明:最速下降算法在一定条件下是收敛的,它能够有效地求 解一部分无约束最优化问题。
一、 实验目的熟悉最速下降法算法思想和步骤,用 MATLAB 语言编程最速下降法 求最优值。
二、 实验要求在最优化计算方法中,要求解 y = f (x 1, x 2 , , x n ) 的局部最小值,可以采用如下的方法进行迭代计算:先给出初始点 x 0 = (x 0 , x 0 , , x 0)根据其梯度方向 ∇f (x 0),计算一元函数 y (λ1 ) = min f (x λ≥0 0-λ⋅∇f (x 0 )) ,并1 0 0得到x = x -λ1 ⋅∇f (x ) 。
如此反复迭代,最终收敛于局部最优点。
实现 该算法,求 的最优值,a,b,c,d 自定(非 0)三、 实验假设考虑到参数的随机性、代表性,验证程序的正确性、典型性,在此 我们从两个角度出发,一是在 abcd 值确定的情况下改变初始搜索位置 x0,看函数最优解是否相同;二是初始搜索位置 x0 相同,abcd 值不同的 情况下,看函数最优解是否相同。
matlab线性方程组求解
0.9739 -0.0047 1.0010
n= 5 Jacobi 迭代法: function [x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps= 1.0e-6; M = 200; elseif nargin<3 error return elseif nargin ==5 M = varargin{1}; end D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); B=D/(L+U); f=D/b; x=B*x0+f; n=1; % 迭代次数 % 求 A 的对角矩阵 % 求 A 的上三角阵
n= 5 Gauss-Seidel 迭代法: function [x,n]=gauseidel(A,b,x0,eps,M) if nargin==3 eps= 1.0e-6; M = 200; elseif nargin == 4 M = 200; elseif nargin<3 error return; end D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); G=(D-L)/U; f=(D-L)/b; % 求 A 的对角矩阵 % 求 A 的上三角阵 % 求 A 的下三角阵
批注本地保存成功开通会员云端永久保存去开通
线性方程组求解 1. 直接法 Gauss 消元法: function x=DelGauss(a,b) % Gauss 消去法 [n,m]=size(a); nb=length(b); det=1;% 存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k); end det=det*a(n,n);
(最新整理)Matlab最优化方法
minf = c x
s.t .Axb = ( 1)
x0
这 里 A=(a ij)m , nx , =x1 x2 xnT
b=b 1 b 2 b nT, c =c1 c2 cn
2021/7/26
9
例 m i n z = 1 0 x 1 + 9 x 2 s . t . 6 x 1 + 5 x 2 ≤ 6 0 1 0 x 1 + 2 0 x 2 ≥ 1 5 0 x 1 ≤ 8 x 1 , x 2 ≥ 0
解:这是个最优化问题,其目标为经济价值最高,约束 条件为三种资源的数量有限,决策为生产甲、乙产品的 数量。令生产产品甲的数量为x1,生产产品乙的数量为 x2。由题意可以建立如下的线性规划模型。
2021/7/26
6
故目标函数为:
mz ax 7x15x2
约束条件为:
3 x1 2 x2 90
4
7
内容
1、无约束优化基本思想及基本算法。 2、MATLAB优化工具箱简介 3、用MATLAB求解无约束优化问题。
4、实验作业。
2021/7/26
21
无约束最优化问题
求解无约束最优化问题的的基本思想
*无约束最优化问题的基本算法
2021/7/26
返回 22
求解无约束最优化问题的基本思想
标准形式:
m f X in
问题一 : 任务分配问题:某车间有甲、乙两台机床,可用
于加工三种工件。假定这两台车床的可用台时数分别为800和 900,三种工件的数量分别为400、600和500,且已知用三种 不同车床加工单位数量不同工件所需的台时数和加工费用如 下表。问怎样分配车床的加工任务,才能既满足加工工件的 要求,又使加工费用最低?
最速下降法matlab程序
最速下降法matlab程序最速下降法是一种求解无约束优化问题的基本方法,也是许多优化算法的基础。
本文将介绍最速下降法的基本思想和matlab程序实现。
一、最速下降法的基本思想最速下降法是一种基于梯度下降的优化算法。
其基本思想是在每一步中选择下降方向为当前点的负梯度方向,即$f(x)$在当前点$x_k$处的梯度$g_k$的相反方向,使得目标函数值不断下降,直到达到最小值。
具体来说,最速下降法的迭代公式为:$$x_{k+1} = x_k - alpha_k g_k$$其中,$x_k$为当前点,$g_k$为$f(x)$在$x_k$处的梯度,$alpha_k$为步长,也称为学习率,表示每次迭代时沿着负梯度方向移动的距离。
最速下降法的核心是选择合适的步长$alpha_k$,以保证每次迭代都能够使目标函数值下降。
通常可以使用线性搜索或二分法等方法来确定步长。
二、最速下降法的matlab程序实现在matlab中,可以使用以下程序实现最速下降法:```matlabfunction [x, fval, iter] = steepest_descent(f, gradf, x0, tol, maxiter)% 最速下降法% f: 目标函数% gradf: 目标函数的梯度% x0: 初始点% tol: 迭代停止条件% maxiter: 最大迭代次数x = x0;fval = f(x);iter = 0;while norm(gradf(x)) > tol && iter < maxiterd = -gradf(x);alpha = backtracking_line_search(f, gradf, x, d, 1); x = x + alpha * d;fval = f(x);iter = iter + 1;endendfunction alpha = backtracking_line_search(f, gradf, x, d, alpha0)% 回溯线搜索% f: 目标函数% gradf: 目标函数的梯度% x: 当前点% d: 搜索方向% alpha0: 初始步长rho = 0.5;c = 0.1;alpha = alpha0;while f(x + alpha * d) > f(x) + c * alpha * gradf(x)' * dalpha = rho * alpha;endend```其中,`steepest_descent`函数实现了最速下降法的迭代过程,`backtracking_line_search`函数实现了回溯线搜索来确定步长。
用MATLAB实现最速下降法
实验的题目和要求一、所属课程名称:最优化方法二、实验日期:2010年5月10日~2010年5月15日三、实验目的掌握最速下降法,牛顿法和共轭梯度法的算法思想,并能上机编程实现相应的算法。
二、实验要求用MATLAB 实现最速下降法,牛顿法和共轭梯度法求解实例。
四、实验原理最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。
牛顿法是利用目标函数)(x f 在迭代点k x 处的Tayl or 展开式作为模型函数,并利用这个二次模型函数的极小点序列去逼近目标函数的极小点。
共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向k d 仅仅是负梯度方向k g -与上一次接待的搜索方向1-k d 的组合。
五.运行及结果如下:最速下降法:题目:f =(x-2)^2+(y -4)^2M 文件:functi on [R,n]=s teel(x0,y0,eps)syms x ;syms y ;f=(x -2)^2+(y-4)^2;v=[x ,y];j=jacobia n(f,v );T =[su bs (j(1),x,x 0),sub s(j(2),y,y 0)];t emp=s qrt((T (1))^2+(T(2))^2);x1=x0;y1=y0;n=0;syms kk ;wh ile (t emp>ep s)d=-T;f1=x 1+kk*d(1);f2=y1+kk*d(2);fT=[subs(j(1),x,f1),subs(j(2),y,f2)];fun=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;endR=[x0,y0]调用黄金分割法:M文件:functionMini=Gold(f,a0,b0,eps)symsx;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;endarray(k+1,1)=a;array(k+1,2)=b;endMini=(a+b)/2;输入:[R,n]=steel(0,1,0.0001)R= 1.99999413667642 3.99999120501463 R= 1.99999413667642 3.99999120501463n = 1牛顿法:题目:f=(x-2)^2+(y-4)^2M文件: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=subs(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;kx0mul_countsum_count结果::k = 1x0=24mul_count =28sum_count = 17共轭梯度法:题目:f=(x-2)^2+(y-4)^2M文件:function f=conjugate_grad_2d(x0,t)x=x0;syms xi yi af=(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))>ts=-fi;ifcount<=0s=-fi;elses=s1;endx=x+a*s;f=subs(f,{xi,yi},x);f1=diff(f);f1=solve(f1);iff1~=0ai=double(f1);elsebreakx,f=subs(f,{xi,yi},x),countendx=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;endx,f=subs(f,{xi,yi},x),count输入:conjugate_grad_2d([0,0],0.0001)结果:x =0.24998825499785 -0.24999998741273f= 0.12499999986176count=10ans= 0.12499999986176六、结论如下:最速下降法越接近极小值,步长越小,前进越慢。
MATLAB实现最速下降法(梯度)程序
matlab最速下降法2010-08-18 17:13function x=fsxsteep(f,e,a,b)% fsxsteep函数最速下降法% x=fsxsteep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点;% fsx TJPU 2008.6.15x1=a;x2=b;Q=fsxhesse(f,x1,x2);x0=[x1 x2]';fx1=diff(f,'x1'); %对x1求偏导数fx2=diff(f,'x2'); %对x2求偏导数g=[fx1 fx2]'; %梯度g1=subs(g); %把符号变量转为数值d=-g1;while (abs(norm(g1))>=e)t=(-d)'*d/((-d)'*Q*d);t=(-d)'*d/((-d)'*Q*d); %求搜索方向x0=x0-t*g1; %搜索到的点v=x0;a=[1 0]*x0;b=[0 1]*x0;x1=a;x2=b;g1=subs(g);d=-g1;end;x=v;function x=fsxhesse(f,a,b)% fsxhesse函数求函数的hesse矩阵;% 本程序仅是简单的求二次函数的hesse矩阵!;% x=fsxhesse(f)为输入函数 f为二次函数 x1,x2为自变量;% fsx TJPU 2008.6.15x1=a;x2=b;fx=diff(f,'x1'); %求f对x1偏导数fy=diff(f,'x2'); %求f对x2偏导数fxx=diff(fx,'x1'); %求二阶偏导数对x1再对x1fxy=diff(fx,'x2'); %求二阶偏导数对x1再对x2fyx=diff(fy,'x1'); %求二阶偏导数对x2再对x1fyy=diff(fy,'x2'); %求二阶偏导数对x2再对x2fxx=subs(fxx); %将符号变量转化为数值fxy=subs(fxy);fyx=subs(fyx);fyy=subs(fyy);x=[fxx,fxy;fyx,fyy]; %求hesse矩阵syms x1 x2;X=[x1,x2];fx=X(1)^2+2*X(2)^2;z=fsxsteep(fx,0.001,1,1)。
matlab 最速下降法
MATLAB最速下降法引言最速下降法是一种优化算法,以迭代的方式寻找函数的最小值。
在MATLAB中,可以使用最速下降法对函数进行优化。
本文将详细介绍MATLAB中最速下降法的原理、应用和实现方法。
最速下降法原理最速下降法也称为梯度下降法,其核心思想是在每个迭代步骤中,沿着当前位置的负梯度方向下降,以实现函数的局部最小化。
最速下降法的迭代公式如下:x(k+1) = x(k) - λ * ∇f(x(k))其中,x(k+1)为下一次迭代的位置,x(k)为当前位置,λ为步长(学习率),∇f(x(k))为函数f(x)在x(k)点的梯度。
最速下降法的应用最速下降法广泛应用于函数优化、机器学习等领域。
它可以用来解决以下问题: 1. 函数优化:最速下降法可以根据函数的梯度信息找到函数的局部最小值,从而实现函数优化。
2. 机器学习:在机器学习中,最速下降法可以用于参数的求解,以最小化损失函数。
MATLAB中的最速下降法在MATLAB中,可以使用fminunc函数来实现最速下降法。
下面是使用MATLAB实现最速下降法的步骤: 1. 定义目标函数:首先,需要定义一个目标函数,即待优化的函数。
2. 定义初始值:选择一个合适的初始值作为最速下降法的起点。
3. 设置迭代终止条件:可以设置迭代次数上限或设定迭代误差阈值。
4. 调用fminunc函数:使用fminunc函数进行最速下降法的优化。
5. 获取优化结果:获取优化后的最优解和函数值。
下面是一个使用最速下降法优化的例子:% 定义目标函数function f = myfunc(x)f = (x(1)-1)^2 + (x(2)-2)^2;end% 定义初始值x0 = [0, 0];% 调用fminunc函数进行最速下降法的优化[xopt, fopt] = fminunc(@myfunc, x0);最速下降法的优缺点最速下降法的优点包括:简单易实现、收敛速度较快。
然而,最速下降法也存在一些缺点: 1. 收敛速度慢:最速下降法的收敛速度较慢,特别是对于目标函数呈现弯曲形状的情况。
最优化Armijo算法确定步长的最速下降法
数学与计算科学学院实验报告实验项目名称使用非精确线搜索Armijo算法确定步长的最速下降法所属课程名称最优化方法实验类型算法编程实验日期班级学号姓名成绩)](-)([11-)(-)( )2.3(||-||21)-()-(21)(-)( 0)( )(,*2*12**T *****x f x f x f x f x x x x Q x x x f x f q Qx x f x q Qx x f k k Q ⎪⎭⎫ ⎝⎛+≤===+=∇+=∇+κκ可以改写成所以则处且在由于对于二次函数.,( .,1 , ,1,,,)2.3(算法收敛很慢接近病态)较大时而当求出最优解算法只需一次迭代即可的所有特征值相等时即当特别最速下降收敛很快接近于当有关的条件数矩阵最速下降的收敛速度与看到由收敛速度估计式Q Q Q κκκκ=结论:最速下降法的收敛速度比较慢,通常将其用在某些算法的初始阶段求较好的初始点或作为某些算法的间插步.【实验环境】Win 7; Matlab7.0二、实验内容: 【实验方案】1、求梯度;2、向梯度相反的方向移动x ,其中 为步长。
如果步长足够小,则可以保证每一次迭代都在减小,但可能导致收敛太慢,如果步长太大,则不能保证每一次迭代都减少,也不能保证收敛。
3、循环迭代步骤2,直到x 的值变化到使得在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的基本没有变化,则说明此时已经达到局部最小值了。
4、此时,输出x ,这个x 就是使得函数最小时的x 的取值 。
【实验过程】梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。
其迭代公式为,其中代表梯度负方向,表示梯度方向上的搜索步长。
梯度方向我们可以通过对函数求导得到,步长的确定比较麻烦,太大了的话可能会发散,太小收敛速度又太慢。
一般确定步长的方法是由线性搜索算法来确定,即把下一个点的坐标ak+1看做是的函数,然后求满足f(ak+1)的最小值的 即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%最速下降法
clear all;
close all;
clc;
tic;
format longe
disp('请输入参数');
K=input('维数K=');
tic
A=hilb(K);% A元素是0-100
% for i=1:K
% A(i,i)=sum(abs(A(i,:)))+20*rand(1); %对角占优的量为0~20 % end
b=zeros(K,1);
for i=1:K;
x=0;
for r=1:K;
x=x+A(i,r);
end
b(i,1)=x;
end%产生b矩阵,b中的元素为A中对应行的和,目的是使方程解全为 1 jd=input('控制精度jd=');
x0=zeros(K,1); %初始迭代矩阵
r=b-A*x0; %剩余向量
ak=dot(r,r)/dot(A*r,r);
y1=x0+ak*r; %迭代公式
s1=1; %迭代次数
while norm(y1-x0)>=jd
x0=y1;
r=b-A*x0; %剩余向量
ak=(r'*r)/((A*r)'*r);
y1=x0+ak*r; %迭代公式
s1=s1+1; %迭代次数+1
end
s1
toc;
x0=zeros(K,1); %初始迭代矩阵
r=b-A*x0;%剩余向量
p=r;
ak=dot(r,r)/dot(p,A*p);
y=x0+ak*p; %迭代公式
r1=r-ak*A*p;
bk=dot(r1,r1)/dot(r,r);
p1=r1+bk*p;
s=1; %迭代次数
while norm(y-x0)>=jd; %迭代条件 x0=y;
p=p1;
r=r1;
ak=dot(r,r)/dot(p,A*p);
y=x0+ak*p; %迭代公式
r1=r-ak*A*p;
bk=dot(r1,r1)/dot(r,r);
p1=r1+bk*p;
s=s+1;
end
s
toc;
t=1:K;
yy1=abs(y1'-1)/1;
yy2=abs(y'-1)/1;
plot(t,yy1,'r');
hold on
plot(t,yy2,'b');
hold on
title('绝对误差图')
legend('最速下降法','共轭梯度法')。