MATLAB矩阵除法

img

img

MATLAB提示的错误看不懂,x有10行,x-1有10列,前后行列不是相等的吗,为什么除不了呢?

用点乘和点除 .* 和 ./

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7556473
  • 这篇博客你也可以参考下:matlab学习笔记10_3关系运算符和逻辑运算符
  • 除此之外, 这篇博客: 利用 MATLAB 编程实现罚函数法法求解约束最优化问题中的 精度为 10-8,初始点为(10,10)。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • function y=f(x)
    global s;
    if(length(x)==1)
        global xk;
        global pk;
        x=xk+x*pk;
    end
    y=x(1)^2+x(2)^2+s*(x(1)+x(2)-2)^2;

     

    function xk=waifanhanshufa(e,x)
    %step 1
    c=10;
    global s;
    s=1;
    global xk;
    global pk;
    xk=x;
    %没用到k,只存储当前迭代的值。
    %step 2
    while 1
        H=[1 0;0 1];
        xk=DFP_hjfg(1e-4,xk,H);
        if s*(xk(1)+xk(2)-2)^2<e
            return ;
        end
        s=c*s;
    end
        

     

    function y=f(x)
    global r;
    if(length(x)==1)
        global xk;
        global pk;
        x=xk+x*pk;
    end
    y=x(1)^2+x(2)^2+r/(x(1)-1);
    

     不限制一维搜索步长

    function xk=neifanhanshufa(e,x)
    %step 1
    c=0.1;
    global r;
    r=10;
    global xk;
    global pk;
    xk=x;
    %没用到k,只存储当前迭代的值。
    %step 2
    while 1
        %拟牛顿法
        Hk=[1 0;0 1];
        xk=DFP_hjfg(1e-6,xk,Hk);
        if r/(xk(1)-1)<e
            return ;
        end
        r=c*r;
    end
        

     限制一维搜索步长(这里更改了拟牛顿法函数,原函数还是看之前的代码)

    function xk=neifanhanshufa(e,x)
    %step 1
    c=0.1;
    global r;
    r=10;
    global xk;
    global pk;
    xk=x;
    %没用到k,只存储当前迭代的值。
    %step 2
    while 1
        %拟牛顿法
        Hk=[1 0;0 1];
        xk=DFP_hjfg(1e-6,xk,Hk);
        if r/(xk(1)-1)<e
            return ;
        end
        r=c*r;
    end
    
    
    
    function x_=DFP_hjfg(e,x,Hk)
    global xk;
    global pk;
    xk=x;
    %step 1
    g0=shuzhiweifenfa(x);
    %没用到k,只存储当前迭代的值。
    while 1
        %step 2
        pk=-(Hk*g0')';   %默认都是列向量
        %step 3
         %这两个函数见之前代码(matlab无约束最优化的一般算法)
        c_=-(xk(1)-1)/([1,0]*pk');
        a=huangjinfenge(0,abs(c_),10^-4);
        %step 4
        xk=x+a*pk;
        g1=shuzhiweifenfa(xk);
        %step 5
        %范数用的是平方和开根号
        if sqrt(sum(g1.^2))<=e
            x_=xk;
            return;
        end
        if sqrt(sum((x-xk).^2))<=e
            x_=xk;
            return;
        end
        sk=(a*pk)'; %x(k+1)-x(k)=a*pk
        yk=(g1-g0)';
        %step 6
        Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(yk'*sk);
        g0=g1;
        x=xk;
    end

    结果示例:

     

  • 您还可以看一下 苏金明老师的MATLAB数据可视化实现课程中的 三维面积图小节, 巩固相关知识点