|
||||||||||||||||||||||||||||||
Лабораторная работа №2
Балтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова Кафедра А5 «Процессов управления» Лабораторная работа №2 «Нахождение корней непрерывной функции методом деления интервала пополам» Выполнил: Студент группы А531 Малахова Е. Х. Преподаватель: Зазимко В. А.
Санкт-Петербург 2015
Дано: Задана функция , где ,
Число Требуется: По заданному значению отношения площади критической к площади ( ) найти приведённое число Маха .
Решение: Задачу решаем методом деления заданного интервала пополам. В случае монотонно возрастающей или монотонно убывающей функций на заданном отрезке[ ; ]выполняются следующие операции: Шаг 1. Вычисляется разность значенияфункции на концах промежутка
Положим и вычислим значение .
Шаг 2. Найдем разность значений . Шаг 3. Определяем знак произведения . Если , тогда и далее корень неявного уравнения находим в новом промежутке с границами [ ]. Если , тогда и далее корень неявного уравнения находим в новом промежутке с границами [ ]. Шаг 4. Возвращаемся к Шагу 1и выполняем процедуру деления отрезка пополам до тех пор, пока не получим искомое значение с требуемой точностью , т. е. , где n – число итераций.
Описание программы Программа написана на языке C++.
Входная и выходная информация.
Листинг программы #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; } Результат Функция имеет вид:
|
||||||||||||||||||||||||||||||
|