Вход

Решение краевой задачи методом прогонки (ПЗ + программа на С++)

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 116315
Дата создания 2010
Страниц 20
Источников 4
Мы сможем обработать ваш заказ (!) 3 июня в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 930руб.
КУПИТЬ

Содержание

Оглавление
Задание
Решение краевой задачи
Постановка задачи
Метод решения
Метод решения СЛАУ
Метод прогонки
Алгоритм решения задачи
Исследование
Результаты
Список литературы
Приложение

Фрагмент работы для ознакомления

- Москва : Наука, 1978.

Приложение
//Описание используемых библиотек
//Описание билиотек ввода вывода
#include <fstream>
#include <iostream>
//Опиасание библиотеки математических функций
#include <math.h>
//Описание стандартных библиотек
#include <stdio.h>
#include <stdlib.h>
//Описание области видимости функций из библиотеки stdlib
using namespace std;
//функция считывания параметров задачи
void read(double &a, double &b, int &n, double &alfa0, double &alfa1, double &A1, double &betta0, double &betta1, double &B1)
{
//открываем входной поток
ifstream f("data.txt");
//считываем левую границу
f >> a;
//считываем правую границу
f >> b;
//считываем число интервалов разбиения
f >> n;
//считываем параметры левого краевого условия
f >> alfa0;
f >> alfa1;
f >> A1;
//считываем параметры правого краевого условия
f >> betta0;
f >> betta1;
f >> B1;
//закрываем входной поток
f.close();
};
//Функция считывания значений табличной функции p(x)
void read_p(int n, int j, double **f) //n-количество точек,
//f-массив значений функции
//j-количество вариантов функции (число столбцов)
{
ifstream f1("f.txt"); //открываем входной поток
int i, k; //счетчики
//считываем табличную функцию
for(i = 0; i < n; i++)
for(k = 0; k < j; k++)
f1 >> f[i][k];
//Закрываем входной поток
f1.close();
};
//функция вычисления q(x)
void q_rechnen(double a, double b, int n, double u, double *q)
//a-левая граница, b-правая граница, n-число интервалов,
//u-параметр функции, q-массив значений функции в точках
{
int i; //счетчик
double h = (b - a)/n; //шаг интрвалов
for(i = 0; i <= n; i++)
q[i] = cos(u * (a + i * h));
};
//функция вычисления правой части f(x)
void f_rechnen(double a, double b, int n, double *f)
//a-левая граница, b-правая граница, n-число интервалов,
//f-массив значений функции в точках
{
int i; //счетчик
double h = (b - a)/n; //шаг интрвалов
double x; //координаты узлов
for(i = 0; i <= n; i++)
{
x = a + h * i;
f[i] = 2 * x * x + 2 * x - 4;
}
};
//головная функция
void main()
{
double a, b; //левая правая граница
int n; //число интервалов
double alfa0, alfa1, A1; //параметры левого краевого условия
double betta0, betta1, B1; //параметры правого краевого условия
//чтение параметров задачи
read(a, b, n, alfa0, alfa1, A1, betta0, betta1, B1);
double h = (b - a)/n; //вычисление шага
int j = 5, s, k, i; //описание счетчиков
double u; //параметр задачи
//описание массивов
double *x; //массив узлов
x = new double[n + 1];
//вычисление массива узлов
for(i = 0; i <= n; i++)
x[i] = a + i * h;
//массив значений функции p(x) табличная
double **p;
p = new double*[n + 1];
for(i = 0; i < n + 1; i++)
p[i] = new double[j];
read_p(n, j, p);
//массив значений правой части
double *f;
f = new double[n + 1];
f_rechnen(a, b, n, f);
//массив значений функции q(x)
double *q;
q = new double[n + 1];
//описание коэффициентов прогонки
double *An, *Bn;
An = new double[n];
Bn = new double[n];
//описание массива решений
double *y;
y = new double[n + 1];
//описание массивов матрицы
double *c_n, *a_n, *b_n, *d_n;
c_n = new double[n + 1];
a_n = new double[n + 1];
b_n = new double[n + 1];
d_n = new double[n + 1];
//отрытие выходного потока
ofstream f1("result.txt");
for(s = 0; s < 6; s++) //счетчик по параметру s
{
u = 0.7 + 0.05 * s; //вычислим параметр u
//вычислим значение функции q(u,x) в узлах сетки
q_rechnen(a, b, n, u, q);
//Вычислим элементы СЛАУ на краевых условиях:
b_n[0] = h * alfa0 - alfa1;
c_n[0] = alfa1;
d_n[0] = A1 * h;
a_n[0] = 0.0;
a_n[n] = -betta1;
b_n[n] = h * betta0 + betta1;
c_n[n] = 0.0;
d_n[n] = h * B1;
for(k = 0; k < j; k++) //цикл по функциям p_j
{
//вычисляем внекраевые элементы матрицы СЛАУ
for(i = 0; i < n - 2; i++)
{
a_n[i + 1] = 1.0 - h * p[i][k] + h * h * q[i];
b_n[i + 1] = -2.0 + h * p[i][k];
c_n[i + 1] = 1;
d_n[i + 1] = h * h * f[i];
}
//вычисляем коэффициенты прогонки
An[0] = -alfa1/(h * alfa0 - alfa1);
Bn[0] = A1 * h/(h * alfa0 - alfa1);
for(i = 1; i < n; i++)
{
An[i] = -1.0/(a_n[i] * An[i - 1] + b_n[i]);
Bn[i] = (d_n[i] - a_n[i] * Bn[i - 1])/(a_n[i] * An[i - 1] + b_n[i]);
}
//Вычисляем значение функции в последней точке;
y[n] = (h * B1 + betta1 * Bn[n - 1])/(h * betta0 + betta1 * (1 - An[n - 1]));
for(i = n - 1;i >= 0; i--)
y[i] = An[i] * y[i + 1] + Bn[i];
//печатаем результат решения в файл
f1 <<"j="<< k + 1 <<" s="<< s << endl;
for(i = 0; i <= n; i++)
f1 << x[i] <<"\t" << y[i] << endl;
}
}
};
7

Список литературы [ всего 4]

Список литературы
Баландин М.Ю., Шурина Э.П. Методы решения СЛАУ большой размерности [Книга]. - Новосибирск : НГТУ, 2000.
Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы [Книга]. - Москва : Наука, 1987.
Калиткин Н.Н. Численные методы [Книга]. - Москва : Наука, 1978.
Самарский Введение в численнные методы [Книга]. - Москва : Наука, 1978.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00471
© Рефератбанк, 2002 - 2024