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
拟合出来的参数如下图:

两者相差不大。
实际曲线与拟合曲线的比较如下图:

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

浙公网安备 33010602011771号