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
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// afx_msg void OnDemoAnalit();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //!defined(AFX_MAINFRM_H__9A49CF0A_0006_11D3_A7F6_F5D97F5F2E6D__INCLUDED_)
StdAfx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if!defined(AFX_STDAFX_H__9A49CF08_0006_11D3_A7F6_F5D97F5F2E6D__INCLUDED_)
#define AFX_STDAFX_H__9A49CF08_0006_11D3_A7F6_F5D97F5F2E6D__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC OLE automation classes
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //!defined(AFX_STDAFX_H__9A49CF08_0006_11D3_A7F6_F5D97F5F2E6D__INCLUDED_)
0 комментариев