Я пытаюсь аппроксимировать различные сигналы с использованием радиальных баз данных. В частности, я использую MATLAB's newrb
.Новинка MATLAB для проектирования радиальных баз данных не ведет себя в соответствии с документацией. Зачем?
Моя проблема в том, что эта функция ведет себя некорректно, если я следую за descriptionnewrb
. Насколько я понимаю, имеет смысл переносить все аргументы, несмотря на документацию.
Следующий пример, надеюсь, иллюстрирует мою проблему.
Я создаю один период синусоидальной волны с 100 образцами. Я хотел бы аппроксимировать эту синусоидальную волну с помощью радиальной сети с максимально двумя скрытыми нейронами. У меня есть один входной вектор (t
) и один целевой вектор (s
). Следовательно, согласно документации, я должен позвонить newrb
с двумя векторами столбца. Однако аппроксимация слишком хороша. Фактически, среднеквадратичная ошибка равна 0, что не может быть правдой, используя только два нейрона. Кроме того, визуализация с view(net)
показывает не только один, но и 100 входов, если я использую столбцовые векторы.
В этом примере векторы, соответствующие «функциональному» (в соответствии с документацией) функциональному вызову, обозначены _doc
, которые соответствуют «неправильному» вызову на _not_doc
.
Может ли кто-нибудь объяснить это поведение?
% one period sine signal with
% carrier frequency = 1, sampling frequency = 100
Ts = 1/100;
t = 2 * pi * (0:Ts:1-Ts); % size(t) = 1 100
s = sin(t); % size(s) = 1 100
% design radial basis network
MSE_goal = 0.0; % mean squared error goal, default value
spread = 1.0; % spread of readial basis functions, default value
max_neurons = 2; % maximum number of neurons, custom value
DF = 25; % number of neurons to add between displays, default value
net_not_doc = newrb(t , s , MSE_goal, spread, max_neurons, DF); % row vectors
net_doc = newrb(t', s', MSE_goal, spread, max_neurons, DF); % column vectors
% simulate network
approx_not_doc = sim(net_not_doc, t);
approx_doc = sim(net_doc, t');
% plot
figure;
plot(t, s, 'DisplayName', 'Sine');
hold on;
plot(t, approx_not_doc, 'r:', 'DisplayName', 'Approximation_{not doc}');
hold on;
plot(t, approx_doc', 'g:', 'DisplayName', 'Approximation_{doc}');
grid on;
legend show;
% view neural networks
view(net_not_doc);
view(net_doc);