偏微分方程算法之椭圆型方程差分格式编程示例

目录

一、示例1-五点菱形格式

1.1 C++代码

1.2 计算结果

二、示例2-九点紧差分格式

2.1 C++代码

2.2 计算结果

三、示例3-二阶混合边值

3.1 C++代码

3.2 计算结果


        本专栏对椭圆型偏微分方程的三种主要差分方法进行了介绍,并给出相应格式的理论推导过程。为加深对差分格式的理解,分别对三种方法进行C++编程示例。

一、示例1-五点菱形格式

\left\{\begin{matrix} -(\frac{\partial^{2}u}{\partial x^{2}}+\frac{\partial^{2}u}{\partial y^{2}})=\frac{4y^{2}-2x^{2}}{(x^{2}+2y^{2})^{2}},1<x<2,0<y<3,\\ u(1,y)=ln(1+2y^{2}),u(2,y)=ln(4+2y^{2}),0\leqslant y\leqslant 1,\\ u(x,0)=2lnx,u(x,3)=ln(18+x^{2}),1<x<2 \end{matrix}\right. 

已知精确解为u(x,y)=ln(x^{2}+2y^{2})。分别取两种剖分数:m=20,n=30和m=40,n=60,输出10个节点(1.25,0.5i)(1.75,0.5i),i=1,2,3,4,5处的数值解,并给出误差。要求在各个节点处最大误差的迭代误差限为0.5\times10^{-10}

1.1 C++代码


 

#include <cmath>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        int m,n,i,j,k,num;
        double xa,xb,ya,yb,dx,dy,alpha,beta,gamma,err,maxerr;
        double *x,*y,**u,**temp;
        double leftboundary(double y);
        double rightboundary(double y);
        double bottomboundary(double x);
        double topboundary(double x);
        double f(double x, double y);
        double exact(double x, double y);

        xa=1.0;xb=2.0;
        ya=0.0;yb=3.0;
        m=20;n=30;
        printf("m=%d,n=%d.\n",m,n);
        dx=(xb-xa)/m;
        dy=(yb-ya)/n;
        beta=1.0/(dx*dx);
        gamma=1.0/(dy*dy);
        alpha=2.0*(beta+gamma);

        x=(double*)malloc(sizeof(double)*(m+1));
        for(i=0;i<=m;i++)
                x[i]=xa+i*dx;

        y=(double*)malloc(sizeof(double)*(n+1));
        for(j=0;j<=n;j++)
                y[j]=ya+j*dy;

        u=(double**)malloc(sizeof(double*)*(m+1));
        temp=(double**)malloc(sizeof(double*)*(m+1));
        for(i=0;i<=m;i++)
        {
                u[i]=(double*)malloc(sizeof(double)*(n+1));
                temp[i]=(double*)malloc(sizeof(double)*(n+1));
        }

        for(j=0;j<=n;j++)
        {
                u[0][j]=leftboundary(y[j]);
                u[m][j]=rightboundary(y[j]);
        }

        for(i=1;i<m;i++)
        {
                u[i][0]=bottomboundary(x[i]);
                u[i][n]=topboundary(x[i]);
        }

        for(i=1;i<m;i++)
        {
                for(j=1;j<n;j++)
                        u[i][j]=0.0;
        }

        for(i=0;i<=m;i++)
        {
                for(j=0;j<=n;j++)
                        temp[i][j]=u[i][j];
        }

        k=0;
        do
        {
                maxerr=0.0;
                for(i=1;i<m;i++)
                {
                        for(j=1;j<n;j++)
                        {
                                temp[i][j]=(f(x[i],y[j])+beta*(u[i-1][j]+temp[i+1][j])+gamma*(u[i][j-1]+temp[i][j+1]))/alpha;
                                err=fabs(temp[i][j]-u[i][j]);
                                if(err>maxerr)
                                        maxerr=err;
                                u[i][j]=temp[i][j];
                        }
                }
                k=k+1;
        }while(maxerr>0.5*1e-10);
        printf("k=%d.\n",k);

        k=n/6;
        num=m/4;
        for(j=k;j<n;j=j+k)
        {
                printf("(1.25,%.3f), y=%f, err=%.4e.\n",y[j],u[num][j],fabs(exact(x[num],y[j])-u[num][j]));
        }

        num=3*m/4;
        for(j=k;j<n;j=j+k)
        {
                printf("(1.75,%.3f), y=%f, err=%.4e.\n",y[j],u[num][j],fabs(exact(x[num],y[j])-u[num][j]));
        }

        for(i=0;i<=m;i++)
        {
                free(u[i]);free(temp[i]);
        }
        free(x);free(y);


        return 0;
}


double leftboundary(double y)
{
        return log(1.0+2*y*y);
}
double rightboundary(double y)
{
        return log(4.0+2*y*y);
}
double bottomboundary(double x)
{
        return 2*log(x);
}
double topboundary(double x)
{
        return log(18.0+x*x);
}
double f(double x, double y)
{
        double temp1,temp2,z;
        temp1=x*x; temp2=y*y;
        z=temp1+2*temp2;
        return (4*temp2-2*temp1)/(z*z);
}
double exact(double x, double y)
{
        return log(x*x+2*y*y);
}

                                                                                           

1.2 计算结果

        当m=20,n=30时,计算结果为:

m=20,n=30.
k=959.
(1.25,0.500), y=0.724037, err=1.1827e-04.
(1.25,1.000), y=1.270654, err=1.9108e-04.
(1.25,1.500), y=1.802202, err=7.9937e-05.
(1.25,2.000), y=2.257872, err=2.3280e-05.
(1.25,2.500), y=2.643516, err=4.1352e-06.
(1.75,0.500), y=1.270488, err=2.5584e-05.
(1.75,1.000), y=1.621992, err=1.3181e-04.
(1.75,1.500), y=2.023279, err=7.7668e-05.
(1.75,2.000), y=2.403589, err=2.7872e-05.
(1.75,2.500), y=2.744871, err=6.9853e-06.

         当m=40,n=60时,计算结果为:

m=40,n=60.
k=3582.
(1.25,0.500), y=0.723948, err=2.9304e-05.
(1.25,1.000), y=1.270510, err=4.7781e-05.
(1.25,1.500), y=1.802142, err=1.9972e-05.
(1.25,2.000), y=2.257855, err=5.8033e-06.
(1.25,2.500), y=2.643513, err=1.0237e-06.
(1.75,0.500), y=1.270469, err=6.1963e-06.
(1.75,1.000), y=1.621893, err=3.2942e-05.
(1.75,1.500), y=2.023221, err=1.9426e-05.
(1.75,2.000), y=2.403568, err=6.9568e-06.
(1.75,2.500), y=2.744866, err=1.7374e-06.

二、示例2-九点紧差分格式

\left\{\begin{matrix} -(\frac{\partial^{2}u}{\partial x^{2}}+\frac{\partial^{2}u}{\partial y^{2}})=\frac{4y^{2}-2x^{2}}{(x^{2}+2y^{2})^{2}},1<x<2,0<y<3,\\ u(1,y)=ln(1+2y^{2}),u(2,y)=ln(4+2y^{2}),0\leqslant y\leqslant 1,\\ u(x,0)=2lnx,u(x,3)=ln(18+x^{2}),1<x<2 \end{matrix}\right.

已知精确解为u(x,y)=ln(x^{2}+2y^{2})。分别取两种剖分数:m=20,n=30和m=40,n=60,输出10个节点(1.25,0.5i)(1.75,0.5i),i=1,2,3,4,5处的数值解,并给出误差。要求在各个节点处最大误差的迭代误差限为0.5\times10^{-10}

2.1 C++代码


#include <cmath>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char*argv[])
{
        int m,n,i,j,k,num;
        double xa,xb,ya,yb,dx,dy,alpha,beta,gamma,err,maxerr;
        double *x,*y,**u,**g,**temp,kexi,eta1,eta2;
        double leftboundary(double y);
        double rightboundary(double y);
        double bottomboundary(double x);
        double topboundary(double x);
        double f(double x, double y);
        double **Gij(double *x, double *y, int m, int n);
        double exact(double x, double y);

        xa=1.0;xb=2.0;
        ya=0.0;yb=3.0;
        m=20;n=30;
        printf("m=%d,n=%d.\n",m,n);
        dx=(xb-xa)/m;
        dy=(yb-ya)/n;
        beta=1.0/(dx*dx);
        gamma=1.0/(dy*dy);
        kexi=beta+gamma;
        eta1=10*beta-2*gamma;
        eta2=10*gamma-2*beta;

        x=(double*)malloc(sizeof(double)*(m+1));
        for(i=0;i<=m;i++)
                x[i]=xa+i*dx;

        y=(double*)malloc(sizeof(double)*(n+1));
        for(j=0;j<=n;j++)
                y[j]=ya+j*dy;

        u=(double**)malloc(sizeof(double*)*(m+1));
        temp=(double**)malloc(sizeof(double*)*(m+1));
        for(i=0;i<=m;i++)
        {
                u[i]=(double*)malloc(sizeof(double)*(n+1));
                temp[i]=(double*)malloc(sizeof(double)*(n+1));
        }

        for(j=0;j<=n;j++)
        {
                u[0][j]=leftboundary(y[j]);
                u[m][j]=rightboundary(y[j]);
        }
        for(i=1;i<m;i++)
        {
                u[i][0]=bottomboundary(x[i]);
                u[i][n]=topboundary(x[i]);
        }

         for(i=1;i<m;i++)
        {
                for(j=1;j<n;j++)
                        u[i][j]=0.0;
        }

        g=Gij(x,y,m,n);

        for(i=0;i<=m;i++)
        {
                for(j=0;j<=n;j++)
                        temp[i][j]=u[i][j];
        }

        k=0;
        do
        {
                maxerr=0.0;
                for(i=1;i<m;i++)
                {
                        for(j=1;j<n;j++)
                        {
                                temp[i][j]=(g[i][j]-kexi*(u[i-1][j-1]+temp[i-1][j+1]+u[i+1][j-1]+temp[i+1][j+1])-eta1*(u[i-1][j]+temp[i+1][j])-eta2*(u[i][j-1]+temp[i][j+1]))/(-20*kexi);
                                err=fabs(temp[i][j]-u[i][j]);
                                if(err>maxerr)
                                        maxerr=err;
                                u[i][j]=temp[i][j];
                        }
                }
                k=k+1;
        }while(maxerr>0.5*1e-10);
        printf("k=%d.\n",k);

        k=n/6;
        num=m/4;
        for(j=k;j<n;j=j+k)
        {
                printf("(1.25,%.3f), y=%f, err=%.4e.\n",y[j],u[num][j],fabs(exact(x[num],y[j])-u[num][j]));
        }

        num=3*m/4;
        for(j=k;j<n;j=j+k)
        {
                printf("(1.75,%.3f), y=%f, err=%.4e.\n",y[j],u[num][j],fabs(exact(x[num],y[j])-u[num][j]));
        }
        
        for(i=0;i<=m;i++)
        {
                free(u[i]);free(temp[i]);
        }
        free(u);free(temp);
        free(x);free(y);

        return 0;
}


double leftboundary(double y)
{
        return log(1.0+2*y*y);
}
double rightboundary(double y)
{
        return log(4.0+2*y*y);
}
double bottomboundary(double x)
{
        return 2*log(x);
}
double topboundary(double x)
{
        return log(18+x*x);
}
double f(double x, double y)
{
        double temp1, temp2, z;
        temp1=x*x;
        temp2=y*y;
        z=temp1+2*temp2;
        return (4*temp2-2*temp1)/(z*z);
}
double exact(double x, double y)
{
        return log(x*x+2*y*y);
}
double **Gij(double *x, double *y, int m, int n)
{
        int i,j;
        double temp1,temp2,temp3,**ans;
        ans=(double**)malloc(sizeof(double*)*(m+1));
        for(i=0;i<=m;i++)
                ans[i]=(double*)malloc(sizeof(double)*(n+1));

        for(i=0;i<=m;i++)
        {
                for(j=0;j<=n;j++)
                        ans[i][j]=0.0;
        }

        for(i=1;i<m;i++)
        {
                for(j=1;j<n;j++)
                {
                        temp1=f(x[i-1],y[j-1])+10*f(x[i],y[j-1])+f(x[i+1],y[j-1]);
                        temp2=f(x[i-1],y[j])+10*f(x[i],y[j])+f(x[i+1],y[j]);
                        temp3=f(x[i-1],y[j+1])+10*f(x[i],y[j+1])+f(x[i+1],y[j+1]);
                        ans[i][j]=-(temp1+temp3+10*temp2)/12.0;
                }
        }

        return ans;
}

2.2 计算结果

        当m=20,n=30时,计算结果为:

m=20,n=30.
k=805.
(1.25,0.500), y=0.723921, err=2.5068e-06.
(1.25,1.000), y=1.270463, err=4.0234e-07.
(1.25,1.500), y=1.802122, err=8.8970e-08.
(1.25,2.000), y=2.257849, err=6.0205e-08.
(1.25,2.500), y=2.643512, err=2.1371e-08.
(1.75,0.500), y=1.270463, err=8.8774e-07.
(1.75,1.000), y=1.621861, err=5.0648e-07.
(1.75,1.500), y=2.023202, err=1.3736e-10.
(1.75,2.000), y=2.403561, err=4.9714e-08.
(1.75,2.500), y=2.744864, err=2.2523e-08.

        当m=40,n=60时,计算结果为:

m=40,n=60.
k=3012.
(1.25,0.500), y=0.723919, err=1.5248e-07.
(1.25,1.000), y=1.270463, err=2.0549e-08.
(1.25,1.500), y=1.802122, err=1.0963e-08.
(1.25,2.000), y=2.257849, err=8.4329e-09.
(1.25,2.500), y=2.643512, err=4.0188e-09.
(1.75,0.500), y=1.270463, err=5.2372e-08.
(1.75,1.000), y=1.621860, err=2.7195e-08.
(1.75,1.500), y=2.023202, err=5.0463e-09.
(1.75,2.000), y=2.403561, err=7.4797e-09.
(1.75,2.500), y=2.744864, err=3.9218e-09.

三、示例3-二阶混合边值

\left\{\begin{matrix} -(\frac{\partial^{2}u}{\partial x^{2}}+\frac{\partial^{2}u}{\partial y^{2}})=\frac{4y^{2}-2x^{2}}{(x^{2}+2y^{2})^{2}},1<x<2,0<y<3,\\ (\frac{\partial u(x,y)}{\partial x}-u)|_{(1,y)}=\frac{2}{1+2y^{2}}-ln(1+2y^{2}),0\leqslant y\leqslant 3,\\ (\frac{\partial u(x,y)}{\partial x}+u)|_{(2,y)}=\frac{2}{2+y^{2}}+ln(4+2y^{2}),0\leqslant y\leqslant 3,\\ (\frac{\partial u(x,y)}{\partial y}-u)|_{(x,0)} = \-2lnx,1\leqslant x\leqslant 2,\\ (\frac{\partial u(x,y)}{\partial y})|_{(x,3)}=\frac{12}{18+x^{2}}+ln(18+x^{2}),1\leqslant x\leqslant 2 \end{matrix}\right.

已知精确解为u(x,y)=ln(x^{2}+2y^{2})。分别取两种剖分数:m=20,n=30和m=40,n=60,输出10个节点(1.25,0.5i)(1.75,0.5i),i=1,2,3,4,5处的数值解,并给出误差。要求在各个节点处最大误差的迭代误差限为0.5\times10^{-10}。 

3.1 C++代码


#include <cmath>
#include <stdlib.h>
#include <stdio.h>


int main(int argc, char*argv[])
{
        int m, n, i, j, k, num;
        double xa, xb, ya, yb, dx, dy, alpha, beta, gamma, maxerr;
        double *x, *y, **u, **v, **lambda, kexi, eta, *d, temp;
        double f(double x, double y);
        double lambda_function(double x, double y);
        double phi1(double y);
        double phi2(double y);
        double psi1(double x);
        double psi2(double x);
        double exact(double x, double y);

        xa=1.0;xb=2.0;
        ya=0.0;yb=3.0;
        m=20;n=30;
        printf("m=%d, n=%d\n", m, n);
        dx=(xb-xa)/m;
        dy=(yb-ya)/n;
        beta=1.0/(dx*dx);
        gamma=1.0/(dy*dy);
        alpha=2*(beta+gamma);
        kexi=2.0/dx;
        eta=2.0/dy;

        x=(double*)malloc(sizeof(double)*(m+1));
        for(i=0;i<=m;i++)
                x[i]=xa+i*dx;

        y=(double*)malloc(sizeof(double)*(n+1));
        for(j=0;j<=n;j++)
                y[j]=ya+j*dy;

        u=(double**)malloc(sizeof(double*)*(m+1));
        v=(double**)malloc(sizeof(double*)*(m+1));
        lambda=(double**)malloc(sizeof(double*)*(m+1));
        for(i=0;i<=m;i++)
        {
                u[i]=(double*)malloc(sizeof(double)*(n+1));
                v[i]=(double*)malloc(sizeof(double)*(n+1));
                lambda[i]=(double*)malloc(sizeof(double)*(n+1));
        }

        for(i=0;i<=m;i++)
        {
                for(j=0;j<=n;j++)
                {
                        u[i][j]=0.0;
                        v[i][j]=0.0;
                        lambda[i][j]=lambda_function(x[i], y[j]);
                }
        }

        d=(double*)malloc(sizeof(double)*(m+1));
        k=0;
        do
        {
                maxerr=0.0;

                for(i=0;i<=m;i++)
                        d[i]=f(x[i],y[0])-eta*psi1(x[i]);
                d[0]=d[0]-kexi*phi1(y[0]);
                d[m]=d[m]+kexi*phi2(y[0]);
                v[0][0]=(d[0]+2*gamma*u[0][1]+2*beta*u[1][0])/(alpha+(kexi+eta)*lambda[0][0]);

                for(i=1;i<m;i++)
                       v[i][0]=(d[i]+2*gamma*u[i][1]+beta*(v[i-1][0]+u[i+1][0]))/(alpha+eta*lambda[i][0]);
                v[m][0]=(d[m]+2*gamma*u[m][1]+2*beta*v[m-1][0])/(alpha+(kexi+eta)*lambda[m][0]);

                for(j=1;j<n;j++)
                {
                       for(i=0;i<=m;i++)
                               d[i]=f(x[i],y[j]);
                       d[0]=d[0]-kexi*phi1(y[j]);
                       d[m]=d[m]+kexi*phi2(y[j]);
                       v[0][j]=(d[0]+gamma*(u[0][j+1]+v[0][j-1])+2*beta*u[1][j])/(alpha+kexi*lambda[0][j]);
                       for(i=1;i<m;i++)
                               v[i][j]=(d[i]+gamma*(v[i][j-1]+u[i][j+1])+beta*(v[i-1][j]+u[i+1][j]))/alpha;
                       v[m][j]=(d[m]+gamma*(v[m][j-1]+u[m][j+1])+2*beta*v[m-1][j])/(alpha+kexi*lambda[m][j]);
                }

                for(i=0;i<=m;i++)
                       d[i]=f(x[i],y[n])+eta*psi2(x[i]);
                d[0]=d[0]-kexi*phi1(y[n]);
                d[m]=d[m]+kexi*phi2(y[n]);
                v[0][n]=(d[0]+2*beta*u[1][n]+2*gamma*v[0][n-1])/(alpha+(kexi+eta)*lambda[0][n]);
                for(i=1;i<m;i++)
                       v[i][n]=(d[i]+beta*(v[i-1][n]+u[i+1][n])+2*gamma*v[i][n-1])/(alpha+eta*lambda[i][n]);
                v[m][n]=(d[m]+2*beta*v[m-1][n]+2*gamma*v[m][n-1])/(alpha+(kexi+eta)*lambda[m][n]);

                for(i=0;i<=m;i++)
                {
                       for(j=0;j<=n;j++)
                       {
                                temp=fabs(u[i][j]-v[i][j]);
                                if(temp>maxerr)
                                        maxerr=temp;
                                u[i][j]=v[i][j];
                       }
                }
                k=k+1;
        }while((maxerr>0.5*1e-10)&&(k<=1e+8));
        printf("k=%d\n", k);
        
        k=n/6;
        num=m/4;
        for(j=k;j<n;j=j+k)
        {
                printf("(1.25,%.3f), y=%f, err=%.4e.\n",y[j],u[num][j],fabs(exact(x[num],y[j])-u[num][j]));
        }

        num=3*m/4;
        for(j=k;j<n;j=j+k)
        {
                printf("(1.75,%.3f), y=%f, err=%.4e.\n",y[j],u[num][j],fabs(exact(x[num],y[j])-u[num][j]));
        }

        for(i=0;i<=m;i++)
        {
                free(u[i]);free(v[i]);free(lambda[i]);
        }
        free(u);free(v);free(lambda);
        free(x);free(y);free(d);

        return 0;
}




double f(double x, double y)
{
        double temp1, temp2, z;
        temp1=x*x;
        temp2=y*y;
        z=temp1+2*temp2;
        return (4*temp2-2*temp1)/(z*z);
}
double lambda_function(double x, double y)
{
        return 1.0;
}
double phi1(double y)
{
        double z;
        z=1.0+2*y*y;
        return 2.0/z-log(z);
}
double phi2(double y)
{
        double z;
        z=2+y*y;
        return 2.0/z+log(2*z);
}
double psi1(double x)
{
        return -2*log(x);
}
double psi2(double x)
{
        double z;
        z=x*x+18.0;
        return 12.0/z+log(z);
}
double exact(double x, double y)
{
        return log(x*x+2*y*y);
}        

 

3.2 计算结果

         当m=20,n=30时,计算结果为:

m=20, n=30
k=4470
(1.25,0.500), y=0.723996, err=7.7043e-05.
(1.25,1.000), y=1.270860, err=3.9760e-04.
(1.25,1.500), y=1.802391, err=2.6918e-04.
(1.25,2.000), y=2.257989, err=1.3972e-04.
(1.25,2.500), y=2.643565, err=5.3582e-05.
(1.75,0.500), y=1.270387, err=7.5935e-05.
(1.75,1.000), y=1.622151, err=2.9080e-04.
(1.75,1.500), y=2.023479, err=2.7756e-04.
(1.75,2.000), y=2.403726, err=1.6475e-04.
(1.75,2.500), y=2.744937, err=7.3239e-05.

        当m=40,n=60时,计算结果为:

m=40, n=60
k=16565
(1.25,0.500), y=0.723937, err=1.8621e-05.
(1.25,1.000), y=1.270562, err=9.9132e-05.
(1.25,1.500), y=1.802189, err=6.7202e-05.
(1.25,2.000), y=2.257884, err=3.4879e-05.
(1.25,2.500), y=2.643525, err=1.3353e-05.
(1.75,0.500), y=1.270443, err=1.9346e-05.
(1.75,1.000), y=1.621933, err=7.2431e-05.
(1.75,1.500), y=2.023271, err=6.9315e-05.
(1.75,2.000), y=2.403602, err=4.1144e-05.
(1.75,2.500), y=2.744882, err=1.8266e-05.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/595646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“全国首批EVO+ ICL(V5)临床应用专家”授牌仪式在铭依眼科举行

近日&#xff0c;“全国首批EVO ICL&#xff08;V5&#xff09;新技术临床应用专家”授牌仪式在上海铭依眼科门诊部举行。仪式现场&#xff0c;瑞金医院谢冰教授获得此项荣誉称号。铭依眼科连锁医疗机构创始人吴英、Staar Surgical代表出席仪式现场。 为让近视人群不出国门即可…

ECC 号码总结

1、问题背景 在手机开发过程中&#xff0c;经常遇见各种紧急号码问题&#xff0c;在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中&#xff0c;定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

车牌检测识别功能实现(pyqt)

在本专题前面相关博客中已经讲述了 pyqt + yolo + lprnet 实现的车牌检测识别功能。带qt界面的。 本博文将结合前面训练好的模型来实现车牌的检测与识别。并用pyqt实现界面。最终通过检测车牌检测识别功能。 1)、通过pyqt5设计界面 ui文件如下: <?xml version="1…

K. 子串翻转回文串

给一个串 s  s1s2... sn&#xff0c;你可以选定其一个非空子串&#xff0c;然后将该子串翻转。具体来说&#xff0c;若选定的子串区间为 [l, r]&#xff08;1 ≤ l ≤ r ≤ n&#xff09;&#xff0c;则翻转后该串变为 s1s2... sl - 1srsr - 1... slsr  1... sn…

Sharding Capital: 为什么投资全链流动性基础设施 Entangle ?

写在前面&#xff1a;Entangle 项目的名称取自于量子纠缠(Quantum entanglement)&#xff0c;体现了项目对于构建连接、关联和互通的愿景。就像量子纠缠将不同的粒子联系在一起&#xff0c;Entangle 旨在通过其跨链流动性和合成衍生品的解决方案将不同的区块链网络连接在一起&a…

我们说的数据分析,到底要分析些什么?

作者 Gam 本文为CDA志愿者投稿作品 “我们说数据分析&#xff0c;到底要分析些什么&#xff1f;” 数据分析这个话题自从进入人们的视线以来&#xff0c;这个话题就成为人们茶余饭后的谈资&#xff0c;但是一千个人眼中就有一千个哈姆雷特&#xff0c;就意味着每个人对数据分…

重识来伊份:抢滩首店经济,休闲零食品牌的“面子”和“里子”

前不久&#xff0c;苹果静安零售店的首秀频频登上热搜。 这背后&#xff0c;不仅仅因为它是中国大陆最大的苹果旗舰店&#xff0c;还在于它的设计融入了时尚又古典的上海街区&#xff0c;吸引了众多市民拍照打卡。今年3月至5月&#xff0c;上海会持续举办“首发上海”春季系列…

【C++】Vector详解

Vector是什么&#xff1f; vector是C&#xff08;STL&#xff09;中的一种序列容器Vector是一个动态数组&#xff0c;内存空间是连续的&#xff0c;支持随机访问&#xff0c;支持迭代器访问 Vector代码实现 变量指向 代码初始化 #include<iostream> using namespace …

动力电池热管理方案介绍与发展方向

摘要 随着电动汽车的快速发展&#xff0c;高性能的动力电池系统成为推动电动汽车产业发展的重要因素。然而&#xff0c;伴随着能量密度提高和放电深度增加&#xff0c;电池热管理问题逐渐凸显。良好的热管理方案能够提高电池的寿命&#xff0c;保障电池性能&#xff0c;延长电…

4.堆_树(汇总版)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关定义 1.3 树的表示 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 3.二叉树的顺序结构及实现 3.1 二叉树的顺序结构--堆 3.2 堆的实现 3.2.1打印 3.2.2 …

el-select 点击按钮滚动到选择框顶部

主要代码是在visibleChange 在这个 popper 里面找到 .el-select-dropdown__list let popper ref.$refs.popper const ref this.$refs.select let dom popper.querySelector(.el-select-dropdown__list) setTimeout(() > { dom.scrollIntoView() }, 800) <templat…

Debian mariadb 10.11设定表名 大小写不敏感方法

目录 问题表现&#xff1a;应用中查询 表提示 表不存在 处理步骤&#xff1a; 1、查询表名大小写敏感情况&#xff1a; show global variables like %case%; 2、修改mariadb 配置设置大小写 不敏感 mysql 配置大小写不敏感 mariadb 10.11设置表名大小写不敏感 /etc/mysq…

【项目部署】手把手带你从零部署项目:宝塔 + uwsgi + Django + 腾讯云 + Websocket

1. 前言 哈喽&#xff0c;大家好&#xff0c;我是jiaoxingk。今天带来的是有关Django项目部署的教程。 当我们完成了一个项目作品之后&#xff0c;我们肯定会迫不及待的就准备上线部署啦&#xff0c; 这篇教程将带你从服务器的配置选购&#xff0c;再通过安装宝塔的形式进行项目…

【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点

力扣对应题目链接&#xff1a;LCR 140. 训练计划 II - 力扣&#xff08;LeetCode&#xff09; 核心考点 &#xff1a;链表&#xff0c;前后指针的使用&#xff0c;边界条件检测。 一、《剑指Offer》内容 二、分析问题 较优解题思路&#xff1a; 题目中的链表是单链表&#xff0…

数据库SQL语言实战(七)

前言 这次的有一点点难~~~~~我也写了好久 练习题 题目一 在学生表pub.student中统计名字&#xff08;姓名的第一位是姓氏&#xff0c;其余为名字&#xff0c;不考虑复姓&#xff09;的使用的频率&#xff0c;将统计结果放入表test5_01中 create table test5_01(First_name…

Mars3d实现用一个button控制一个map.control的显示与隐藏

原生js,想做一个button,控制比如compass的显示与隐藏 点一下显示 再次单击的时候就隐藏掉 写了一个function控制显示隐藏 function addCompass(){ if(compass.showtrue) { compass.showfalse; } else{ compass.showtrue; } } 功能示例(Vue版) | Mars3D三维可视化平台 | 火星…

corCTF2023 -- kcipher

前言 本次仅仅是通过 modprobe_path 拿 flag&#xff0c;但是 modprobe_path 是可以提权的&#xff08;&#xff1a;只需要把 /etc/passwd 的权限修改为 777 即可 这里存在 kmalloc-96 大小的 UAF/Double free 所以其实利用方式挺多的~~~但是这里就不深究了 题目分析 内核版…

实测好评!微信自动回复消息神器!高效沟通拿捏住!

随着企业规模的扩大和客户数量的增加&#xff0c;有效管理和回复每一条消息变得越来越具有挑战性。今天&#xff0c;就给大家分享一个高效的自动回复消息神器——个微管理系统&#xff0c;让你能够轻松应对各种沟通需求。 1、自动通过好友&#xff0c;提高沟通效率 每当有新的…

Shell脚本编写-定时清空文件内容,定时记录文件内容大小

find命令 – 根据路径和条件搜索指定文件 – Linux命令大全(手册)find命令的功能是根据给定的路径和条件查找相关文件或目录&#xff0c;其参数灵活方便&#xff0c;且支持正则表达式&#xff0c;结合管道符后能够实现更加复杂的功能&#xff0c;是Linux系统运维人员必须掌握的…

基于现有语言大模型,定制“人人AI气象”公众号天气助手

最近&#xff0c;月之暗面的Kimi大模型非常受欢迎&#xff0c;尝试用了moonshot(128K)基座模型&#xff0c;通过调用各种公开渠道的API&#xff0c;简易实现了一个天气助手&#xff0c;可以回答天气相关的基础概念、原理、应用等方面的问题&#xff0c;同时也可调用多个插件获取…