您的位置 首页 > 数码极客

如何用matlab进行非线性曲线拟合

案例背景

在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模。在这种情况下,可以建立BP神经网络表达这些非线性系统。该方法把未知系统看成一个黑箱,首先用系统输入输出数据训练神经网络,是网络能够表达函数,然后就可以用训练好的BP神经网络预测系统输出。

举例拟合的非线性函数为

z=X^2+y^2

函数图像为:

clc,clear

x=-5:0.01:5;

[x,y]=meshgrid(x);

z=x.^2+y.^2;

mesh(x,y,z)

利用MATLAB自带的工具箱实现,贴一下代码:

x1=unifrnd(-5,5,1,2000);

x2=unifrnd(-5,5,1,2000);

y=x1.^2+x2.^2;

input=[x1',x2'];

output=y';

k=rand(1,2000);

[m,n]=sort(k);

input_train=input(n(1:1900),:)';

output_train=output(n(1:1900),:)';

input_test=input(n(1901:2000),:)';

output_test=output(n(1901:2000),:)';

%训练数据归一化

[inputn,inputs]=mapminmax(input_train);

[outputn,outputs]=mapminmax(output_train);

%bp神经网络构建

net=newff(inputn,outputn,[5,5]);

%网络配置参数

net.;

net.;

net.;

%train

net=train(net,inputn,outputn);

%预测数据归一化

inputn_test=mapminmax('apply',input_test,inputs);

%bp神经网络预测输出

an=sim(net,inputn_test);

%输出数据反归一化

BPoutput=mapminmax('reverse',an,outputs);

figure(1)

plot(BPoutput,'r-*')

legend('预测输出')

hold on

plot(output_test,'g--')

legend('实际')

结果:

在迭代次数十次左右就已经达到了精度要求;

可以看出拟合结果非常好,预测输出和实际值基本重合。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何用matlab进行非线性曲线拟合”边界阅读