Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Розробка програми




2.1 Обчислювальна схема методу Рунге-Кута:

1. Виклик функції Yravnen() - приклади рівнянь користувачу.

2. Вводимо вихідні дані:

o а). номер рівняння, яке потрібно вирішити - chose;

o б). початок і кінець даного відрізка [x0,x];

o в). кількість кроків n;

o г). значення y0.

3. Обчислюємо величину кроку. h=(x-x0)/h

4. Привласнюємо у0 до першого елементу масиву у. y[0]=y0

5. Обчислюємо розв’язання рівняння, яке вибрали. Для цього робимо цикл від 0 до n і для кожного значення х обчислюємо значення у: for(int i=0; i<=n; i++)

{

· а). обчислюємо i-ий крок. x1=x0+i*h;

· б). визначаєм перший коефіциєнт даного методу. k1=h*F(x1,y[i],chose)

· в). визначаєм другий коефіцієнт даного методу. k2=h*F(x1+h/2,y[i]+k1/2,chose)

· г). визначаєм третій коефіцієнт даного методу. k2=h*F(x1+h/2,y[i]+k2/2,chose)

· д). визначаєм четвертий коефіцієнт даного методу.k2=h*F(x1+h,y[i]+k3,chose)

· е). обчислюємо значення у: y[i+1]=y[i]+(k1+2*k2+2*k3+k4)/6;

ж). виводимо значення у[i+1] при його значенні х1:cout <<x1<<” ”<<y[i+1]

}// кінець цикла при i=n.

 

6. Кінець програми.

Опис функції F(x,y, chose).

Функція має три формальні змінні:

· 1. значення х;

· 2. значення у;

· 3. номер обраного рівняння chose.

 

double F(float x,float y,int chose)

Дана функція, вибирає потрібне рівняння, по значенню chose:

 

double f;

if (chose==1) f=x+y;

if (chose==2) f=cos(x)+sin(y);

if (chose==3) f=2*x*x+sqrt(y+x);

if (chose==4) f=cos(x)+y/6;

if (chose==5) f=(x*x+2*y)/sin(x);

Дана функція повертає значення типу double

return f;

 

Опис функції Yravnen();

Дана функція не має формальних перемінних і повертає типvoid.

У ній виводяться на екран приклади рівнянь для користувача:

cout<<"1. f=x+y \n";

cout<<"2. f=cos(x)+sin(y) \n";

cout<<"3. f=2*x*x+sqrt(y) \n";

cout<<"4. f=cos(x)+y/6 \n";

cout<<"5. f=(x*x+2*y)/sin(x) \n";


Блок – схема.

 

 

 

       
   
 

 


|

x, x0 , y0, ---------| (k1+2*k2+2*k3+k4)/6

n,chose |

       
   
 
 


 


х1, y[i+1]

 

Yravnen()

       
   


1. f=x+y

2. f=cos(x)

+sin(y)

 
 


3. f=2*x*x

+sqrt(y)

 
 


4.f=cos(x)

+ y/6

 
 


 

 
 

5.f=(x*x+

2*y)/sin(x)

       
   
 
 


 

       
   

 

 


F(x,y)-вибір функції


 

       
   
 

 


ні ні

       
   


так так

       
   

 


ні

       
 
 
   

 


так

 
 

 


ні

       
 
 
   

так

 

 
 

 

 


ні

       
 
 
   

 


так

 
 

 

 

       
 
   
 


 

       
   

 

 

 


x, x0 , y0,

n,chose

 
 


           
 
   
 
   
 

 

 

 


|

-------------|(h/24)*(55*y1-59*y2+37*y3-*y4).

|

 

y[i+1]

       
   
 
 

 

 


 


 

 
 

 

 


2.2 Обчислювальна схема методу Адамса:

1. Виклик функції Yravnen() - приклади рівнянь користувачу.

2. Вводимо вихідні дані:

а). номер рівняння, яке потрібно вирішити - chose;

б). початок і кінець даного відрізка [x0,x];

в). кількість кроків n;

г). значення y0.

3. Обчислюємо величину кроку. h=(x-x0)/h

4. Привласнюємо у0 до першого елемента масиву у. y[0]=y0

 

5. Обчислюємо розв’язання рівняння, яке вибрали. Для цього робимо цикл від 3 до n+2 і при кожнім наступному кроці обчислюємо значення у: for (int i=3; i<=n+2; i++)

{

а). обчислюємо i-ий шаг. x1=x0+(i-2)*h;

б). визначаємо перше початкове значення методу Адамса. y1=F(x0+i*h,y[i],chose)

в). визначаємо друге початкове значення методу Адамса. y2=F(x0+(i-1)*h,y[i-1],chose)

г). визначаємо третє початкове значення методу Адамса. y3=F(x0+(i-2)*h,y[i-2],chose)

д). визначаємо четверте початкове значення методу Адамса. y4=F(x0+(i-3)*h,y[i-3],chose)

е). обчислюємо значення у: y[i+1]=y[i]+(h/24)*(55*y1-59*y2+37*y3-9*y4);

ж). виводимо значення у[i+1] при його значенні х1: cout <<x1<<” ”<<y[i+1]

}// кінець цикла при i=n+2.

6. Кінець програми.

Функція F(x,y) має три формальні змінні і вона ідентична функції, що описана в методі Рунге-Кута.

Функція Yravnen() не має формальних перемінних, повертає значення типу void; описана вище, у методі Рунге-Кута.

 

2.3 Обчислювальна схема методу Крилова:

 

1. Виклик функції Yravnen() - приклади рівнянь користувачу.

 

2. Вводимо вихідні дані:

а). номер рівняння, яке потрібно вирішити - chose;

б). початок і кінець даного відрізка [x0,x];

в). кількість кроків n;

г). значення y0.

 

3. Обчислюємо величину кроку.

h=(x-x0)/h

4. Привласнюємо у0 першому елементу масива у.

y[0]=y0

5. Обчислюємо розв’язання рівняння, яке обрали. Для цього робимо цикл від 0 до n і при кожнім наступному кроці обчислюємо значення у:

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

{

а). обчислюємо i-ий шаг. x1=x0+i*h;

б). обчислюємо значення:

q[i]=h*F(x1,y[i],chose); y1[i+1]=y[i]+(5/12)*q[i].

в). обчислюємо значення:

q1[i+1]=h*F(x1+h,y1[i+1],chose), y1[i+2]=y[i]+(5/12)q[i]+(2/3)*q1[i+1];

q1[i+2]=h*F(x1+h,y1[i+2],chose).

г). обчислюємо значення:

y2[i+2]=y1[i+2]+(2/3)*q1[i+2]-(1/12)*q[i]; q2[i+2]=h*F(x1+2*h,y2[i+2]).

д). обчислюємо значення:

y2[i+3]=y1[i+2]+(2/3)*q1[i+2]-(1/12)*q[i]+(5/12)*q2[i+2],

q2[i+3]=h*F(x1+2*h,y2[i+3]).

е). обчислюємо значення в:

y1[i+3]=y[i]+(5/12)*q[i]+(2/3)*q1[i+2]-(1/12)*q2[i+3],

y[i+1]=y1[i+3].

ж). виводимо значення в[i+3] при його значенні х1:

cout <<x1<<” ”<<y[i+3]

}// кінець циклу при i=n.

6. Кінець програми.


Функція F(x,y) і Yravnen() має такий же вид, як і в методі Рунге-Кутта, Адамса, описані вище.

 

           
     

 

 


y1[i+2]=y[i]+(5/

12)*q[i]+(2/3)*

q1[i+1]

       
   
 
 


x0, x, n,

y0,chose

       
   
 
 

 


y2[i+2]=y1[i+2]+

(2/3)*q1[i+2]-(1/

12)*q[i]

       
   
 
 

 

 


y2[i+3]=y1[i+2]+ |

(2/3)*q1[i+2]-(1/ ---------------| q2[i+2]

12)*q[i]+(5/12)* |

       
   

 


|

-------------------|(5/12)*q[i]+(2/3)*q1[i+2]-(1/12)*q2[i+3]

|

       
   
 


y[i+3],x1

       
 
   
 



Поделиться:

Дата добавления: 2014-12-23; просмотров: 163; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты