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日

悬赏问题

  • ¥15 计算个体的IBS遗传距离
  • ¥15 有什么好的直流步进减速电机42的厂家推荐,保持力矩达到0.3N.M
  • ¥15 一道蓝桥杯的题,请问我错在哪里
  • ¥15 关于#android问题,xposed模块找不到so
  • ¥15 UE5.4.2创建C++项目成功,但是编译失败
  • ¥15 华为手机备份nas,airdisk,遇到的空间不足问题。求个详细的解决方案。
  • ¥20 Cknife无法使用
  • ¥15 这个结构体为什么会出错呢?
  • ¥15 ROH绘图及近交系数的计算
  • ¥15 手动下载基因拼接数据库的渠道