数学建模Matlab代码出错

数学建模,355ml易拉罐最优模型,用matlab求解,在matlab中代码报错,不知道怎么解决,笨蛋一枚
以下是2个目标函数(其中定义b=0.15mm pi=3.1415 v=355000mm3; )

img

img

针对第二个图
做了如下代码

% 定义常量
b = 0.15;
v = 355000;
pi = 3.1415;

% 目标函数
objective = @(x) b*pi*2*x(3)*(x(4)-x(5)-x(6)+x(1)^2) + b*pi*(x(3)+x(1))*sqrt((x(3)-x(1))^2+x(4)^2) + b*pi*(x(2)+x(3))*sqrt((x(3)-x(2))^2+x(5)^2) + b*pi*22*(x(2)^2-x(6)^2);

% 初始猜测
x0 = [0, 0, 0, 0, 0, 0]; % r1、r2、r、h1、h2、h3的初始值

% 约束条件函数
eq1 = @(x) pi*(x(3)^2+x(1)^2+x(3)*x(1))*x(4) + 3*pi*x(3)^2*(x(4)-x(5)-x(6)) + pi*(x(2)^2+x(3)^2+x(2)*x(3))*x(5) - pi/2*x(6)*(3*x(2)^2+x(6)^2) - 3*v;

ineq1 = @(x) 2*x(3)*x(6)/(x(3)^2+x(6)^2) - 0.866;
ineq2 = @(x) 2*x(3)*x(6)/(x(3)^2+x(6)^2) - 1;

ineq3 = @(x) 2*x(3)/x(4) - 0.618;

eq2 = @(x) x(1) - x(2) - 3;

ineq4 = @(x) x(3) - x(1);
ineq5 = @(x) x(4) - x(5) - x(6);

% 构建约束向量
nonlcon = @(x) [
    eq1(x);
    ineq1(x);
    ineq2(x);
    ineq3(x);
    eq2(x);
    ineq4(x);
    ineq5(x);
];

% 优化
options = optimoptions('fmincon', 'Display', 'iter');
[x, fval] = fmincon(objective, x0, [], [], [], [], [], [], nonlcon, options);

% 显示结果
fprintf('最优变量值:\n');
fprintf('r1: %.5f\n', x(1));
fprintf('r2: %.5f\n', x(2));
fprintf('r: %.5f\n', x(3));
fprintf('h1: %.5f\n', x(4));
fprintf('h2: %.5f\n', x(5));
fprintf('h3: %.5f\n', x(6));
fprintf('最优目标值: %.3f\n', fval);

因为没找到Matlab代码模块,上传的时候用的C语言代码块,
以下是Matlab软件显示的报错原因

等号右侧的输出数目不足,不满足赋值要求。

出错 untitled1>@(x)[eq1(x);ineq1(x);ineq2(x);ineq3(x);eq2(x);ineq4(x);ineq5(x)] (第 26 行)
nonlcon = @(x) [

出错 fmincon (第 655 行)
        [ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});

出错 untitled1 (第 38 行)
[x, fval] = fmincon(objective, x0, [], [], [], [], [], [], nonlcon, options);

原因:
    Failure in initial nonlinear constraint function evaluation. FMINCON cannot continue.

求求解T-T

【以下回答由 GPT 生成】

问题的关键在于你想要解决的具体错误是什么。根据你提供的代码,我无法确定代码中是否存在问题。请提供更多关于错误的信息,以便我帮助你解决问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你非线性约束的格式不对,需要返回两个值,帮你改了一下,有用希望点个采纳哦:

clc
clear

% 定义常量
b = 0.15;
v = 355000;
pi = 3.1415;
 
% 目标函数
objective = @(x) b*pi*2*x(3)*(x(4)-x(5)-x(6)+x(1)^2) + b*pi*(x(3)+x(1))*sqrt((x(3)-x(1))^2+x(4)^2) + b*pi*(x(2)+x(3))*sqrt((x(3)-x(2))^2+x(5)^2) + b*pi*22*(x(2)^2-x(6)^2);
 
% 初始猜测
x0 = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1]; % r1、r2、r、h1、h2、h3的初始值
 
% 约束条件函数
% eq1 = @(x) pi*(x(3)^2+x(1)^2+x(3)*x(1))*x(4) + 3*pi*x(3)^2*(x(4)-x(5)-x(6)) + pi*(x(2)^2+x(3)^2+x(2)*x(3))*x(5) - pi/2*x(6)*(3*x(2)^2+x(6)^2) - 3*v;
%  
% ineq1 = @(x) 2*x(3)*x(6)/(x(3)^2+x(6)^2) - 0.866;
% ineq2 = @(x) 2*x(3)*x(6)/(x(3)^2+x(6)^2) - 1;
%  
% ineq3 = @(x) 2*x(3)/x(4) - 0.618;
%  
% eq2 = @(x) x(1) - x(2) - 3;
%  
% ineq4 = @(x) x(3) - x(1);
% ineq5 = @(x) x(4) - x(5) - x(6);
 
% 构建约束向量
% nonlcon = @(x) [
%     eq1(x);
%     ineq1(x);
%     ineq2(x);
%     ineq3(x);
%     eq2(x);
%     ineq4(x);
%     ineq5(x);
% ];
 
% 优化
options = optimoptions('fmincon', 'Display', 'iter');
A = [];
b = [];
Aeq = [];
beq = [];
lb = zeros(1,6);
ub = [];
nonlcon1 = @nonlcon;
[x, fval] = fmincon(objective, x0, A, b, Aeq, beq, lb, ub, nonlcon1, options);
 
% 显示结果
fprintf('最优变量值:\n');
fprintf('r1: %.5f\n', x(1));
fprintf('r2: %.5f\n', x(2));
fprintf('r: %.5f\n', x(3));
fprintf('h1: %.5f\n', x(4));
fprintf('h2: %.5f\n', x(5));
fprintf('h3: %.5f\n', x(6));
fprintf('最优目标值: %.3f\n', fval);

function [c,ceq] = nonlcon(x)
b = 0.15;
v = 355000;
pi = 3.1415;
c = [2*x(3)*x(6)/(x(3)^2+x(6)^2) - 0.866;
     2*x(3)*x(6)/(x(3)^2+x(6)^2) - 1;
     2*x(3)/x(4) - 0.618;
     x(3) - x(1);
     x(4) - x(5) - x(6)];
ceq = [pi*(x(3)^2+x(1)^2+x(3)*x(1))*x(4) + 3*pi*x(3)^2*(x(4)-x(5)-x(6)) + pi*(x(2)^2+x(3)^2+x(2)*x(3))*x(5) - pi/2*x(6)*(3*x(2)^2+x(6)^2) - 3*v;
       x(1) - x(2) - 3];
end