m0_65965399 2022-02-17 16:22 采纳率: 100%
浏览 15
已结题

这个代码显示错误是参数不足,改怎么改?

function f=fun1(x);
f=x.^2+8;
function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^3-20];
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^-3];
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

  • 写回答

2条回答 默认 最新

  • 技术专家团-Joel 2022-02-17 18:24
    关注

    你好,这个有两种方法解决,第一种是写成多个文件,即
    fun1.m文件里面有

    function f=fun1(x);
    f=x(1)^2+x(2)^2+x(3)^2+8;
    end
    

    fun2.m文件里面有

    function [g,h]=fun2(x);
    g=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(3)^3-20];
    h=[-x(1)-x(2)^2+2
    x(2)+2*x(3)^-3];
    end
    

    然后main.m文件里面有

    [x,y]=fmincon(@fun1,rand(3,1),[],[],[],[],zeros(3,1),[],@fun2)
    

    第二种方法是直接写成一个文件,保存为main.m:

    function main
    [x,y]=fmincon(@fun1,rand(3,1),[],[],[],[],zeros(3,1),[],@fun2)
    end
    
    function f=fun1(x);
    f=x(1)^2+x(2)^2+x(3)^2+8;
    end
    
    function [g,h]=fun2(x)
    g=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(3)^3-20];
    h=[-x(1)-x(2)^2+2
    x(2)+2*x(3)^-3];
    end
    

    然后关键是目标函数应该写成我给出的fun1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月17日