You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB R2022b自动电压调节器ANN训练代码报错修复求助

修复MATLAB R2022b中ANN训练代码的minmax报错问题

错误原因

报错Error using minmax: Data is not a matrix or cell array的核心原因是:从Simulink输出的out.input转置后得到的I并非minmax函数要求的二维数值矩阵或cell数组,大概率是Simulink仿真输出的结构体、SimulationOutput对象或其他非数值矩阵类型。

修复步骤

1. 提取Simulink输出中的数值数据

Simulink的仿真输出out通常是Simulink.SimulationOutput对象,输入信号的数值数据存储在signals.values字段中,而非直接取out.input。修改输入输出变量的提取代码:

% 正确提取Simulink输出的数值矩阵
I = out.input.signals.values';
T = out.output.signals.values';

如果out.input包含多个信号,需要将所有信号合并为一个矩阵:

% 多信号合并示例
signal1 = out.input(1).signals.values';
signal2 = out.input(2).signals.values';
signal3 = out.input(3).signals.values';
I = [signal1, signal2, signal3];

2. 验证变量类型

执行以下命令确认I是否为二维数值矩阵:

whos('I');
disp(I);

如果输出显示I的类型为double且维度为[样本数, 特征数],则符合minmax的输入要求。若仍为结构体/对象,可强制转换为数值矩阵:

I = double(out.input.signals.values)';

3. 适配MATLAB新版ANN函数(推荐)

newff是MATLAB旧版神经网络函数,在R2022b中已被feedforwardnet替代,新版函数无需手动传入minmax结果,会自动处理数据归一化,同时兼容性更好:

% 提取正确的数值矩阵
I = out.input.signals.values';
T = out.output.signals.values';

% 使用新版前馈神经网络函数
net = feedforwardnet([3,5], 'trainlm');
% 设置各层激活函数
net.layers{1}.transferFcn = 'logsig';
net.layers{2}.transferFcn = 'tansig';
% 训练参数设置
net.trainParam.show = 1;
net.trainParam.epochs = 10000;
net.trainParam.goal = 1e-12;
% 启动训练
net = train(net, I, T);

关键注意点

  • 非Simulink数据的代码正常运行,说明问题仅出在Simulink数据的提取环节,重点排查out.input的结构
  • 若minmax仍报错,可手动计算输入数据的极值范围,替代minmax(I):
input_min = min(I, [], 1);
input_max = max(I, [], 1);
net = newff([input_min; input_max], [3,5,1], {'logsig','tansig','purelin'}, 'trainlm');

内容的提问来源于stack exchange,提问作者HAKEEM BIN HAMZAH STUDENT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:45:23