110482 (616246), страница 2
Текст из файла (страница 2)
Для точного розв’язку у нашій крайовій задачі функція ; тому для отримання наближеного розв’язку, близького до точного, нам вигідно підібрати коефіцієнти
так, щоб функція
була в якомусь сенсі малою.
Згідно методу Галеркіна вимагаємо, щоб нев’язність була ортогональною до базисних функцій
(
= 1, 2, . . . , n), що при достатньо великому числі цих функцій, в силу наведеного вище зауваження, забезпечує малість нев’язності в середньому.
Наскільки цей наближений розв’язок близький до точного, в загальному випадку питання залишається відкритим. Таким чином, для визначення коефіцієнтів (
= 1, 2, . . . , n) приходимо до системи лінійних рівнянь
або, більш детально,
(10)
(
= 1, 2, . . . , n).
РОЗДІЛ 2. ПРАКТИЧНА ЧАСТИНА
2.1. Алгоритм методу
1. Визначаємо з даного диференціального рівняння другого порядку функції
.
2. Обираємо систему базисних функцій (
= 0, 1, . . . , n) так, щоб функція
задовольняла крайовим умовам:
а функції
(
= 1, 2, . . . , n) задовольняли б однорідним крайовим умовам
(
= 1, 2, . . . , n).
3. Знаходимо (
= 0, 1, 2, 3, 4).
4. Використовуючи позначення
,
обраховуємо коефіцієнти системи:
(
= 1, 2, . . . , n).
5. Виконуючи необхідні скорочення приходимо до системи з якої визначаємо (
= 1, 2, . . . , n) і отримуємо розв’язок вигляді:
.
2.2. БЛОК-СХЕМА АЛГОРИТМУ
Метод Галеркіна
Введення
Введення
(
= 0, 1, . . . , n)



Ні
Так
Ні
Так
Обрахунок (
= 0, 1, 2, 3, 4)
Обрахунок
,
Обрахунок (
= 1, 2, . . . , n)
2.3. Тестовий приклад
Методом Галеркіна знайти наближений розв’язок рівняння,
, (11)
що задовольняє крайовим умовам
. (12)
Розв’язання:
Оберемо в якості системи базисних функцій (
0, 1, 2, 3, 4) наступні тригонометричні функції:
,
,
,
,
.
Ці функції лінійно незалежні на відрізку , причому функція
задовольняє крайовій умові (12), а інші функції – нульовим крайовим умовам. Будемо шукати розв’язок у вигляді
.
Знаходимо (
= 0, 1, 2, 3, 4):
,
,
,
,
,
.
Обраховуємо коефіцієнти системи (10), використовуючи наступні позначення:
,
,
і враховуючи при цьому ортогональність системи тригонометричних функцій
(1, ,
,
,
, . . .)
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
.
Виконуючи відповідні скорочення, приходимо до системи
з якої одержуємо ,
,
. Таким чином маємо
.
В таблиці 1 наведено для порівняння значення отриманого наближеного розв’язку і точного розв’язку
Наближений і точний розв’язок задачі (11), (12)
Таблиця 1:
| - | 0 | |
| 1.429 | 2 | 3.714 |
| 1.368 | 2 | 3.718 |
Приклад розв'язання крайової задачі методом Галеркіна в середовищі Mathcad
Постановка задачі:
Серед усіх функцій y(x), визначених на інтервалі [a;b] і задовольняючих крайовим умовам y(a)=0 і y(b)=0 потрібно знайти таку, яка задовольняла б диференціальному рівнянню p(x)y''+q(x)y'+r(x)y+k(x)=0
Вихідні дані:
Границі інтервала:
Функція p(x):
Функція q(x)
Функція r(x)
Функція k(x):
Розрахункові формули:
Алгебраїчні базисні функції:
Число членів у сумі Рітца
Формування систем лінійних алгебраїчних рівнянь метода Галеркіна для випадку алгебраїчних базисних функцій:

A_al_2:= [на дискеті, Галеркін.mcd]
Число членів у сумі Рітца
A_al_3:= [на дискеті, Галеркін.mcd]
Розв'язання задачі
Розв'язання систем рівнянь - визначення коефіцієнтів сум Рітца:
Номер останнього утримуваного члена суми Рітца
Алгебраїчні базисні
функції:
Задання кроку табулювання сум Рітца:
Побудова розв'язків у вигляді сум Рітца:
Алгебраїчні базисні функції:
Результати отримані за допомогою створеної програми
ВИСНОВОК
Математичне моделювання процесів і явищ в різних галузях науки і техніки є одним з головних способів отримання нових знань і технологічних рішень. В наш час коли життя людини вже майже неможливе без електронно-обчислювальної техніки, всі процеси автоматизуються, а задачі, які потребували деякого часу і зусиль тепер виконуються за лічені хвилини.
Чисельні методи один із напрямів розробки пошуку оптимальних розв’язків математичних задач та пошуку саме того методу, який би давав найбільш точний результат. Моя робота присвячена одному з методів пошуку розв’язку лінійної крайової задачі – методу Галеркіна. Даний метод досить зручний для пошуку розв’язку у вигляді аналітичного виразу.
В першій частині курсового проекту розглянута постановка задачі, в якій наведено опис методу. В математичній моделі описано безпосередньо сам метод Галеркіна та його основні принципи.
Друга частина мого курсового проекту починається з опису алгоритму методу Галеркіна для пошуку розв’язку лінійної крайової задачі. В алгоритмі містяться головні кроки пошуку розв’язку лінійної крайової задачі за даним мені методом. За цим алгоритмом наведений тестовий приклад, а також написана програма в середовищі Microsoft Visual C++, текст якої знаходиться в додатку А. До даного методу складена блок-схема алгоритму.
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
1. Капченова Н.В., Марон И.А. Вычислительная математика в примерах и задачах. – М: Наука, 1972. – 369 С.
2.Демидович Б.П., Марон И.А. Основы вычислительной математики. - М.: Физматгиз, 1960. - 659с.
3.Калиткин Н.Н. Численные методы. - М.: Наука, 1978. - 512с.
4. Бахванов Н. С., Жидков Н.П. Кобельков Г.М. Чисельные методы електронный вариант учебника.
5. Белашов В. Ю., Чернова Н. М. Эффективные алгоритмы и программы вычислительной математики. Магадан: СВКНИИДВОРАН, 1997. 160 с.
6. Культін Н.Б. Программирование в Turbo Pascal 7.0 и Delphi. – СПб: BHV- Санкт-Петербург, 1999. – 234с.
ДОДАТОК А
ТЕКСТ ПРОГРАМИ МОВОЮ Microsoft Visual C++
MainFrm.cpp
#include "StdAfx.h"
#include "example.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
CMainFrame::CMainFrame()
{
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;
}
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
return CFrameWnd::PreCreateWindow(cs);
}
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif
MainFrm.h
#if!defined(AFX_MAINFRM_H__9A49CF0A_0006_11D3_A7F6_F5D97F5F2E6D__INCLUDED_)
#define AFX_MAINFRM_H__9A49CF0A_0006_11D3_A7F6_F5D97F5F2E6D__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif
class CMainFrame : public CFrameWnd
{
protected:
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif