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

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')

你好,这个有两种方法解决,第一种是写成多个文件,即
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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632