⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fluxionary.cpp

📁 本程序功能为计算一阶双曲型偏微分方程的初值问题,分别采用3种格式计算:1、迎风格式 2、Lax-Friedrichs格式 3、Lax-Wendroff格式
💻 CPP
字号:
/*********************************************************************
 *本程序功能为计算一阶双曲型偏微分方程的初值问题: 
 
 *分别采用3种格式计算:1。迎风格式  2。Lax-Friedrichs格式 3。Lax-Wendroff格式
 
 *每种格式的时间 T又分为: T=0.5   和  T=1
 
 *程序在Dev-C++ 4.9.8.0下编译成功 
 
 *本程序在windows xp pro 下运行成功
 **********************************************************************/
 
 
#include  "stdio.h"

void init_step(void);
void ans_display(void);
void compute(int flag);

  double a=1;
  double h=0.1;
  double lambda=0.5,tau,T,N,J;
  double xj[400],u0j[400],u1j[400];
  int j,n;
  
int main()
{
  tau=lambda*h;
  J=1.0/h+1;
  printf("=============================当计算到T=0.5时,计算的结果=====================\n"); 
  T=0.5;
  N=T/tau;
  printf("下面的是迎风格式解法的结果:\n"); 
  compute(1);
  printf("下面的是Lax-Friedrichs格式解法的结果:\n"); 
  compute(2);    
  printf("下面的是Lax-Wendroff格式解法的结果:\n"); 
  compute(3);   
    tau=lambda*h;
	/*
  printf("=============================当计算到T=1时,计算的结果=======================\n"); 
  T=1;
  N=T/tau;
  printf("下面的是迎风格式解法的结果:\n"); 
  compute(1);
  printf("下面的是Lax-Friedrichs格式解法的结果:\n"); 
  compute(2);    
  printf("下面的是Lax-Wendroff格式解法的结果:\n"); 
  compute(3);    */
  getchar();     
}

void init_step(void)
{
   for(j=1;j<(int)(J+N+1);j++)
   { 
     xj[j]=(-1)*(j-1)*h+1.0;
     if (xj[j]<=0)
       u0j[j]=1;
     else 
       u0j[j]=2;
   }
}
void ans_display(void)
{
      for(j=(int)J;j>=1;j--)
      printf("%lf,\t%lf\n",xj[j],u1j[j]); 
}
void compute(int flag)
{   
      init_step();
      for(n=1;n<(int)(N);n++)
        {
           for(j=1;j<(int)(J+1+N-n);j++)
              if(flag==1)
                 u1j[j]=u0j[j]-lambda*0.5*(a+a)*(u0j[j]-u0j[j-1]);
              else if(flag==2)
                 u1j[j]=0.5*(1-a*lambda)*u0j[j+1]+0.5*(1+a*lambda)*u0j[j-1];
              else 
                 u1j[j]=u0j[j]-0.5*a*lambda*(u0j[j+1]-u0j[j-1])+0.5*a*lambda*a*lambda*(u0j[j+1]-2*u0j[j]+u0j[j-1]);
           for(j=1;j<(int)(J+1+N-n);j++)
              u0j[j]=u1j[j];
         }  
      ans_display();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -