Weighted cubic spline (csaps) -- varying weighting factor
7 次查看(过去 30 天)
显示 更早的评论
%weighted cubic spline
x=0:0.1:10; %input data
y=5*sin(1.5*x);
x2=x;
y2=0.5+(0.5*sin(1.5*x));
pp = csaps(x,y,1,x) %weighted cubic spline
plot(x,y); hold all; plot(x2,y2); hold all; plot(x,pp,'*'); legend('input data','input weighting data','weighted cubic spline') %
I need to modify the above code to use the current y2 value to recursively (for each value of y) update the c-spline weighting factor for each value of y.
i.e. instead of:
pp = csaps(x,y,1,x)
i will have something like:
pp = csaps(x,y,[current_y2_value],x)
so the output spline will have different weights for each value of y.
please can you help
0 个评论
采纳的回答
rmc256
2014-9-2
编辑:rmc256
2014-9-2
Have a close look at the csaps documentation. There are two kinds of weighting factor you can see in the equation under "this smoothing spline f minimizes:", the first, w, operates directly on the squared error, the other, (1-p)*lambda operates on the 2nd derivative of f.
If you are just looking to weight the data with error bars (if y2 are your 1-sigma error bars), for example, you should just input:
pp = csaps(x,y,1,x,1./y2.^2);
If instead you really do want y2 to weight the smoothness of different areas (i.e set p not equal to 1), then you need to create a vector with a p value as the first element, and the 2:end elements as the lambda weighting factor for each knot of x, for example:
pp = csaps(x,y,[0.99,y2(2:end)]);
Again, look closely at the documentation, it makes sense when you sit down and read it all the way through.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Splines 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!