Я применил свой код к данным simplenarx_dataset. Для этого я выполнил следующие шаги:

1 — Я сделал пики автокорреляции и кросс-корреляции, чтобы увидеть, что это дает нам больше информации. ID = 1, FD = 1

2 — я нашел H, где H = 5

3 — Я создал сеть и оценил детали. Хотя цель этого поста не в том, чтобы оценить детали, а в том, чтобы понять, почему вы видите задержку ответа при выполнении closeloop, а в общедоступных деталях и коде. В случае чрезвычайной ситуации есть какая-то другая ошибка: Мой код выглядит следующим образом (я использовал 80 данных для обучение сети и 20 для проверки с помощью closeloop):

p=p’;

t=t’;

p1=p(1:1,1:80);

р2=р(1:1,81:конец);

t1=t(1,1:80);

t2=t(1,81:конец);

inputSeries = tonndata (p1, правда, ложь);

targetSeries = tonndata(t1,true,false);

входные задержки = 1:1;

обратная связьЗадержки = 1:1;

размер скрытого слоя = 5;

net = narxnet (inputDelays, feedbackDelays, hiddenLayerSize);

[inputs, inputStates, layerStates, target] = preparets (net, inputSeries, {}, targetSeries);

net.divideFcn='разделить блок';

net.divideParam.trainRatio=0,70;

net.divideParam.valRatio=0,15;

net.divideParam.testRatio=0,15;

[IN]=размер(p1);

[O N]=размер(t1);

N=N-1;

Neq=N*O;

ID=1;

FD=1;

Nw = (ID*I+FD*O+1)*hiddenLayerSize+(hiddenLayerSize+1)*O;

Ntrneq = N-2*раунд(0,15*N);

Ndof=Ntrneq-Nw;

ttotal=t1(1,1:N);

MSE00 = среднее (var (ttotal, 1));

MSE00a=среднее (var(ttotal,0));

t3=t(1,1:N);

[trainInd, valInd, testInd] = разделяемый блок (t3, 0,7, 0,15, 0,15);

MSEtrn00 = среднее (вар (trainInd, 1));

MSEtrn00a=mean(var(trainInd,0));

MSEval00 = среднее (вар (valInd, 1));

MSEtst00 = среднее (вар (testInd, 1));

net.trainParam.goal = 0,01*Ndof*MSEtrn00a/Ntrneq;

[net,tr,Ys,Es,Xf,Af] = train(net,inputs,targets,inputStates,layerStates);

выходы = сеть (входы, inputStates, LayerStates);

ошибки = gsubtract (цели, выходы);

MSE = выполнить (сеть, цели, результаты);

MSEa=Neq*MSE/(Neq-Nw);

R2=1-МСЭ/МСЭ00;

R2a=1-MSEa/MSE00a;

MSEtrn=tr.perf(конец);

MSEval=tr.vperf(конец);

MSEtst=tr.tperf(конец);

R2trn=1-MSEtrn/MSEtrn00;

R2trna=1-MSEtrn/MSEtrn00a;

R2val=1-MSEval/MSEval00;

R2tst=1-MSEtst/MSEtst00;

и мои результаты:

ID=1

FD=1

H=5

N=79

Nдоф=34

Некв=79

Ntrneq=55

Nw=21

O=1

I=1

R2=0.8036

R2a=0.7347

R2трн=0,8763

R2трна=0,8786

R2val=0,7862

R2tст=0,7541

Как я упоминал ранее, я не буду уделять много внимания точности ответа, но позже. Код, который я применил для closeloop, был:

сеть = замкнутый цикл (сеть);

netc.name = [net.name ' — Замкнутый цикл'];

вид (нетк)

Количество прогнозов = 15;

s=cell2mat(inputSeries);

t4=cell2mat(целевая серия);

a=s(1:1,79:80);

b=p2(1:1,1:15);

новыйInputSeries=[а б];

c=t4(1,80);

д = нан (1,16);

новыйTargetSet=[с д];

newInputSeries = tonndata (newInputSeries, правда, ложь);

newTargetSet=tonndata(newTargetSet,true,false);

[xc,xic,aic,tc] = preparets(netc,newInputSeries,{},newTargetSet);

yPredicted = sim(netc,xc,xic,aic);

w=cell2mat(yPredicted);

plot(cell2mat(yPredicted),'DisplayName','cell2mat(yPredicted)','YdataS

ource’,’cell2mat(yPredicted)’);figure(gcf)

сюжет(t2,’r’,’DisplayName’,’targetsComprobacion’)

Подожди

сюжет(w,'b','DisplayName','salidasIteradas')

название ({'ИТЕРАЦИОНЕС'})

легенда («показать»)

откладывать

и в результате получился график, который вы указали по ссылке ниже, где вы его увидите:

http://www.subirimagenes.com/otros-simenarx-8376264.html

На этом рисунке мы видим, что синяя линия (прогнозируемые выходные данные линии) отстает от красной линии (реальные цели). Я хотел бы знать, как я могу сделать так, чтобы синяя линия находилась перед красной линией, то есть выйти на один шаг раньше. Как я уже сказал, в этом посте я хочу сосредоточиться на том, почему это происходит и как я могу это исправить.

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

% 1. Выбранные конечные точки с запятой могут быть удалены для облегчения отладки

[P, T ] = simplenarx_dataset;
 whos
 p= cell2mat(P);
 t = cell2mat(T);
 ID = 1:1
 FD = 1:1
 H = 5
 NID= length(ID)
 NFD=length(FD)
 Nw = (NID*I+NFD*O+1)*H+(H+1)*O

% 2. Использовать NID и NFD для Nw в случае, если задержки не одиночные

% 3. Нет необходимости использовать tonndata, потому что набор simplenarx_data сразу готов к подготовке.

% 4. Нет необходимости в (p1,t1) и (p2,t2). Удалите оба.

% 5. Задержки ввода не оптимальны. Вы пытались найти значительные задержки функции взаимной корреляции цель/вход?

% 6. Задержки обратной связи не оптимальны. Вы пытались найти значительные лаги целевой автокорреляционной функции?

% 7. H неоптимален. Был ли он выбран с использованием субоптимальных задержек? Если да, то объясните как.

rng(0)
 net = narxnet(ID,FD,H);
 [inputs,inputStates,layerStates,targets] = preparets(net,P,{},T);
 whos P T inputs inputStates layerStates targets

%8. N=N-1: УДАЛИТЬ. НЕ ХОРОШО ИСПОЛЬЗОВАТЬ ИМЯ ПЕРЕМЕННОЙ ИЛИ ПАРАМЕТРА В ОБЕИХ СТОРОНАХ УРАВНЕНИЯ. КРОМЕ ТОГО, ПОДГОТОВКА ВЫВОДИТ ПРАВИЛЬНЫЕ РАЗМЕРЫ

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ

https://www.matlabsolutions.com/resources/as-predicted-delayed-outputs-settle-in-narx.php