fmincon函数的决策变量可以是二维矩阵,但不建议是高维矩阵

1)二维矩阵代码

c 复制代码
clear all
clc

% 定义目标函数
fun = @(x) sum(sum(x.^2));

% 初始矩阵
x0 = 2 + rand(2, 2);

% 定义空的线性不等式约束
A = [];
b = [];

% 定义空的线性等式约束
Aeq = [];
beq = [];

% 定义变量的上下界
lb = ones(2,2);
ub = [];

% 使用 fmincon 求解
options = optimoptions('fmincon', 'Display', 'iter');
[x_opt, fval_opt] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, [], options);

% 显示最优解和最优值
disp('最优解:');
disp(x_opt);
disp('最优值:');
disp(fval_opt);

2)运行结果

由此可见,确实可计算得到最优解!.

3)高维矩阵代码(五维)

c 复制代码
clear all
clc

% 定义目标函数
fun = @(x) sum(sum(sum(sum(sum(x.^2)))));

% 初始矩阵(五维)
x0 = 2 + rand(2, 2, 2, 2, 2);

% 定义空的线性不等式约束
A = [];
b = [];

% 定义空的线性等式约束
Aeq = [];
beq = [];

% 定义变量的上下界
lb = ones(2, 2, 2, 2, 2);
ub = [];

% 使用 fmincon 求解
options = optimoptions('fmincon', 'Display', 'iter');
[x_opt, fval_opt] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, [], options);

% 显示最优解和最优值
disp('最优解:');
disp(x_opt);
disp('最优值:');
disp(fval_opt);

4)运行结果

此外,即使是凸优化问题,fmin仍可能会显示求得"Local minimum found that satisfies the constraints."

5)需要注意:非常不建议fmin中使用高维矩阵(三维及三维以上)

前述案例中的目标函数太简单,不具有泛化意义。因此,我更换了一组复杂一些的目标函数和约束条件,并应用在三维矩阵上,然后发现各种报错:

分析报错原因:第一轮迭代时,"决策变量"是初始的高维矩阵( 4 ∗ 3 ∗ 4 4*3*4 4∗3∗4维矩阵);但在第二轮迭代时,目标函数中的"决策变量"、以及非线性约束中的"决策变量",就全部变为二维矩阵了!(因为第一轮迭代的结果,会以二维矩阵的形式来存储!所以,在第二轮迭代时,决策变量又变成了 4 ∗ 12 4*12 4∗12维的二维矩阵!)

因此,建议fmin中的决策变量,最高维度只设为二维矩阵!!不建议设成高维矩阵!!

相关推荐
Dev7z19 小时前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
fengfuyao9851 天前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
机器学习之心1 天前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
rit84324991 天前
基于MATLAB的环境障碍模型构建与蚁群算法路径规划实现
开发语言·算法·matlab
hoiii1871 天前
MATLAB SGM(半全局匹配)算法实现
前端·算法·matlab
yong99901 天前
MATLAB面波频散曲线反演程序
开发语言·算法·matlab
yugi9878381 天前
基于MATLAB的一键式EMD、EEMD、CEEMD和SSA信号去噪实现
开发语言·matlab·信号去噪
youcans_1 天前
【STM32-MBD】(15)Simulink 模型开发之三相互补 PWM
stm32·单片机·嵌入式硬件·matlab·foc
机器学习之心1 天前
基于CNN-GRU(卷积神经网络-门控循环单元)的多变量负荷预测模型MATLAB代码
matlab·cnn·gru
3GPP仿真实验室1 天前
【Matlab源码】6G候选波形:OFDM-IM 索引调制仿真平台
开发语言·matlab