user-0 提问: 请大佬们答疑解惑，一维扩散方程有限差分不会编。。。

回复:
user: user-1
content: ////全隐式差分格式调用    //double a[Nx - 2] = { 0 };    //double b[Nx - 2] = { 0 };    //double c[Nx - 2] = { 0 };    //b[0] = 1 + 2 * r;    //c[0] = -r;    //a[Nx - 3] = -r;    //b[Nx - 3] = 1 + 2 * r;    //for (int i = 1; i <= Nx - 4; i++)    //{    //    a[i] = -r;    //    b[i] = 1 + 2 * r;    //    c[i] = -r;    //} //double d[Nx - 2];    //赋予首末值 //d[0] = T[1] + r*T[0];     //d[Nx - 3] = T[Nx - 2] + r*T[Nx-1];     //for (int i = 1; i <= Nx - 4; i++) //{ //    d[i] = 0.0; //}  //int n = 0; //while (n <= Nt - 1) //{  //    Tridiagnol_Solution(a, b, c, T, d);  //    for (int i = 0; i <= Nx - 3; i++)    //补丁作用 //    { //        T[Nx - 2 - i] = T[Nx - 3 - i]; //    }   //    T[0] = left;    //追赶法从后往前计算，因此左端的值会被改变   //    for (int i = 0; i <= Nx - 1; i++) //    { //        fprintf(f, "%.4f\t", T[i]); //    } //    n++; //    fprintf(f, "\n");  //    //新一轮计算（隐式） //    d[0] = T[1] + r*T[0]; //    d[Nx - 3] = T[Nx - 2] + r*T[Nx - 1]; //    for (int i = 1; i <= Nx - 4; i++) //    { //        d[i] = T[i];    //将计算后的新值T赋给d迭代计算 //    }    //}  ////全显示差分格式调用（不需要追赶法计算） //double a = r; //double b = 1 - 2 * r; //double c = r;   //int n = 0; //double T1[Nx] = {0};    //创建临时存储数组 //while (n <= Nt - 1) //{ //    for (int i = 1; i <= Nx - 2; i++) //    { //        T1[i]=a*T[i-1]+b*T[i]+c*T[i+1];    //显式格式非常注意扩散系数和空间节点的选择！ //        T[i] = T1[i]; //    }  //    T[0] = left; //    T[Nx - 1] = right; //    for (int i = 0; i <= Nx - 1; i++) //    { //        fprintf(f, "%.4f\t", T[i]); //    } //    n++; //    fprintf(f, "\n");   //}   ////两层算术平均格式（恒稳定）（使用追赶法求解） ////C-N差分格式（交替分段显隐方法） //double a[Nx - 2] = { 0 }; //double b[Nx - 2] = { 0 }; //double c[Nx - 2] = { 0 }; //b[0] = 1 + 2 * r; //c[0] = -r; //a[Nx - 3] = -r;     //b[Nx - 3] = 1 + 2 * r; //for (int i = 1; i <= Nx - 4; i++) //{ //    a[i] = -r; //    b[i] = 1 + 2 * r; //    c[i] = -r; //}  //double a1 = r; //double b1 = 1 - 2 * r; //double c1 = r;  ////等号右边初始化：d,d1 //double d[Nx - 2];    //赋予首末值 //d[0] = a1*T[1] + b1*T[0];    //等号右边均为常量值 //d[Nx - 3] = c1*T[Nx - 2] + b1*T[Nx-1];     //for (int i = 1; i <= Nx - 4; i++) //{ //    d[i] = a1*T[i + 1] + b1*T[i] + c1*T[i - 1]; //}  //double d1[Nx - 2];    //将d1作为新的变化量 //d1[0] = d[0]+r*T[0]; //d1[Nx - 3] = d[Nx - 3] + r*T[Nx - 1]; //for (int i = 1; i <= Nx - 4; i++) //{ //    d1[i] = d[i]; //}  ////double T1[Nx] = { 0 };    //临时迭代数组 //int n = 0;  //while (n <= Nt - 1) //{ //    Tridiagnol_Solution(a, b, c, T, d1);  //    for (int i = 0; i <= Nx - 3; i++)    //补丁作用 //    { //        T[Nx - 2 - i] = T[Nx - 3 - i]; //    }  //     //    T[0] = left; //    //T[Nx - 1] = right; //    for (int i = 0; i <= Nx - 1; i++) //    { //        fprintf(f, "%.4lf\t", T[i]); //    } //    n++; //    fprintf(f, "\n");  //    //对d1重新赋予首末值  //    d[0] = a1*T[1] + b1*T[0];    //等号右边均为常量值 //    d[Nx - 3] = c1*T[Nx - 2] + b1*T[Nx - 1]; //    for (int i = 1; i <= Nx - 4; i++) //    { //        d[i] = a1*T[i + 1] + b1*T[i] + c1*T[i - 1]; //    }  //    d1[0] = d[0] + r*T[0]; //    d1[Nx - 3] = d[Nx - 3] + r*T[Nx - 1]; //    for (int i = 1; i <= Nx - 4; i++) //    { //        //d1[i] = a1*T[i + 1] + b1*T[i] + c1*T[i - 1]; //        d1[i] = d[i]; //    } //}