- •О. О. Абакумова «Обчислювальна математика-2»
- •Теоретичні відомості
- •Метод простої ітерації
- •Метод Гауса
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості
- •Метод бісекції
- •Метод Ньютона (метод дотичних) Для уточнення наближеного розв’язку рівняння зручно використовуватиметод Ньютона, який також називають методом дотичних.
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості.
- •Метод простої ітерації
- •Метод Ньютона
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості
- •Метод Ейлера
- •Метод Ейлера з уточненням
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості
- •Зразок виконання завдання
- •Приклад програми
- •Контрольні питання
- •Теоретичні відомості.
- •Метод золотого перетину
- •Зразок виконання завдання
- •Приклад програми
- •Контрольні питання
Приклад програми
// Розв’язання задачі Діріхле для рівняння Лапласа методом сіток
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <cmath>
using namespace std;
float fab(float x, float y)
{
return 45*y*(1-y); // AB
};
float fbc(float x, float y)
{
return 25*x; // BC
};
float fcd(float x, float y)
{
return 25; // CD
};
float fad(float x, float y)
{
return 25*x*sin(3.14*x/2); // AD
} ;
void main()
{
clrscr();
int p=0;
float e, x,y;
float h=0.2, u[6][6], k[6], U[6][6], du, m=-1;
do
{
clrscr();
cout<<"ZADACHA DIRIHLE:\n\n";
cout<<"UAB=20*y\n";
cout<<"UBC=20\n";
cout<<"UCD=20*y*y\n";
cout<<"UAD=50*x*(1-x)\n\n";
cout<<"0<=x<=1; 0<=y<=1\n\n";
cout<<"1)Rozvjazatu zadachy Dirihle\n";
cout<<"2)EXIT\n\n\n";
cout<<"Vash vubir (1, 2)\t";
cin>>p;
if(p==2)
{exit(1);}
clrscr();
if(p==1)
{
clrscr();
cout<<"Vvedit pohubky: e=";
cin>>e;
cout<<endl;
x=0; y=0;
for(int i=0; i<=5; i++)
{
u[i][5]=fbc(x,1);
u[i][0]=fad(x,0);
u[0][i]=fab(0,y);
u[5][i]=fcd(1,y);
x=x+h;
y=y+h;
}
k[1]=(u[5][1]-u[0][1])/5; cout<<"k[1]="<<k[1]<<endl;
k[2]=(u[5][2]-u[0][2])/5; cout<<"k[2]="<<k[2]<<endl;
k[3]=(u[5][3]-u[0][3])/5; cout<<"k[3]="<<k[3]<<endl;
k[4]=(u[5][4]-u[0][4])/5; cout<<"k[4]="<<k[4]<<endl;
for(int i=1; i<5; i++)
{
for(int j=1; j<5; j++)
{
u[j][i]=u[j-1][i]+k[i];
}
}
cout<<"\nNuljovyj shablon:\n\n";
for(int i=5; i>=0; i--)
{
for(int j=0; j<=5; j++)
{
U[j][i]=u[j][i];
cout<<setw(10)<<U[j][i];
}
cout<<endl;
}
do{
m=0;
for(int i=1; i<5; i++)
{
for(int j=1; j<5; j++)
{
u[j][i]=(U[j-1][i]+U[j+1][i]+U[j][i-1]+U[j][i+1])/4;
du=fabs(u[j][i]-U[j][i]);
U[j][i]=u[j][i];
if(du>m)
{ m=du; }
}
}
} while(m>e);
cout<<"\nVidpovid:\n\n";
for(int i=5; i>=0; i--)
{
for(int j=0; j<=5; j++)
{
cout<<setw(10)<<u[j][i];
}
cout<<"\n";
}
getch();
}
} while(p!=2);
}
Контрольні питання
Які рівняння називають рівняннями з частковими похідними?
Що називають розв’язком рівняння з частковими похідними?
Які задачі називають крайовими задачами?
Запишіть еліптичне рівнянням Лапласа.
Сформулюйте задачу Діріхле.
Назвіть відомі Вам методи розв’язання крайових задач для рівнянь з частковими похідними.
Наведіть алгоритм знаходження наближеного розв’язку задачі Діріхле для рівняння Лапласа методом сіток.
Яку таблицю називають нульовим шаблоном?
Лабораторна робота №6
Тема: Оптимізація функцій
Завдання: 1) Методом золотого перетину знайти найбільше значення унімодальної функції на заданому відрізкуз точністю до 0.01.
2) Методом золотого перетину знайти найменше значення унімодальної функції на заданому відрізкуз точністю до 0.01.
Вар. |
Функція |
|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20 |
|
|