通过矩阵计算的方式实现用最小二乘法拟合高次函数曲线
matlab源程序如下:
- clc;
- clear;
- close all;
- %% 取样并代入曲线
- x_all = 0:0.01:1.81;
- [y_truth_all,y_all]=unknown_model1(x_all);
- N = length(x_all);
- %用前半段取样点训练并显示理想值
- x = x_all(1:N/2);
- y = y_all(1:N/2);
- y_truth = y_truth_all(1:N/2);
- plot(x,y_truth,'g-x','LineWidth',1.5);
- hold on;
- plot(x,y,'m-x','LineWidth',1.5);
- legend('model truth','observation');
- title('training');
- %% 二阶曲线拟合
- X = [x.^2;x;ones(1,length(x))]';
- Y = y';
- lambda1 = (X'*X)\X'*Y;
- % evaluate the esimated model
- ye1 = X*lambda1;
- hold on;
- plot(x,ye1,'c-o','LineWidth',1.5);
- legend('model truth','observation', 'order-2 poly fitting');
- %% 四阶曲线拟合
- X = [x.^4;x.^3;x.^2;x;ones(1,length(x))]';
- Y = y';
- lambda2 = (X'*X)\X'*Y;
- % evaluate the esimated model
- ye2 = X*lambda2;
- hold on;
- plot(x,ye2,'r-o','LineWidth',1.5);
- legend('model truth','observation', 'order-2 poly fitting','order-4 poly fitting');
- %% 八阶曲线拟合
- X = [x.^8;x.^7;x.^6;x.^5;x.^4;x.^3;x.^2;x;ones(1,length(x))]';
- Y = y';
- lambda3 = (X'*X)\X'*Y
- % evaluate the esimated model
- ye3 = X*lambda3;
- a=ye3'-y;
- a1=20*log10(a);
- hold on;
- plot(x,ye3,'b-o','LineWidth',1.5);
- xlabel('Fs');
- ylabel('幅频值');
- legend('model truth','observation', 'order-2 poly fitting','order-4 poly fitting','order-8 poly fitting');
- %拟合的1/sinc曲线与理想曲线的误差范围
- figure;
- plot(x,-20*log10(y./abs(a)));
- xlabel('Fs');
- ylabel('1/sinc拟合误差(dB)');
- title('1/sinc拟合误差');
- %% 补偿后的误差
- b=ye3'.*sinc(x);
- figure;
- subplot(2,1,1);
- plot(x,sinc(x),x,b);
- xlabel('Fs');
- ylabel('幅频');
- title('补偿后对比');
- subplot(2,1,2);
- plot(x,-20*log10(1./(1-b)));
- xlabel('Fs');
- ylabel('补偿后的误差(dB)');
- title('补偿后的误差');
- %% show future trends
- %X = [x_all;ones(1,length(x_all))]';
- %ye1 = X*lambda1;
- %X = [x_all.^3;x_all.^2;x_all;ones(1,length(x_all))]';
- %ye2 = X*lambda2;
- %X = [x_all.^5;x_all.^4;x_all.^3;x_all.^2;x_all;ones(1,length(x_all))]';
- %ye3 = X*lambda3;
- %figure;
- %plot(x_all,y_truth_all,'g-x',x_all,y_all,'m-x',x_all,ye1,'c-o',x_all,ye2,'r-o',x_all,ye3,'b-o','LineWidth',1.5);
- %legend('model truth','observation', 'order-1 poly fitting','order-3 poly fitting', 'order-5 poly fitting');
- %title('testing');
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
demo_experiment1.zip
(933 Bytes, 下载次数: 11)
|