Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа №2



 

Балтийский государственный технический университет

«ВОЕНМЕХ» им. Д. Ф. Устинова


Кафедра А5 «Процессов управления»

Лабораторная работа №2

«Нахождение корней непрерывной функции методом деления интервала пополам»

Выполнил:

Студент группы А531

Малахова Е. Х.

Преподаватель:

Зазимко В. А.

 

 

Санкт-Петербург

 2015
Математическая постановка задачи

 

Дано:

Задана функция

,

где ,

8 0. 3 1. 3

Число

Требуется:

По заданному значению отношения площади критической к площади ( ) найти приведённое число Маха .

 

Решение:

Задачу решаем методом деления заданного интервала пополам.

В случае монотонно возрастающей или монотонно убывающей функций на заданном отрезке[ ; ]выполняются следующие операции:

Шаг 1.

Вычисляется разность значенияфункции на концах промежутка

Положим  и вычислим значение .

 

 

Шаг 2.

Найдем разность значений .

Шаг 3.

Определяем знак произведения .

    Если , тогда  и далее корень неявного уравнения находим в новом промежутке с границами [ ].

    Если , тогда и далее корень неявного уравнения находим в новом промежутке с границами [ ].

    Шаг 4.

    Возвращаемся к Шагу 1и выполняем процедуру деления отрезка пополам до тех пор, пока не получим искомое значение с требуемой  точностью , т. е. , где n – число итераций.

 

        


 

Описание программы

Программа написана на языке C++.

 

Входная и выходная информация.

Символ в методе Символ в программе Значение
q Отношения площади критической к площади
gam Показатель адиабаты газа
с с1, с2 Отношение скоростей V/Vmaxна заданном отрезке

 


 

Листинг программы

#include < stdio. h>

#include < math. h>

int main(void)

{

float q=0. 3, gam=1. 3, ckr, A, c2, c, a, a2, b, b2, d, d2, E=10e-5, gkr;

 

ckr=sqrt((gam-1)/(gam+1));

A=sqrt((gam+1)/(gam-1))*pow((gam+1)/2, 1/(gam-1));

gkr=A*ckr*pow((1-ckr*ckr), 1/(gam-1));

printf(" ckr=%f\tA=%f\ngkr=%f\n\n", ckr, A, gkr);

 

a=0; b=ckr;

a2=ckr; b2=1;

do

{

c=(a+b)/2;

d=q-A*c*pow(1-c*c, 1/(gam-1));

if(d> 0) a=c;

if(d< 0) b=c;

 

c2=(a2+b2)/2;

d2=q-A*c2*pow(1-c2*c2, 1/(gam-1));

if(d2< 0) a2=c2;

if(d2> 0) b2=c2;

 

printf(" c1=%f\tc2=%f\n", c, c2);

printf(" \n" );

}

while(fabs(d)> E||fabs(d2)> E);

 

return 0;

}

Результат

Функция  имеет вид:

                                                                 

 

 

на участке на участке
0. 361158 4. 411939 0. 069106 0. 710953

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.