失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > matlab 平滑曲线连接_兔学 | MATLAB由离散数据点绘制曲线图像

matlab 平滑曲线连接_兔学 | MATLAB由离散数据点绘制曲线图像

时间:2021-10-19 13:46:56

相关推荐

matlab 平滑曲线连接_兔学 | MATLAB由离散数据点绘制曲线图像

今天写机械设计的带传动实验报告时,需要绘制滑动曲线ε-F和效率曲线η-F的关系曲线——

正在学MATLAB的我内心狂喜,直接复制表格中的数据,掏出了plot函数

>> S=[0.348.55.5

0.364.64.8

0.380.63

0.780.63.3

4.277.73.7

7.375.83.8

10.173.54.0

13.471.34.2

17.667.64.5

22.164.04.5]

>> plot(S(:,3),S(:,1),'r',S(:,3),S(:,2),'b')

然后出现了这个邪性玩意儿……

怎么还带拐的……

我定睛一看,原来作为自变量的F没有按顺序排列。plot(x,y)会根据点出现的顺序连接,绘制图像。

那么要如何对数据进行排序呢?

如同在Excel中一样,MATLAB也有函数可以以某一列为标准对矩阵进行行位置的调换。

>> S=sortrows(S,3)%S是待变化矩阵,3是列序号

大量数据排序前

大量数据排序后

这样就可以得到结果:

0.3000 80.6000 3.0000

0.7000 80.6000 3.3000

4.2000 77.7000 3.7000

7.3000 75.8000 3.8000

10.1000 73.5000 4.0000

13.4000 71.3000 4.2000

17.6000 67.6000 4.5000

22.1000 64.0000 4.5000

0.3000 64.6000 4.8000

0.3000 48.5000 5.5000

有了这个整理过的数据,我们就可以掏出plot了——

虽然但是……怎么感觉哪里怪怪的……

绘制滑动曲线ε-F和效率曲线η-F的关系曲线……

绘制滑动曲线和效率曲线……

绘制曲线……

曲线……

这怎么看都是折线啊喂!!

咳咳,毕竟是学过《科学计算与MALTLAB》的兔,说到根据离散数据点画平滑曲线,立刻就想到要掏出Polyfit进行拟合。

在不是很严谨的场合,多项式拟合可以满足你的大部分需求……

>> F=S(:,3)'

>> e=S(:,1)'

>> n=S(:,2)'

%先把数据搬运一下,便于取用

>> c1 = polyfit(F, e, 3);

%进行拟合,数字代表拟合阶数,如果为1,则为线性拟合

%结果是拟合得到的系数

>> ee=polyval(c1,F,1);

%拟合后,计算每一个横坐标对应的值ee

>> c2 = polyfit(F, n, 3);

>> nn=polyval(c2,F,1);

%同理对η-F曲线也进行拟合

>> plot(F,ee,'r',F,nn,'b')

结果还挺漂亮的

变量好多好烦,还有没有更直接的画法呢?

善用搜索的小兔找到了spcrv函数。

>> values1=spcrv([[F(1) FF(end)];[e(1) e e(end)]],3);

>> values2=spcrv([[F(1) F F(end)];[n(1) n n(end)]],3);

%两个value是矩阵,第一行表示x值,第二行表示y值

>>plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b');

通过help得知,spcrv()可以直接生成B样条曲线,对比基于最小二乘法的polifit(),spcrv()除了代码行数少外,更有如下特点

1、无法得到目标函数

2、曲线更贴近数据点

3、对outliers敏感,即,容错率更低

把两种曲线放在一张图上并圈出原始数据点就知道了:

考虑到学校实验器材误差可能比较大,我最后还是选择了polyfit()

最后对图表进行一些修饰——

>> hold on

>> [AX,H1,H2] =plotyy(F,ee,F,nn,@plot);

% 获取坐标轴、图像句柄

>> set(get(AX(1),'ylabel'),'string', 'ε/%');

>> set(get(AX(2),'ylabel'),'string', 'η/%');

>> xlabel('F/N')

%设置x,y轴说明

>> title('滑动曲线ε-F和效率曲线η-F的关系曲线')

%设置标题

得到结果——

点左上角File选择保存路径,把文件格式改成jpg,实验报告插图就完成啦!

总结:

使用MATLAB根据实验数据绘制图像时——

1、使用sortrows对数据进行排序

2、根据数据特点选择polyfit()或spcrv()对数据进行拟合

3、绘制图像

后面会更新更多期末复习相关内容,包括《机械设计基础》《材料科学基础》《马克思主义基本原理概论》等~你的肯定是巨兔更新的最大动力!期末周大家一起加油奥~

对本篇内容有思考欢迎在评论区留言讨论!

喜欢本篇内容请给巨兔点个在看

如果觉得《matlab 平滑曲线连接_兔学 | MATLAB由离散数据点绘制曲线图像》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。