#include <iostream> //输入输出流头文件
#include <cmath> //包含了许多数学函数的库文件
using namespace std; //使用std这个名字空间
int main() //返回整形变量,若void main不用返回
{
double c=0.1; //参数设定
double deltaX=0.01; //空间步长
double t=0.01; //选定时刻
double deltaT=c*deltaX*deltaX; //时间步长
int const M=100; //空间网格数
int N=t/deltaT; //10s内的时间网格数
double T[M+1]; //存放初始值和边界值
double result[M+1]; //存放结果
int i,j;
//初始化
for(i=1;i<M;i++)
{
if(i*deltaX<0.3)
{
T[i]=0;
}
else if(i*deltaX<0.7)
{
T[i]=1;
}
else
{
T[i]=10/3*(1-i*deltaX);
}
T[0]=0;
T[M]=0;
}
//节点差分
for(i=1;i<=N+1;i++) //时间迭代
{
T[0]=0;
T[M]=0;
for(j=0;j<=M;j++)
{
result[j]=T[j];
}
for(j=1;j<100;j++) //空间迭代
{
T[j]=result[j]+deltaT*(result[j+1]-2*result[j]+result[j-
1])/deltaX/deltaX;
}
if(i*deltaT==t)
{
cout<< "FTCS" <<" "<<endl;
cout<< "Time=" << t <<endl;
cout<< "σ =" << c <<endl<<endl;
for(j=0;j<=M;j++)
{
cout<< result[j] <<endl; //输出结果
}
cout<<endl<<endl;
}
}
}