Help: Smooth a curve generated from a group of specified points
1 次查看(过去 30 天)
显示 更早的评论
Hi,
I have 2 vector of x, y coodinates of points
x=[0 50 935 1870 1935 2805 3740 4675 5610 6545 6746 7480 7911 8415 8590 9004];
y=[300 600 716 892 900 990 1052 1071 1037 934 900 736 600 393 300 0];
length(x)=length(y)=16.
The first curve is generated by plot(x,y).
Because I want to smooth the orginal curve. From x, y vectors, I want to generate x', y' vectors with length(x')=length(y')=101. And the second curve is generated by plot(x',y').
Could someone please help me to do this?
I also created a script to do it, but the result wasn't same as the one I want.
My script:
clc
clear all
x=[0 50 935 1870 1935 2805 3740 4675 5610 6545 6746 7480 7911 8415 8590 9004];
y=[300 600 716 892 900 990 1052 1071 1037 934 900 736 600 393 300 0];
plot(x,y,'-o');
xnew=linspace(x(1),x(end),101);
ynew=spline(x,y,xnew);
figure
plot(xnew,ynew,'--o');
The curve generated by plot(x,y):
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/145441/image.png)
The curve generated by plot(x',y'):
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/145442/image.png)
The result I want to get:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/145443/image.png)
Khanh.
0 个评论
采纳的回答
Star Strider
2014-9-18
Using interp1 with the 'pchip' method will get you closer:
xi = linspace(min(x),max(x),101);
yi = interp1(x, y, xi, 'pchip');
figure(1)
plot(x, y, '+r')
hold on
plot(xi, yi)
hold off
grid
I experimented with resample, even though it is intended for signal processing. It is definitely not appropriate here.
更多回答(1 个)
Salaheddin Hosseinzadeh
2014-9-18
Hello Khanh, Please try to use resample rather than spline
doc resample
Simply resample your x and y value with same factor and then plot them.
Good Luck!
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!