Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 00:16   #1
ardor
Пользователь
 
Регистрация: 16.11.2009
Сообщений: 51
По умолчанию [C#] Метод конечных разностей

Помогите разобраться с задачей. Нужно написать программу для расчета теплопроводности стержния методом конечных разностей. Схема Ричардсона.
Вот что у меня:
Код:
public void MKR()
        {
            double T0 = /*Convert.ToDouble(textBox1.Text);*/ 20;
            double TL = /*Convert.ToDouble(textBox2.Text);*/ 300;
            double TR = /*Convert.ToDouble(textBox3.Text);*/ 100;
            double EndTime = Convert.ToDouble(textBox5.Text);
            double L = Convert.ToDouble(textBox6.Text);
            double N = /*Convert.ToDouble(textBox4.Text);*/ 50;
            double lambda = 46;
            double ro = 7800;
            double c = 460;
            double a = lambda / (ro * c);
            double h = L/(N-1);
            double tau = (0.25 * h * h) / a;
            double nT = EndTime/tau;
            int nTi = Convert.ToInt32(nT);
            int Ni = Convert.ToInt32(N);
            T = new double[nTi+2, Ni+1];

            for (int i = 1; i < N - 1; i++)
            {
                T[0, i] = T0;
            }
            for (int i = 0; i < Convert.ToInt32(nT); i++)
            {
                T[i, 0] = TL;
                T[i, Ni-1] = TR;
            }
            int k = 1;
            double time = 0;
            while (time < EndTime)
            {
                time += tau;
                for (int i = 1; i < Ni-1; i++)
                {
                    //T[k, i] = T[k - 1, i] + a * tau / (h * h) * (T[k - 1, i + 1] - 2 * T[k - 1, i] + T[k - 1, i - 1]);
                    if (k == 1)
                    {
                        T[k, i] = T[k - 1, i] + a * tau / (h * h) * (T[k - 1, i + 1] - 2 * T[k - 1, i] + T[k - 1, i - 1]);
                    }
                    else
                    T[k, i] = T[k - 2, i] + 2 * a * tau / (h * h) * (T[k - 1, i - 1] - 2 * T[k - 1, i] + T[k - 1, i + 1]);
                }
                k++;
            }
dataGridView1.ColumnCount = Ni;
            dataGridView1.RowCount = nTi;
            n1 = Ni;
            n2 = nTi+1;

            for (int i = 0; i < Ni; i++)
            {
                for (int j = 0; j < nTi; j++)
                {
                    dataGridView1[i, j].Value = T[j, i].ToString();
                }
            }        
        }
Значения жутко скачут, да и выходят слишком маленькими. Решал эту же задачу с помощью явной четырехточечной схемы. Все работает. С этой схемой никак немогу разобраться =(
ardor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод конечных (центральных) разностей Alex.Pi Помощь студентам 0 17.04.2012 18:59
заменить содержимое конечных ячеек AllenJ Microsoft Office Excel 3 03.01.2012 23:39
алгоритмизация разделенных разностей для метода Эверхарта vassisualii Помощь студентам 0 05.10.2011 22:27
вычисление конечных сумм в Паскале. lammy Помощь студентам 8 10.03.2010 13:48
Метод конечных элементов kodSIM Общие вопросы C/C++ 1 08.10.2008 14:45