• 数学建模(一):插值


    目录

    题目:

    实现代码:

    Tips:


    题目:

    实现代码:

    1. %%
    2. t0=data([1:2:end],:);%从第一行开始,每隔两行取一行数据(得到的是时间数据)
    3. t0=t0';%对行向量求转置
    4. t0=t0(:);%全部转成列向量
    5. h0=data([2:2:end],:);%同理,取高度数据
    6. h0=h0';
    7. h0=h0(:);
    8. H=17.4;
    9. V=pi/4*H*H*h0;%计算各时刻的体积
    10. dv = -1*gradient(V,t0);%对各个时刻进行求导,因为斜率是负的,所以这个地方的速度是负数,需要再乘一个-1转正数
    11. n0 = find(h0 == -1);%找出空格数据
    12. n1=[n0(1)-1:n0(2)+1,n0(3)-1:n0(4)+1];
    13. t=t0;
    14. t(n1)=[];
    15. dv1=dv;
    16. dv1(n1)=[];
    17. %%
    18. %这个地方取四个点行不通,因为边界点不连续,然后不连续的情况下求导误差巨大
    19. n2=[n0(1),n0(2),n0(3),n0(4)];
    20. t3=t0;
    21. t3(n2)=[];
    22. dv2=dv;
    23. dv2(n2)=[];
    24. %%
    25. plot(t,dv1,'b*',t3,dv2,'ro');
    26. plot(t,dv1,'b*')
    27. plot(t3,dv2,'ro')
    28. %%
    29. pp=csape(t,dv1);%进行差值
    30. tt=0:0.1:t(end);%给出差值点
    31. fdv=ppval(pp,tt);
    32. plot(tt,fdv,'r*');
    33. I=trapz(tt(1:241),fdv(1:241))%计算24h内总流量的数值积分

    Tips:

    简单讲一下思路:

    (1)首先把题目中的数据以矩阵的形式输入到matlab中,分别将时间和时刻这两组数据存进列向量中,对应下面这段代码:【当然,也可以直接自己手动把两组数据输入到列向量中】

    1. t0=data([1:2:end],:);%从第一行开始,每隔两行取一行数据(得到的是时间数据)
    2. t0=t0';%对行向量求转置
    3. t0=t0(:);%全部转成列向量
    4. h0=data([2:2:end],:);%同理,取高度数据
    5. h0=h0';
    6. h0=h0(:);

    (2)然后,我们要对各个时刻的点进行求导,求导得到的是速度,然后要删掉四个空点(也就是题目中没有给数值的点),然后还要删掉四个分段的点,因为求导的前提条件就是连续,但是对于分段函数的边界点它不是连续的,题中根据速度散点图可知,可以把图分为三段,即有4个边界点,所以一共去除8个不可用点,代码如下所示:

    1. dv = -1*gradient(V,t0);%对各个时刻进行求导,因为斜率是负的,所以这个地方的速度是负数,需要再乘一个-1转正数
    2. n0 = find(h0 == -1);%找出空格数据
    3. n1=[n0(1)-1:n0(2)+1,n0(3)-1:n0(4)+1];%删除8个不可用点
    4. t=t0;
    5. t(n1)=[];
    6. dv1=dv;
    7. dv1(n1)=[];

    (3)最后对数据进行插值,利用csape函数得到三次样条插值的系数,它的结果是存在一个结构体里的,利用ppval函数利用caspe得到的系数计算出插值,并画出图像代码如下所示:

    1. pp=csape(t,dv1);%进行差值
    2. tt=0:0.1:t(end);%给出差值点
    3. fdv=ppval(pp,tt);
    4. plot(tt,fdv,'r*');

    图:

    (4)利用matlab中的trapz函数对离散的点进行求积分,代码如下所示:

    I=trapz(tt(1:241),fdv(1:241))%计算24h内总流量的数值积分

    MATLAB函数trapz(x, y, n), 其中y是x的积分, 使用梯形法则逼近函数y = f(x)的积分

     

  • 相关阅读:
    如何在 Odoo 16 中自定义电子商务中动态片段的产品过滤器
    基于python的CLI应用程序开发(第一节):简单了解一下Typer
    学习开发一个RISC-V上的操作系统(汪辰老师) — 环境配置
    leetcode 2520 统计能整除数字的位数
    【ARMv8/ARMv9 硬件加速系列 3.5 -- SVE 谓词寄存器Pg修改详细介绍】
    ESP8266远程控制电子门
    编写一个程序,若处理器是大端序的则返回0,若 处理器是小端序的则返回1。
    lime-util 前端模块化 JavaScript 工具库
    OpenPose训练教程
    洛谷 P5058 [ZJOI2004]嗅探器(割点)
  • 原文地址:https://blog.csdn.net/m0_55858611/article/details/126360793