MATLAB曲线拟合

问题:有一组测试数据x和y,已知x和y的关系为:y = C1 + C2 * lg(x),要根据测试数据x和y来确定表达式中C1和C2的值。

方法:对测试数据x和y进行曲线拟合,使用函数lsqcurvefit()

代码

 1 % 构造测试数据x和y
 2 coef1 = 0.4;
 3 coef2 = -1.9;
 4 x = 1 : 100;
 5 y = coef1 + coef2 * log(x);
 6 y = y + 0.5 - rand(1, 100); % 对y加上随机偏差
 7 
 8 % 定义函数句柄, 此表达式与x和y之间的关系形式一致, 带两个待定参数C(1)和C(2)
 9 func = @(C, x)C(1) + C(2) * log(x);
10 
11 % 利用测试数据x和y进行曲线拟合, 计算出参数C(1)和C(2)
12 C = lsqcurvefit(func, [0, 0], x, y);
13 
14 % 利用求得的参数C(1)和C(2)计算拟合曲线
15 y_fit = func(C, x);
16 
17 % 比较拟合曲线与实际曲线
18 figure('Name', '曲线拟合');
19 plot(x, y, 'b', x, y_fit, 'r');
20 legend('实际曲线', '拟合曲线');

结果
程序中构造测试数据x和y时使用的实际参数是:

coef1 = 0.4

coef2 = -1.9

拟合出来的参数如下图:

两者相差不大。

实际曲线与拟合曲线的比较如下图:

 

存疑:曲线拟合的原理不甚清楚

posted @ 2015-06-22 22:41  南柯一夢  阅读(735)  评论(0)    收藏  举报