Modelado Matemático (1): Interpolación

Tabla de contenido

tema:

Código de implementación:

Puntas:


tema:

Código de implementación:

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

h0=data([2:2:end],:);%同理,取高度数据
h0=h0';
h0=h0(:);

H=17.4;
V=pi/4*H*H*h0;%计算各时刻的体积

dv = -1*gradient(V,t0);%对各个时刻进行求导,因为斜率是负的,所以这个地方的速度是负数,需要再乘一个-1转正数
n0 = find(h0 == -1);%找出空格数据
n1=[n0(1)-1:n0(2)+1,n0(3)-1:n0(4)+1];
t=t0;
t(n1)=[];
dv1=dv;
dv1(n1)=[];
%%
%这个地方取四个点行不通,因为边界点不连续,然后不连续的情况下求导误差巨大
n2=[n0(1),n0(2),n0(3),n0(4)];
t3=t0;
t3(n2)=[];
dv2=dv;
dv2(n2)=[];
%%
plot(t,dv1,'b*',t3,dv2,'ro');
plot(t,dv1,'b*')
plot(t3,dv2,'ro')
%%
pp=csape(t,dv1);%进行差值
tt=0:0.1:t(end);%给出差值点
fdv=ppval(pp,tt);
plot(tt,fdv,'r*');
I=trapz(tt(1:241),fdv(1:241))%计算24h内总流量的数值积分

Puntas:

Habla brevemente sobre la idea:

(1) Primero, ingrese los datos de la pregunta en matlab en forma de matriz, y almacene los dos conjuntos de datos de tiempo y tiempo en el vector de columna respectivamente, correspondiente al siguiente código: [Por supuesto, también puede coloque manualmente los dos conjuntos de datos directamente por usted mismo. Los datos se ingresan en un vector de columna]

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

h0=data([2:2:end],:);%同理,取高度数据
h0=h0';
h0=h0(:);

(2) Luego, necesitamos tomar la derivación de los puntos en cada momento, y la velocidad se obtiene por la derivación, y luego debemos eliminar cuatro puntos vacíos (es decir, los puntos que no tienen un valor en el título), y luego elimine cuatro puntos segmentados, porque el requisito previo para la derivación es la continuidad, pero no es continua para los puntos límite de la función segmentada. De acuerdo con el diagrama de dispersión de velocidad en la pregunta, el gráfico se puede dividir en tres segmentos, es decir, hay 4 puntos límite, por lo que se eliminan un total de 8 puntos no disponibles, y el código es el siguiente:

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

(3) Finalmente, interpola los datos, y usa la función csape para obtener los coeficientes de interpolación spline cúbica. Su resultado se almacena en una estructura. Usa la función ppval para usar los coeficientes obtenidos por caspe para calcular la interpolación, y dibuja el código de imagen de la siguiente manera.

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

imagen:

(4) Use la función trapz en matlab para integrar los puntos discretos.El código es el siguiente:

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

La función de MATLAB trapz(x, y, n), donde y es la integral de x, aproxima la integral de la función y = f(x) usando la regla trapezoidal

 

Supongo que te gusta

Origin blog.csdn.net/m0_55858611/article/details/126360793
Recomendado
Clasificación