找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2965|回复: 0
打印 上一主题 下一主题
收起左侧

matlab中实现最小二乘拟合函数曲线

[复制链接]
跳转到指定楼层
楼主
ID:216631 发表于 2017-7-2 20:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过矩阵计算的方式实现用最小二乘法拟合高次函数曲线

matlab源程序如下:
  1. clc;
  2. clear;
  3. close all;
  4. %% 取样并代入曲线

  5. x_all = 0:0.01:1.81;
  6. [y_truth_all,y_all]=unknown_model1(x_all);

  7. N = length(x_all);

  8. %用前半段取样点训练并显示理想值
  9. x = x_all(1:N/2);
  10. y = y_all(1:N/2);
  11. y_truth = y_truth_all(1:N/2);

  12. plot(x,y_truth,'g-x','LineWidth',1.5);
  13. hold on;
  14. plot(x,y,'m-x','LineWidth',1.5);
  15. legend('model truth','observation');
  16. title('training');

  17. %% 二阶曲线拟合
  18. X = [x.^2;x;ones(1,length(x))]';
  19. Y = y';
  20. lambda1 = (X'*X)\X'*Y;
  21. % evaluate the esimated model
  22. ye1 = X*lambda1;
  23. hold on;
  24. plot(x,ye1,'c-o','LineWidth',1.5);
  25. legend('model truth','observation', 'order-2 poly fitting');
  26. %% 四阶曲线拟合
  27. X = [x.^4;x.^3;x.^2;x;ones(1,length(x))]';
  28. Y = y';
  29. lambda2 = (X'*X)\X'*Y;
  30. % evaluate the esimated model
  31. ye2 = X*lambda2;
  32. hold on;
  33. plot(x,ye2,'r-o','LineWidth',1.5);
  34. legend('model truth','observation', 'order-2 poly fitting','order-4 poly fitting');

  35. %% 八阶曲线拟合
  36. X = [x.^8;x.^7;x.^6;x.^5;x.^4;x.^3;x.^2;x;ones(1,length(x))]';
  37. Y = y';
  38. lambda3 = (X'*X)\X'*Y
  39. % evaluate the esimated model
  40. ye3 = X*lambda3;
  41. a=ye3'-y;
  42. a1=20*log10(a);
  43. hold on;
  44. plot(x,ye3,'b-o','LineWidth',1.5);
  45. xlabel('Fs');
  46. ylabel('幅频值');
  47. legend('model truth','observation', 'order-2 poly fitting','order-4 poly fitting','order-8 poly fitting');
  48. %拟合的1/sinc曲线与理想曲线的误差范围
  49. figure;
  50. plot(x,-20*log10(y./abs(a)));
  51. xlabel('Fs');
  52. ylabel('1/sinc拟合误差(dB)');
  53. title('1/sinc拟合误差');
  54. %% 补偿后的误差
  55. b=ye3'.*sinc(x);
  56. figure;
  57. subplot(2,1,1);
  58. plot(x,sinc(x),x,b);
  59. xlabel('Fs');
  60. ylabel('幅频');
  61. title('补偿后对比');
  62. subplot(2,1,2);
  63. plot(x,-20*log10(1./(1-b)));
  64. xlabel('Fs');
  65. ylabel('补偿后的误差(dB)');
  66. title('补偿后的误差');
  67. %% show future trends

  68. %X = [x_all;ones(1,length(x_all))]';
  69. %ye1 = X*lambda1;
  70. %X = [x_all.^3;x_all.^2;x_all;ones(1,length(x_all))]';
  71. %ye2 = X*lambda2;
  72. %X = [x_all.^5;x_all.^4;x_all.^3;x_all.^2;x_all;ones(1,length(x_all))]';
  73. %ye3 = X*lambda3;
  74. %figure;
  75. %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);
  76. %legend('model truth','observation', 'order-1 poly fitting','order-3 poly fitting', 'order-5 poly fitting');
  77. %title('testing');
  78. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
demo_experiment1.zip (933 Bytes, 下载次数: 11)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表