Polynomial Curve Fitting

本文通过Matlab代码示例,详细介绍了如何进行曲线拟合,包括使用sin函数生成观察值,添加高斯噪声,以及利用自定义函数CalcParameter和CalValue进行参数计算与预测值生成的过程。并通过图表直观展示原始数据、真实曲线与拟合结果。

pcf.m

inputSamp = (0:0.1:1)';
result = sin(2*pi*inputSamp);
gsNoise = randn(11,1)*0.1;
observation = result + gsNoise;
x=(0:0.01:1)';
y=sin(2*pi*x);
%{
figure;
plot(inputSamp, observation, '*', x, y, '--r.');
set(gca, 'XLim', [-0.2 1.2]);
set(gca, 'YLim', [-1.5 1.5]);
%}

%Y = w0+w1*x+w2*(x^2)+.....
theta = zeros(4,1);
theta = CalcParameter(inputSamp,observation, theta);
predVal = CalValue(x, theta);
figure;
plot(inputSamp, observation, '*', x, y, '--r.', x, predVal, '--g.');
set(gca, 'XLim', [-0.2 1.2]);
set(gca, 'YLim', [-1.5 1.5]);

CalcParameter.m

function theta = CalcParameter(inputSamp,observation, theta)
MaxIteration = 8000;
alpha = 1;
m = length(theta);
n = length(inputSamp);
data = ones(m, n);
data(1,:)=ones(1, n);
for i = 2:m
    data(i,:) = data(i-1,:).*inputSamp';
end

for i = 1:MaxIteration
    predVal = data'*theta;
    error = predVal - observation;
    grad = data*error;
    theta = theta  - alpha*grad/n;
    er = mean(abs(error));
    fprintf('Iter %d: error : %f\n', i, er);
end

end

CalValue.m

function predVal = CalValue(x, theta)
m = length(theta);
n = length(x);
data = ones(n, m);
for i = 2:m
    data(:,i) = data(:,i-1).*x;
end
predVal = data*theta;
end

 

转载于:https://www.cnblogs.com/doublemystery/p/4175704.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值