精华内容
下载资源
问答
  • 优化方法的共轭梯度法Matlab代码,有需要的可以来下载哦!
  • 使用非线性共轭梯度法求解优化问题,使用matlab编程求解,是最优化方向的基本代码
  • 使用MATLAB编程实现共轭梯度法
  • 优化牛顿法速下降法共轭梯度 法matlab代码 作者 日期 2 牛顿法 迭代公式 (k1) k 2 (k) 1 (k) x x [ f (x )] f (x ) Matlab 代码 function [x1,k] =newton(x1,eps) hs=inline(x-1^4+y^2; 写入函数 ezcontour(hs,[-10 ...
  • 共方方法matlab代码实现数值线性代数 这个存储库存储了我的数值线性代数课程的所有代码,它基本上由以下七章组成: 第 1 章:线性系统的直接方法 第 2 章:线性系统的误差分析 第 3 章:最小二乘问题 第 4 章:线性...
  • 共方方法matlab代码实现python中的原始SVM实现 该项目是 Matlab Primal SVM 的 Python 端口 - Olivier Chapelle 实现的快速线性 SVM 它可以有效地处理非常大的数据集。 实现了两个求解器: 牛顿求解器 - 牛顿...
  • MATLAB实现共轭梯度法

    2018-04-17 21:17:59
    MATLAB实现共轭梯度法MATLAB实现共轭梯度法MATLAB实现共轭梯度法
  • 最优化共轭梯度法matlab代码实现,可以用于求解非线性方程的解非约束性最优化问题
  • 最优化算法之共轭梯度算法求解非线性规划问题,代码运行稳定
  • 共轭梯度法中CD(Dixon)法的 MATLAB代码
  • matlab实现了牛顿差分改进后得到的共轭梯度算法,输入多元函数的系数矩阵,即可求出函数的极值
  • 最优化作业 共轭梯度法 matlab代码

    千次阅读 2018-05-10 20:34:00
    %共轭梯度 for i=1:2 if g==0 disp('x') x break else b=(g'*a*d)/(d'*a*d)%β d=-g+b*d; d11=subs(d(1),{x1,x2},{x(1) x(2)}); d22=subs(d(2),{x1,x2},{x(1) x(2)}); d=[d11;d22] af=(-g'*d)/(d...
    syms f x1 x2 
    f=(1/2)*x1^2+x2^2;
    x=[2;1];
    a=[1 0;0 2];% A
    g1=diff(f,x1);
    g2=diff(f,x2);
    g=[g1;g2];%导数
    
    %            x1
    g11=subs(g1,{x1,x2},{x(1) x(2)});
    g22=subs(g2,{x1,x2},{x(1) x(2)});
    g=[g11;g22]
    d=-g;
    d11=subs(d(1),{x1,x2},{x(1) x(2)});
    d22=subs(d(2),{x1,x2},{x(1) x(2)});
    d=[d11;d22]
    af=(-g'*d)/(d'*a*d)
    x=x+af*d
    g11=subs(g1,{x1,x2},{x(1) x(2)});
    g22=subs(g2,{x1,x2},{x(1) x(2)});
    g=[g11;g22]
    %             x1
    
    e=0.1;%精度
    %共轭梯度
    for i=1:2
        if g==0
            disp('x')
            x
            break
        else
            
       
            b=(g'*a*d)/(d'*a*d)%β
            d=-g+b*d;
            
            d11=subs(d(1),{x1,x2},{x(1) x(2)});
            d22=subs(d(2),{x1,x2},{x(1) x(2)});
            d=[d11;d22]
            
            af=(-g'*d)/(d'*a*d)%步长α
            
            x=x+af*d
            
            g11=subs(g1,{x1,x2},{x(1) x(2)});
            g22=subs(g2,{x1,x2},{x(1) x(2)});
            g=[g11;g22]
        end
    end
    

      

    转载于:https://www.cnblogs.com/wander-clouds/p/9016468.html

    展开全文
  • 使用共轭梯度法求解 Ax=b。 矩阵 A 应该是对称的和正定的。 用法(在 m 文件末尾提供示例): x=cgm(A,b); 如果矩阵稀疏,值得一试: x=cgm(稀疏(A),b);
  • 共方方法matlab代码实现SPI 一组用于单像素成像 (SPI) 的不同重建算法。 如果您有任何问题,请随时联系卞立恒 如果此代码为您的研究提供帮助,请引用我们的出版物: 卞立恒、索金利、戴琼海和陈峰,“单像素成像算法...
  • 共方方法matlab代码实现rconjgrad (非线性)R 中的共轭梯度优化器与 Rasmussen 和 More-Thuente 线搜索。 注意:此包已被 . 这个包结合了两个 Matlab 例程的 R 翻译。 第一个是 Carl Edward Rasmussen 的 ,它有...
  • 共轭梯度法matlab程序

    2009-04-14 00:43:10
    共轭梯度法matlab程序 function x = cg(A,b) tol=1e-10; r = b + A*b; w = -r; z = A*w; s = w'*z; t = (r'*w)/s; x = -b + t*w; for k = 1:numel(b); r = r - t*z; if( norm(r) ) return; end B = (r'*z)/s; ...
  • 应用该代码进行优化时,首先应将matlab的路径设置至该文件夹的子目录下,然后输入初值,输入函数,点击回车,即可求解
  • matlab预处理共轭梯度法

    热门讨论 2012-05-23 19:05:44
    matlab预处理共轭梯度法求解线性方程组的函数文件
  • 上一篇文章介绍了修正牛顿法,修正牛顿法的缺点是收敛速度一般,所以为了使算法既不使用Hess阵,也要保证它的收敛速度,本文介绍共轭梯度法共轭梯度法有超线性的收敛速度,算法结构简单,容易编程,并且不用计算...

      上一篇文章介绍了修正牛顿法,修正牛顿法的缺点是收敛速度一般,所以为了使算法既不使用Hess阵,也要保证它的收敛速度,本文介绍共轭梯度法。共轭梯度法有超线性的收敛速度,算法结构简单,容易编程,并且不用计算Hess阵的优点。下面介绍共轭梯度法的算法步骤。

     步0:确定精度e=(0~1),给定初始点x0,计算g0=\bigtriangledownf(x0),k=0

    步1:若||gk||<=e,停止运算,输出xk作为最优解

    步2:计算搜索方向dk:

    若k=0,dk=-gk

    若k>=1,dk= -gk+\beta _{_{K-1}}*d_{k-1}       其中   

     \beta _{k-1}=\frac{g_{k}^{'}*gk}{g_{k-1}^{'}*gk}

    步3:用Armijo精确线搜索技术确定搜索步长,具体步骤上一篇文章已经详细介绍。这里不再赘述。算了,还是写吧:

    设置初始参数 ,\delta=(0~1),\sigma=(0~0.5)

    步长\alphak=\delta^mk,m的值从0开始

    若满足不等式f(xk+ \delta^m*dk)<=f(xk)+\sigma*\delta^m*gk'dk

    则 mk=m,步长 \alphak=\delta^mk,若不满足上式,则m=m+1,直到满足上述不等式为止

    步4:令Xk+1=xk+ \alphak*dk,然后计算gk=\bigtriangledownf(xk+1),k=k+1,转步1

     代码实现:

    1.共轭梯度函数

    function [x,val,k]=frcg(fun,gfun,x0)
    %功能:用共轭梯度法求无约束问题 mini f(x)
    %输入:fun,gfun分别是目标函数和梯度,x0是初始点
    %输出:x,val分别是近似最优点和最优值,k表示迭代次数
    k=0;
    maxk=5000;
    rho=0.6;
    sigma=0.4;
    e=1e-5;%精度
    n=length(x0);
    while(k<maxk)
        g=feval(gfun,x0);%求梯度
        itern=k-(n+1)*floor(k/(n+1));%用于重新开始
         itern=itern+1;
           %计算搜索方向
           if(itern==1)
               d=-g;
           else
               beta=(g'*g)/(g0'*g0);
               d=-g+beta*d0;
               gd=g'*d; %当搜索方向不是下降方向时,插入负梯度方向作为搜索方向
               if(gd>=0.0)
                   d=-g;
               end
           end
        if(norm(g)<=e) ,break;end
    m=0;
    mk=0;
    while(m<20)
            if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d);
               mk=m;
               break;
            end
           m=m+1;
    end
         x0=x0+d*rho^mk;
        val=feval(fun,x0);
         g0=g;
         d0=d;
         k=k+1;
    end
    x=x0;
    val=feval(fun,x);
    end

    2.fun函数

    function f= fun(x)
    %目标函数
    f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
    end
    

    3.gfun函数

    function  g=gfun(x)
    %目标函数的梯度
    g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
    end
    

    4.主函数

    %这个问题的精确值是x=(1,1)',f(x)=0;
    clear all
    clc
    x0=[-1.2 1]';
    [x,val,k]=frcg('fun','gfun',x0);
    disp('迭代次数:k=')
    disp(k)
    disp(['最优解:x = '])
    disp(x)
    disp(['此时: f(x) = ',num2str(val)]) 

    5.运行结果

     共轭梯度法通常在迭代n步之后,需要重新取负梯度方向作为搜索方向,因为n步迭代之后共轭梯度法产生的搜索搜索方向一般都不是正确的下降搜索方向,所以在n>m时的第m步时通常会插入负梯度方向作为搜索方向。

    展开全文
  • matlab_FR共轭梯度算法+BFGS拟牛顿算法 求解实例在funf.m中,我是手动求解的g,大家可以自动求。
  • matlab共轭梯度法求目标函数的最小极值-共轭梯度-王.rar 我是地球物理专业的一名学生,把自己实习的作业发上来大家分享下
  • 正定二次函数的共轭梯度法matlab实现 1、算法过程 2、matlab实现 function [X,min_f]=minGRAD(fx,var,x0) %%%输入目标函数(正定二次函数)fx,变量var,初始点x0; %%%采用共轭梯度法计算目标函数的极小值; %%%输出...

    正定二次函数的共轭梯度法matlab实现

    1、算法过程

    在这里插入图片描述

    2、matlab实现

    function [X,min_f]=minGRAD(fx,var,x0)
    %%%输入目标函数(正定二次函数)fx,变量var,初始点x0;
    %%%采用共轭梯度法计算目标函数的极小值;
    %%%输出极小值点X,极小值min_f.
    j=jacobian(fx,var); 
    G=double(jacobian(j,var));
    g0=(double(subs(j,var,x0)))';
    d=-g0;
    x0=x0';
    k=0;
    eps=10^(-5);
    judge=1;
    while judge==1
        if  norm(g0,2)<eps
            break
        end
        lamda=g0'*g0/((d'*G)*d);
        x1=x0+lamda*d;
        g1=(double(subs(j,var,x1')))';
        beta=g1'*g1/(g0'*g0);
        d=-g1+beta*d;
        x0=x1;
        g0=g1;
        k=k+1;
    end
    X=double(x0);
    min_f=double(subs(fx,var,x0'));
    

    3、实例检验

    在这里插入图片描述

    展开全文
  • MATLAB - 共轭梯度法

    万次阅读 多人点赞 2019-10-07 10:25:29
    一、问题描述 求解系数矩阵A是对称正定矩阵的线性方程组或求解二次函数的极... 共轭梯度法,步骤如下: 1 任意给定初始点及精度 2 3 对于,作 1) 2) 3),或 4) 若或,则输出,,取作为的解,否则 ...

    一、问题描述
           求解系数矩阵A是对称正定矩阵的线性方程组 Ax=b或求解二次函数f(x)=\frac{1}{2}x^{T}Ax-b^{T}x的极小值点。

    二、算法

          共轭梯度法,步骤如下:

         1 任意给定初始点x^{^{0}}及精度\varepsilon >0

         2  d^{(0)}=r^{(0)}=b-Ax

         3  对于k=0,1,...,n-1,作

              1)a_{(k)}=\frac{\left \| r^{(k)} \right \|\begin{matrix} 2 \\ 2 \end{matrix}}{<d^{(k)},Ad^{(k)}>}

              2) x^{(k+1)}=x^{(k)}+a_{(k)}d^{(k)}

              3) r^{^{(k+1)}}=b-Ax^{(k+1)} ,或 r^{(k+1)}=b-Ax^{(k+1)}=b-A(x^{(k)}+a_{(k)}d^{(k)})=r^{(k)}-a_{(k)}Ad^{(k)}

              4) 若\frac{\left \| r^{(k+1)} \right \|}{\left \| b \right \|}\leq \varepsilonk+1=n,则输出x^{(k+1)}r^{(k+1)},取r^{(k+1)}作为Ax=b的解,否则

              5)   

                      \beta _{(k+1),k}=\frac{\left \| r^{(k+1)} \right \|\begin{matrix} 2\\ 2 \end{matrix}}{\left \| r^{(k)}\right \|\begin{matrix} 2\\ 2 \end{matrix}}

              6)     d^{(k+1)}=r^{(k+1)}+\beta _{(k+1),k}d^{(k)}.

       MATLAB代码:

    function CGM_main()
    A = [10 1 2 3 4
        1 9 -1 2 -3
        2 -1 7 3 -5
        3 2 3 12 -1
        4 -3 -5 -1 15];
    b=[12 -27 14 -17 12]';
    x0=[0 0 0 0 0]';
    max_iter=10000;
    
    fprintf('\n');
    fprintf('共轭梯度法:\n');
    fprintf('==========================\n');
    [y,iter]=cgm (A,b,x0,max_iter);
    fprintf('\n');
    fprintf('迭代次数:\n   %d \n',iter);
    fprintf('方程的解: \n');
    fprintf('%10.6f',y);
    fprintf('\n\n=========================\n\n');
    end
    
    function [x,iter] = cgm (A,b,x0,max_iter)
    x=x0;
    epsilon=1.0e-6;
    fprintf('\n x0= ');
    fprintf('   %10.6f',x0);
    r=b-A*x;
    d=r;
    for k=0:max_iter
        alpha=(r'*r)/(d'*A*d);
        xx=x+alpha*d;
        rr=b-A*xx;
        if (norm(rr,2)/norm(b,2))<= epsilon
            fprintf('\n 找到啦~');
            iter = k+1;
            x=xx;
            r=rr;
            fprintf('\n x%d = ',k+1);
            fprintf('   %10.6f',x);
            fprintf('\n r%d = ',k+1);
            fprintf('   %10.6f',r);
            
            return
        end
        beta=(rr'*rr)/(r'*r);
        d=rr+beta*d;
        x=xx;
        r=rr;
        fprintf('\n x%d = ',k+1);
        fprintf('   %10.6f',x);
    end
    iter = max_iter;
    return 
    end
    

        运行结果:

    共轭梯度法:
    ==========================
    
     x0=      0.000000     0.000000     0.000000     0.000000     0.000000
     x1 =      1.073560    -2.415510     1.252487    -1.520877     1.073560
     x2 =      1.305605    -2.627981     2.146636    -1.694270     0.442393
     x3 =      1.446618    -2.225384     2.448048    -1.970691     0.620722
     x4 =      1.086550    -2.063574     2.792911    -2.101645     0.836386
     找到啦~
     x5 =      1.000000    -2.000000     3.000000    -2.000000     1.000000
     r5 =      0.000000     0.000000    -0.000000    -0.000000     0.000000
    迭代次数:
       5 
    方程的解: 
      1.000000 -2.000000  3.000000 -2.000000  1.000000
    
    ===================== 

    注:编写MATLAB程序时主函数一定请放在最前面...


    参考文献:
    [1] MATLAB R2014官方手册
    [2] 近代优化方法,徐成贤,陈志平,李乃成编著.科学出版社,2002.
    [3] 最优化方法(第二版).孙文瑜,徐成贤,朱德通编著.高等教育出版社,2010.
     

    展开全文
  • 最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。...共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向仅仅是负梯度方向与上一次接待的搜索方向的组合。
  • 该文件以三阶实对称正定系数矩阵A为例,实现了共轭梯度法(极小化方法)求解Ax=b。可扩展到任意维数。 【注】:资源购买后,如果发现中文注释乱码,请第一时间私信我解决。
  • 对应的MATLAB代码为 function [x,k,error,time]=myssor(A,b,x,w,tol,max_it) %% SSOR迭代算法 %% To solve the equation Ax=b; %% Iterative formula : (D-wL)x_(k+1)=((1-w)D+wU)x_k+wb; (D-...
  • 优化方法种BFGS法以及共轭梯度法MATLAB实现,代码均为本人实现,如有需要请自行下载,下载后请运行run.m文件,欢迎讨论。
  • 共轭梯度法-matlab源码

    千次阅读 2017-12-16 21:31:29
    共轭梯度法源码
  • MATLAB实现共轭梯度法求解

    千次阅读 2019-01-11 06:43:31
    MATLAB实现共轭梯度法求解 一.无约束优化方法 1.1 无约束优化方法的必要性 一般机械优化设计问题,都是在一定的限制条件下追求某一指标为最小,它们都属于约束优化问题。但是为什么要研究无约束优化问题? (1)...
  • Matlab实现FR共轭梯度法

    万次阅读 多人点赞 2015-08-26 00:24:00
    前一段时间学习了无约束最优化方法,今天用Matlab实现了求解无约束最优化问题的FR共轭梯度法。关于共轭梯度法的理论介绍,请参考我的另一篇文章 无约束最优化方法学习笔记。文件testConjungateGradient.m用于测试...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,030
精华内容 412
关键字:

共轭梯度法matlab代码

matlab 订阅