matlab生成一个带噪声的正弦 曲线并使用神经网络进行拟合
时间: 2023-08-04 18:05:48 浏览: 264
基于matlab给图片添加了正弦噪声,消除噪声
5星 · 资源好评率100%
以下是一个简单的示例,展示如何使用MATLAB生成带噪声的正弦曲线,并使用神经网络进行拟合。
首先,我们生成一个包含噪声的正弦曲线。在这个示例中,我们将使用一个频率为1 Hz,振幅为1的正弦波,并加入标准差为0.1的高斯噪声。
```matlab
% 生成正弦波
t = 0:0.01:2*pi;
y = sin(t);
% 添加高斯噪声
noise = 0.1*randn(size(t));
y_noisy = y + noise;
% 绘制结果
plot(t,y_noisy)
hold on
plot(t,y,'LineWidth',2)
legend('带噪声的正弦曲线','原始正弦曲线')
```
接下来,我们使用神经网络进行拟合。在这个示例中,我们使用一个具有一个隐藏层的前馈神经网络。输入是时间序列,输出是对应的正弦值。我们将使用50个神经元作为隐藏层,并且训练100个时期。
```matlab
% 创建一个前馈神经网络
net = feedforwardnet(50);
% 将数据分为训练集和测试集
train_pct = 0.8;
train_ind = 1:round(train_pct*length(t));
test_ind = (length(train_ind)+1):length(t);
x_train = t(train_ind);
y_train = y_noisy(train_ind);
x_test = t(test_ind);
y_test = y_noisy(test_ind);
% 训练神经网络
net = train(net,x_train,y_train);
% 使用测试数据评估神经网络性能
y_pred = net(x_test);
rmse = sqrt(mean((y_pred - y_test).^2));
fprintf('RMSE=%.3f\n', rmse)
% 绘制结果
y_pred_all = net(t);
plot(t,y_pred_all,'LineWidth',2)
legend('带噪声的正弦曲线','原始正弦曲线','神经网络拟合曲线')
```
此时,我们可以看到神经网络已经成功地拟合了带噪声的正弦波,并且在测试数据上获得了一个相对较小的RMSE值。
阅读全文