有两种方法可以画平滑曲线,第一种是拟合的方法,第二种是用spcrv。
其实原理应该都一样就是插值。下面是源程序,大家可以根据需要自行选择,更改拟合的参数。
clc,clear
a = 1:1:6 %横坐标
b = [8.0 9.0 10.0 15.0 35.0 40.0]%纵坐标
plot(a, b, 'b') %自然状态的画图效果
hold on
%第一种,画平滑曲线的方法
c = polyfit(a, b, 2) %进行拟合,c为2次拟合后的系数
d = polyval(c, a, 1) %拟合后,每一个横坐标对应的值即为d
plot(a, d, 'r') %拟合后的曲线
plot(a, b, '*') %将每个点 用*画出来
hold on
%第二种,画平滑曲线的方法
values = spcrv([[a(1) a a(end)][b(1) b b(end)]],3)
plot(values(1,:),values(2,:), 'g')
方法一:转自yihandk666
x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8]
y=[5 9 70 118 100 17 0 5]
那么用plot画出的函数为折线,如下图:
要想把那个折点平滑掉。像论文中那样,具体采用样条函数:下面是样条函数的定义:
spline function 一类分段(片)光滑、并且在各段交接处也有一定光滑性的函数。简称样条。样条一词来源于工程绘图人员为了将一些指定点连接成一条光顺曲线所使用的工具,即 富有d性的细木条或薄钢条。由这样的样条形成的曲线在连接点处具有连续的坡度与曲率。分段低次多项式、在分段处具有一定光滑性的函数插值就是模拟以上原理 发展起来的,它克服了高次多项式插值可能出现的振荡现象,具有较好的数值稳定性和收敛性,由这种插值过程产生的函数就是多项式样条函数。
大概意思就是让转折点变平滑,下面就是采用这种方式:
values = spcrv([[x(1) x x(end)][y(1) y y(end)]],3)
plot(values(1,:),values(2,:))
具体里面的原理我也没看过,不过目的是达到了 下面是结果
方法二:转自greatdju
figure:
x1=[0.8395 0.7995 0.7895 0.7867 0.7857 0.7853 0.7847 ]
y1=[1.11E-01 4.64E-02 1.19E-03 1.77E-04 1.57E-05 3.45E-06 2.55E-07 ]
subplot(1,2,1)
semilogy(x1,y1) %原来的折线
title('左边:原来的折线')
x2=linspace(min(x1),max(x1))
y2=interp1(x1,y1,x2,'cubic')
subplot(1,2,2)
semilogy(x2,y2) %处理后的曲线
title('右边:处理后的曲线')
cad软件画光滑曲线可以使用样条曲线,步骤如下:
第一:现将所画曲线的点定出来
第二:在cad左侧工具栏中选择“样条曲线”命令
第三:根据命令行提示“指定第一个点”
第四:指定第一个点之后,根据命令行提示“指定下一个点”
第五:根据命令行提示,将三个点依次指定,最后连续三次敲击空格键结束
通过以上步骤,绘制一条光滑曲线完成
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)