0

亲爱的 stackoverflow 社区

我一直在努力解决以下问题。我有这个代码来估计参数与为 Greybox 建模提供的 Matlab 函数。Matlab 没有给我给定的 idnlgrey 元素的阶跃响应。这个怎么可能?如果我编写给定示例之一。我试图更改有关灰盒识别的给定示例之一的代码,并且发生了相同的问题。我真的不明白这里可能是什么问题。

clear all; close all; clc;

ParName = {'a'; ... %3x3
    'b'; ... %3x3
    'c' ... %1x1
    };
ParUnit = {'kg'; 'kg/s'; 'm'};
ParValue = {diag([2652.25; 2825.29; 4201.26]); ...
    diag([848.05; 10161.62; 22719.39]); ...
    100};

FileName = 'boat_c';
Order = [3 2 3];
Parameters = struct('Name', ParName, 'Unit', ParUnit, 'Value', ParValue, 'Minimum', 0, 'Maximum', Inf, 'Fixed', false);
Ts = 0;
InitialStates = struct('Name', {'r'; 's'; 't'}, 'Unit', {'m/s'; 'm/s'; '1/s'}, ...
    'Value', [0; 0; 0], 'Minimum', -Inf, 'Maximum', Inf, 'Fixed', true);
nlgr = idnlgrey(FileName, Order, Parameters, InitialStates, Ts, 'Name', 'Boot', ...
    'InputName', {'x'; 'y'}, 'InputUnit', {'N'; 'rad'}, ...
    'OutputName', {'r'; 's'; 't'}, 'OutputUnit', {'m/s'; 'm/s'; '1/s'}, 'TimeUnit', 's');
step(nlgr)

function [dx, y] = boat_c(t, x, u, m, d, varargin)
 y = [x(1); x(2); x(3)];
 dx = [m(2,2)/m(1,1)*x(2)*x(3)-d(1,1)/m(1,1)*x(1)+u(1)*cos(u(2))/m(1,1); ...
     -m(1,1)/m(2,2)*x(1)*x(3)-d(2,2)*m(2,2)*x(2)+u(1)*sin(u(2))/m(2,2); ...
     (m(1,1)-m(2,2))/m(3,3)*x(1)*x(2)-d(3,3)/m(3,3)*x(3)+L/2*u(1)*sin(u(2))/m(3,3)];
 end
4

0 回答 0