Вычислить методом прогонки область, разделенная на 3 части - C#

Узнай цену своей работы

Формулировка задачи:

помогите пожалуйста. надо вычислить методом прогонки область, разделенная на 3 части(D0, D1, D2). Заданы лишь граничные условия. В D1 ρ <0, в D2 ρ>0 => D0 ρ=0. Вычисление коэффициентов в pdf. Я попытался вычислить D0 чтобы оно стало начальным условием:
class Program{
        const double eta = 0.5;
        const double l = 1.0;
        const double T = 1.0;
        const int n = 20;
        const int M = 20;
        const int m = 10;
        const double h = 0.05;
        const double tau = 0.05;
        const double A = 5.0;
        public static double rho(double t){
            return t - eta;
        }
        public static double f(double x, double t, double B){
            double e = Math.Exp(B*(x+t));
            return A*B*e*(rho(t) - B);
        }
        public static double m1(double B, double t){
            return A * Math.Exp(B*t);
        }
        public static double m2(double B, double t){
            return A * Math.Exp(B*(l+t));
        }
        public static double U(double x, double t, double B){
            return A * Math.Exp(B*(x+t));
        }
        
        static void Main(string[] args){
            double B = double.Parse(Console.ReadLine());
            double x, t;
            double[] alpha = new double[n];
            double[] beta = new double[n];
            double[] F = new double[n];
            double[,] y = new double[n + 1, m + 1];
            double[,] z = new double[n + 1, M + 1];
            double[,] v = new double[n + 1, M];
            double[] a = new double[n];  //над гл.диагональю
            double[] b = new double[n];  //под гл.диагональю
            double[] c = new double[n];  //гл.диагональ
            double[,] d1 = new double[n + 1, M + 1];  //абсолютная погрешность
            double[,] d2 = new double[n + 1, M + 1];  //относительная погрешность
            
            b[0] = 0;
            c[0] = 1;
            F[0] = m1(B, m*tau);
            alpha[0] = b[0] / c[0];
            beta[0] = F[0] / c[0];
            for (int i = 1; i <= n-1; i++)
            {
                x = i * h;
                alpha[i] = b[i] / (c[i] - (a[i] * alpha[i - 1]));
                beta[i] = (((h * h) * f(x, m, B)) + (a[i] * beta[i - 1])) / (c[i] - (a[i] * alpha[i - 1]));
                y[i+1, m] = alpha[i] * y[i - 1, m] + beta[i];
                Console.WriteLine(y[i, m]);
            }
            //for (int i = 0; i < = n - 1; i++) {}
            Console.ReadLine();
 
        }
    }
но у меня даже это не выходит...

Решение задачи: «Вычислить методом прогонки область, разделенная на 3 части»

textual
Листинг программы
class Program{
        const double eta = 0.5;
        const double l = 1.0;
        const double T = 1.0;
        const int n = 20;
        const int m = 10;
        const int M = 20;
        const double h = 0.05;
        const double tau = 0.05;
        const double A = 5.0;
        public static double rho(double t){
            return t - eta;
        }
        public static double f(double x, double t, double B){
            //double e = ;
            return A*B*Math.Exp(B*(x+t))*((t-eta) - B);
        }
        public static double m1(double B, double t){
            return A * Math.Exp(B*t);
        }
        public static double m2(double B, double t){
            return A * Math.Exp(B*(l+t));
        }
        public static double U(double x, double t, double B){
            return A * Math.Exp(B*(x+t));
        }
        
        static void Main(string[] args){
            Double B = double.Parse(Console.ReadLine());
            double x,t;
            double [] v = new double[n+1];
            double [,] y = new double[n + 1, m + 1];
            double [,] z = new double[n + 1, M + 1];
            double [] alpha = new double [n];
            double [] beta = new double [n];
            double [] a = new double [n+1];
            double [] b = new double [n+1];
            double [] c = new double [n+1];
            double [] F = new double [n+1];
 
            for (int i = 0; i <= n; i++)
            {
                x = i * h;
                a[i] = 1;
                c[i] = 2;
                b[i] = 1;
                F[i] = (h*h)*f(x, eta, B);
                c[0] = 1;
                b[0] = 0;
                F[0] = m1(B, eta);
                //a[n] = 0; c[n] = 1; F[n] = m2(B, eta);
                alpha[0] = b[0] / c[0];
                beta[0] = F[0] / c[0];
                }
            for (int i = 1; i <= n-1; i++)
            {
                alpha[i] = b[i] / (c[i] - (a[i] * alpha[i - 1]));
                beta[i] = (F[i] + (a[i] * beta[i - 1])) / (c[i] - (a[i] * alpha[i - 1]));
            }
            for (int i = 1; i <= n-1; i++ )
            {
                v[0] = alpha[0] * v[i] + beta[0];
                v[i] = alpha[i] * v[i + 1] + beta[i];
 
            }
            for (int i = 0; i <= n; i++)
            {
                x = i * h;
                Console.WriteLine("v[" + i + "] = " + v[i] + "   " + U(x, eta, B));
            }
            /*for (int j = m - 1; j >= 0; j--)//D1
            {
                t = j * tau;
                y[0, j + 1] = m1(t + tau, B);
                y[n, j + 1] = m2(t + tau, B);
                Console.WriteLine(j);
            }
            for (int j = m + 1; j <= M; j++)
            {
                t = j * tau;
                z[0, j] = m1(t + tau, B);
                z[n, j] = m2(t + tau, B);
                Console.WriteLine(j);
            }*/
            Console.ReadLine();
        }
 
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы