Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Вариант 7 и 2. Метод прогонки (факторизации). Явные и неявные методы, разложение в ряд Фурье и исследование устойчивости по начальным данным и схемы Кранка - файл От4.doc


Вариант 7 и 2. Метод прогонки (факторизации). Явные и неявные методы, разложение в ряд Фурье и исследование устойчивости по начальным данным и схемы Кранка
скачать (890.6 kb.)

Доступные файлы (28):

Lab2.exe
Lab2.pdb
Lab2.vshost.exe
Form1.cs
Form1.Designer.cs
Form1.resx
Lab2.csproj
Lab2.csproj.GenerateResource.Cache
Lab2.exe
Lab2.Form1.resources
Lab2.pdb
Lab2.Properties.Resources.resources
Lab2.csproj.FileList.txt1kb.24.05.2008 16:17скачать
Program.cs
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
Lab2.sln
Lab2.suo
otc-4-2.pdf22kb.23.12.2007 23:35скачать
От4.doc742kb.07.06.2009 18:06скачать
От4.docx80kb.23.12.2007 22:00скачать
Отчёт4(1).doc629kb.07.06.2009 18:04скачать
Отчёт4(1).docx122kb.24.12.2007 04:05скачать
Отчёт4.doc613kb.07.06.2009 18:05скачать
Отчёт4.docx119kb.24.12.2007 03:42скачать

содержание
Загрузка...

От4.doc

Реклама MarketGid:
Загрузка...

  1. П
    Чепилов Дмитрий Гр.6208

    Задание #4, Вариант #2
    остановка задачи.


Дано уравнение теплопроводности



Заданы:

  • начальные условия





  • Граничные условия





Выполнить следующие задания:

  • Методом разделения переменных построить ряд Фурье.

  • Доказать устойчивость по начальным данным

  • Построить разносный метод (неявная схема), исследовать его устойчивость по начальным данным.

  1. Расчётные формулы.

Разложим в ряд Фурье:

Для этого сделаем замену





Далее решаем методом разделения переменных, делаем замену



Подставим в , получим:









=>

=>





Подставим в , получим:















Рассмотрим 2 случая:

  • Первый случай , тогда



  • Второй случай , тогда





Тогда наш ряд (5) примет вид:





Докажем устойчивость по начальным данным







Исследуем на устойчивость неявную схему:



Делаем замену — , получим:





Подставим выражение в уравнение , получим:













Воспользуемся решением уравнения (3), получим:



Подставим выражение (9) в уравнение (8), получим:





















Знаменатель всегда больше единицы, следовательно, вся дробь меньше единицы. У данного метода безусловная сходимость.

^ Алгоритм прогонки(Факторизации)

Метод прогонки является одним из эффективных методов решения СЛАУ с трехдиагональными матрицами, возникающих при конечно-разностной аппроксимации задач для обыкновенных дифференциальных уравнений (ОДУ) и уравнений в частных производных второго порядка Прямой метод (определение прогоночных коэффициентов ):

, так как



т.к. ,

  • Обратный ход метода прогонки (отыскание решения):



  1. Текст программы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;


namespace WindowsApplication5

{

public partial class Form1 : Form

{

static double[] U_prev;

public Form1()

{

InitializeComponent();

}


static double[] progonka(double[] a, double[] b, double[] c, double[] d, int n)

{

int i;

double[] p, q, solution;

p = new double[n];

q = new double[n];

solution = new double[n];

p[0] = -c[0] / b[0];

q[0] = d[0] / b[0];

double temp;

for (i = 1; i < n - 1; i++)

{

temp = b[i] + a[i - 1] * p[i - 1];

p[i] = -c[i] / temp;

q[i] = (d[i] - a[i - 1] * q[i - 1]) / temp;

}

temp = b[n - 1] + a[n - 2] * p[n - 2];

p[n - 1] = 0;

q[n - 1] = (d[n - 1] - a[n - 2] * q[n - 2]) / temp;

solution[n - 1] = q[n - 1];

for (i = n - 2; i >= 0; i--)

solution[i] = p[i] * solution[i + 1] + q[i];

return solution;

}


private double Decision(double x, double t) // решение

{

double arg = -(Math.PI * Math.PI / 2 + 1) * t;

double result = Math.Sqrt(3) / 3 * Math.Sin(Math.PI * x) * Math.Exp(arg);

return result;

}


private double U0(double x)

{

double result=Math.Sqrt(3) / 3 * Math.Sin(Math.PI * x);

return result;

}

private void Implicit_scheme(int N, int K)

{

U_prev = new double[N+1];

int i, k;

double h = (double)1 / N ;

double tau = (double)1 / K ;

U_prev[0] = 0;

U_prev[N] = 0;

for (i = 1; i < N; i++)

U_prev[i] = U0(i * h);

int n = N - 1;

double[] a = new double[n]; // a, b, c, d <-- прогоночные коэффициенты

double[] b = new double[n];

double[] c = new double[n];

double[] d = new double[n];

double[] x = new double[n];


listBox1.Items.Clear();

listBox1.Items.Add("Решение, N="+N+", K="+K);

for (k = 0; k < K; k++)

{

for (i = 0; i < n; i++)

{

a[i] = -tau;

b[i] = 2 * (h * h - tau);

c[i] = -tau;

d[i] = 2 * h * h * (1 - tau) * U_prev[i + 1];

}

x = progonka(a, b, c, d, n);

for (i = 0; i < n; i++)

U_prev[i + 1] = x[i];

if ((k == K / 2) || (k == K - 1))

{

double temp, err;

listBox1.Items.Add("при k = "+k.ToString());

String str="";

for (i = 0; i < N+1; i++)

{

temp = Decision(i * h, k * tau);

err = temp - U_prev[i];

str = "U[" + i + "] = " + U_prev[i] .ToString() + " | точное решение = " + temp + " | ошибка = " + err.ToString();

listBox1.Items.Add(str);

}

if (k == K / 2)

listBox1.Items.Add(" ");

}

}

}


private void button1_Click(object sender, EventArgs e)

{

Implicit_scheme(10, 10);

}

}

}

  1. Результат.




Скачать файл (890.6 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru