matlab怎么对曲线进行平滑啊?
4个回答
展开全部
MATLAB中绘制平滑曲线一般使用最小二乘法或者B样条插值。
最小二乘法实际上是函数拟合,可以得到目标函数(这里为多项式)的系数,对outliers相对不敏感,缺点是需要预先设置目标函数的阶数,且有时不容易找到最优的目标函数形式。这里使用polyfit()函数进行多项式拟合,其他类似函数,如:lsqlin()不在讨论之列,用法有不同。
B样条插值是一种插值方法,得不到目标函数,但可以最大限度地在光滑的前提下接近采样点,对outliers敏感,只是比一般的多项式插值好点。
对照:plot()函数只是将采样点用直线连接在一起,结果是一条折线。
下面通过一个与条形图结合的实例对最小二乘法(least square)与B样条插值(B spline)进行分析:
1. y1=[15.81292 16.43826 5.696203; 10.91314 8.493151 5.379747; 10.24499 7.945205 8.860759; 12.02673 13.15068 19.62025;...
2. 5.790646 15.89041 37.34177; 7.349666 9.041096 6.012658; 10.69042 10.13699 3.797468; 16.03563 10.68493 5.696203;...
3. 11.13586 8.219178 7.594937];
4. y11=[15.81292,10.91314,10.24499,12.02673,5.790646,7.349666,10.69042,16.03563,11.13586];
5. y12=[16.43826,8.493151,7.945205,13.15068,15.89041,9.041096,10.13699,10.68493,8.219178];
6. y13=[5.696203,5.379747,8.860759,19.62025,37.34177,6.012658,3.797468,5.696203,7.594937];
7. x=[1 2 3 4 5 6 7 8 9];
8.
9. %% bar graph
10.b=bar([y11',y12',y13']);% same with b=bar(y1)
11.grid on;
12.set(gca, 'xticklabel', {'0-20','20-40','40-60','60-80','80-100','100-120','120-140','140-160','160-180'});
13.legend('156C','164C','172C');
14.xlabel('Angle:degree');
15.ylabel('Percentage:%');
16.title('Angle');
17.hold on;
18.
19.%% least square method
20.result1=polyfit(x,y11,3);
21.plot(x,polyval(result1,[1:9]));
22.
23.%% B spline
24.values1 = spcrv([[x(1) x x(end)];[y11(1) y11 y11(end)]],3);
25.plot(values1(1,:),values1(2,:),'b','LineWidth',2);
上例中,y1=y11', y12', y13' 对于bar()函数,使用二者都可以,但是对于least square与B spline,只能将y值分开;另外,bar()函数对于x轴的值有默认值,所以对于bar(),不写x=[...]仍可以执行,但对于least square与B spline,需明确指出x值。
最小二乘法实际上是函数拟合,可以得到目标函数(这里为多项式)的系数,对outliers相对不敏感,缺点是需要预先设置目标函数的阶数,且有时不容易找到最优的目标函数形式。这里使用polyfit()函数进行多项式拟合,其他类似函数,如:lsqlin()不在讨论之列,用法有不同。
B样条插值是一种插值方法,得不到目标函数,但可以最大限度地在光滑的前提下接近采样点,对outliers敏感,只是比一般的多项式插值好点。
对照:plot()函数只是将采样点用直线连接在一起,结果是一条折线。
下面通过一个与条形图结合的实例对最小二乘法(least square)与B样条插值(B spline)进行分析:
1. y1=[15.81292 16.43826 5.696203; 10.91314 8.493151 5.379747; 10.24499 7.945205 8.860759; 12.02673 13.15068 19.62025;...
2. 5.790646 15.89041 37.34177; 7.349666 9.041096 6.012658; 10.69042 10.13699 3.797468; 16.03563 10.68493 5.696203;...
3. 11.13586 8.219178 7.594937];
4. y11=[15.81292,10.91314,10.24499,12.02673,5.790646,7.349666,10.69042,16.03563,11.13586];
5. y12=[16.43826,8.493151,7.945205,13.15068,15.89041,9.041096,10.13699,10.68493,8.219178];
6. y13=[5.696203,5.379747,8.860759,19.62025,37.34177,6.012658,3.797468,5.696203,7.594937];
7. x=[1 2 3 4 5 6 7 8 9];
8.
9. %% bar graph
10.b=bar([y11',y12',y13']);% same with b=bar(y1)
11.grid on;
12.set(gca, 'xticklabel', {'0-20','20-40','40-60','60-80','80-100','100-120','120-140','140-160','160-180'});
13.legend('156C','164C','172C');
14.xlabel('Angle:degree');
15.ylabel('Percentage:%');
16.title('Angle');
17.hold on;
18.
19.%% least square method
20.result1=polyfit(x,y11,3);
21.plot(x,polyval(result1,[1:9]));
22.
23.%% B spline
24.values1 = spcrv([[x(1) x x(end)];[y11(1) y11 y11(end)]],3);
25.plot(values1(1,:),values1(2,:),'b','LineWidth',2);
上例中,y1=y11', y12', y13' 对于bar()函数,使用二者都可以,但是对于least square与B spline,只能将y值分开;另外,bar()函数对于x轴的值有默认值,所以对于bar(),不写x=[...]仍可以执行,但对于least square与B spline,需明确指出x值。
Sievers分析仪
2024-12-30 广告
2024-12-30 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
展开全部
matlab将曲线进行平滑的方法如下:
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');
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');
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x=[0.1 0.16 0.27 0.41 0.48 0.59 0.8];
y=[8 70 118 100 9 0 5];
以上是每一个X和Y对应的坐标,请问如何编程能够绘制平滑曲线,这个图形就像二次函数一样的
如果要在图中绘制一条直线加上y=70的直线,用不同颜色区分!
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];
y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8];
values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);
values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000);
plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')
y=[8 70 118 100 9 0 5];
以上是每一个X和Y对应的坐标,请问如何编程能够绘制平滑曲线,这个图形就像二次函数一样的
如果要在图中绘制一条直线加上y=70的直线,用不同颜色区分!
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];
y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8];
values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);
values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000);
plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
>> 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];
y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8];
values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);
values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000);
plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')
>>
y=[5 9 70 118 100 17 0 5];
y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8];
values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);
values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000);
plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')
>>
更多追问追答
追问
谢谢啊!我这有很长的一组数据,一个一个输进去不太现实啊,该怎么办?不好意思啊,我是初学这个软件!
追答
很长一个数组?这个就。貌似都是可以输入的,这有一篇文章,你可以参考下~~~
http://philotack.blog.163.com/blog/static/37473423201010910230221/
希望可以帮助到你
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询