Matlab如何以曲线的形式连接连个点?Matlab绘制卡诺循环曲线

您所在的位置:网站首页 matlab曲线数据点 Matlab如何以曲线的形式连接连个点?Matlab绘制卡诺循环曲线

Matlab如何以曲线的形式连接连个点?Matlab绘制卡诺循环曲线

2023-11-27 23:20| 来源: 网络整理| 查看: 265

文章目录 Matlab如何以曲线的形式连接连个点?以卡诺循环图为例:Demo1Demo2 Matlab插值拟合interp1函数简单插值、拟合方法

Matlab如何以曲线的形式连接连个点?

若已知两个点的坐标,通过插值拟合的方法可以实现曲线连接的效果。

以卡诺循环图为例:

在这里插入图片描述 若已知a,b,c,d的坐标,想要实现下图中的精确结果: 在这里插入图片描述 则仅需在坐标a与b,b与c,c与d,d与a之间,先分别插入一个坐标点(可以自己按网格线估算),然后通过拟合函数以曲线的形式连接四个点:

Demo1 clc,clear,close all; %a——c x_ab = [1,1.25,1.6]; y_ab = [1,0.8,0.625]; x_bc = [1.6,1.8,2.24]; y_bc = [0.625,0.5,0.358]; %interp1三次样条插值 xq_ab = linspace(1,1.6,100); %100个点密度 vq_ab = interp1(x_ab,y_ab,xq_ab,'spline'); plot(xq_ab,vq_ab,"LineWidth",2); hold on xq_bc = linspace(1.6,2.24,100); vq_bc = interp1(x_bc,y_bc,xq_bc,'spline'); plot(xq_bc,vq_bc,'g--',"LineWidth",2); %c——a x_ad = [1,1.15,1.4]; y_ad = [1,0.8,0.572]; x_dc = [1.4,1.6,2.24]; y_dc = [0.572,0.5,0.358]; %interp1三次样条插值 xq_ad = linspace(1,1.4,100); %100个点密度 vq_ad = interp1(x_ad,y_ad,xq_ad,'spline'); plot(xq_ad,vq_ad,'c-',"LineWidth",2); xq_dc = linspace(1.4,2.24,100); vq_dc = interp1(x_dc,y_dc,xq_dc,'spline'); plot(xq_dc,vq_dc,'r-.',"LineWidth",2); grid on axis([0 2.5 0 1]) %贴abcd标签 text(1.02,1,'a','FontSize',15) text(1.63,0.625,'b','FontSize',15) text(2.27,0.358,'c','FontSize',15) text(1.43,0.572,'d','FontSize',15) stem(1,1,'k--') %表示(0,1)与(1,1)之间有水平连线,以此类推画出其他水平横线 line([0 1],[1,1],'LineStyle','--','Color','k') stem(1.6,0.625,'k--') line([0 1.6],[0.625,0.625],'LineStyle','--','Color','k') stem(1.4,0.572,'k--') line([0 1.4],[0.572,0.572],'LineStyle','--','Color','k') stem(2.24,0.358,'k--') line([0 2.24],[0.358,0.358],'LineStyle','--','Color','k') %贴刻度标签 text(0,1,'1','FontSize',13) text(0,0.625,'0.625','FontSize',13) text(0,0.358,'0.358','FontSize',13) text(0,0.572,'0.572','FontSize',13) text(1,0,'1','FontSize',13) text(1.4,0,'1.4','FontSize',13) text(1.6,0,'1.6','FontSize',13) text(2.24,0,'2.24','FontSize',13) %图例 legend("等温过程T_1/T_a=1","绝热过程","绝热过程","等温过程T_2/T_a=0.8") title("卡诺循环图") xlabel("体积V/V_a") ylabel("压强P/P_a")

效果: 在这里插入图片描述

Demo2 clc,clear,close all; %a——c x_dc = [0.544,0.6,0.871]; y_dc = [2.76,2.5,1.72]; x_cb = [0.871,0.95,1.6]; y_cb = [1.72,1.5,0.625]; %interp1三次样条插值 xq_dc = linspace(0.544,0.871,100); %100个点密度 vq_dc = interp1(x_dc,y_dc,xq_dc,'spline'); plot(xq_dc,vq_dc,'r-.',"LineWidth",2); hold on xq_cb = linspace(0.871,1.6,100); vq_cb = interp1(x_cb,y_cb,xq_cb,'spline'); plot(xq_cb,vq_cb,'g--',"LineWidth",2); %c——a x_da = [0.544,0.68,1]; y_da = [2.76,2,1]; x_ab = [1,1.2,1.6]; y_ab = [1,0.8,0.625]; %interp1三次样条插值 xq_da = linspace(0.544,1,100); %100个点密度 vq_da = interp1(x_da,y_da,xq_da,'spline'); plot(xq_da,vq_da,'c-',"LineWidth",2); xq_ab = linspace(1,1.6,100); vq_ab = interp1(x_ab,y_ab,xq_ab,'spline'); plot(xq_ab,vq_ab,'b',"LineWidth",2); grid on axis([0 1.6 0 3]) %贴abdc标签 text(1.02,1,'a','FontSize',15) text(1.61,0.625,'b','FontSize',15) text(0.892,1.72,'c','FontSize',15) text(0.564,2.76,'d','FontSize',15) stem(0.544,2.76,'k--') %表示(0,1)与(1,1)之间有水平连线,以此类推画出其他水平横线 line([0 0.544],[2.76,2.76],'LineStyle','--','Color','k') stem(0.871,1.72,'k--') line([0 0.871],[1.72,1.72],'LineStyle','--','Color','k') stem(1,1,'k--') line([0 1],[1,1],'LineStyle','--','Color','k') stem(1.6,0.625,'k--') line([0 1.6],[0.625,0.625],'LineStyle','--','Color','k') % %贴刻度标签 text(0,2.76,'2.76','FontSize',13) text(0,1.72,'1.72','FontSize',13) text(0,1,'1','FontSize',13) text(0,0.625,'0.625','FontSize',13) text(0.544,0,'0.544','FontSize',13) text(0.871,0,'0.871','FontSize',13) text(1,0,'1','FontSize',13) text(1.6,0,'1.6','FontSize',13) %图例 legend("等温过程T_2/T_a=1.5","绝热过程","绝热过程","等温过程T_1/T_a=1") title("卡诺循环图") xlabel("体积V/V_a") ylabel("压强P/P_a")

效果: 在这里插入图片描述

Matlab插值拟合

以上两个demo中插值拟合的方法用到的是interp1函数,在我以前的博客笔记中介绍过:

interp1函数简单插值、拟合方法

在这里插入图片描述 答:

clc,clear,close all; x = linspace(-2,2,10); y = exp(-x.^2); figure(1) stem(x,y,"LineWidth",1.5) grid on title('f(x)') %interp1线性插值 xq = linspace(-2,2,20); vq1 = interp1(x,y,xq); figure(2) plot(x,y,'o',xq,vq1,':.',"LineWidth",1.5); xlim([-2 2]); grid on title('interp1线性插值'); %polyfit多项式拟合插值 p = polyfit(x,y,7); y1 = polyval(p,x); figure(3) plot(x,y,'g-o',"LineWidth",1.5) hold on plot(x,y1,"LineWidth",1.5) hold off xlim([-2 2]); grid on title('polyfit多项式拟合插值'); %spline三次样条插值 yy = spline(x,y,xq); figure(4) plot(x,y,'o',xq,yy,"LineWidth",1.5) xlim([-2 2]); grid on title('spline三次样条插值');

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 需要注意的是,interp1的插值方式可选择多种,默认是线性插值,画出来的可能还是直线或折线,卡诺循环图的demo里选择的是spline,详情见官方文档:interp1在这里插入图片描述 可以尝试更换为其他方式,拟合出来的效果也不尽相同,当然也可以直接通过spline()函数实现。

除此之外,插值、曲线拟合的方法还有多项式拟合、最小二乘法等,感兴趣的同学可以课下钻研尝试。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3