Определение границ и отделение корней. Задание Определение границ и отделение корней. Постановка задачи
![]()
|
Задание: Определение границ и отделение корней. Постановка задачи: Определение границ, где находятся корни. Отделение корней, нахождение промежутков, где только один корень. Написание программы для отделения корней. Номер 1: Определить границы следующего уравнения: ![]() Это алгебраическое уравнение вида: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Воспользуемся теоремой, которая утверждает, что область, где находятся все корни алгебраического уравнения вида ![]() ![]() Подставляем значения и получаем: ![]() ![]() Мы определили границы данного в условии уравнения, то есть, нашли область, в которой содержатся все корни уравнения ![]() ![]() Данный номер решен. Подзадание номера 1: Отделить корни уравнения: ![]() Отделить корни уравнения значит, что нужно найти промежутки, где находится один и только один корень. Как и в первом номере, сначала найдем область, где находятся все корни уравнения. Уравнение в данном номере имеет алгебраический вид ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Существует теорема, что если непрерывная функция принимает значения разных знаков на промежутке, то внутри такого промежутка существует хотя бы один корень уравнения. Сначала проверим значения на концах промежутка ![]() ![]() ![]() Для отделения корней необходимо воспользоваться производной – если производная существует и сохраняет постоянный знак, значит корень будет единственным. Производная уравнения равна ![]() ![]() ![]() Номер 2: Отделить графически корни уравнения ![]() Удобнее это уравнение переписать в ![]() ![]() ![]() График получился следующим: К ![]() ![]() Синим: ![]() Точек пересечения по графику мы видим две: ![]() ![]() Подзадание номера 2: Отделение корней уравнения с помощью компьютера. ![]() Составим математическую модель, заранее упростим выражение, умножив данное уравнение на ![]() ![]() Отделить корень, значит найти промежутки, в каждом из которых находится один корень. Чтобы отделить корни данного уравнения (т.е. уравнений третьего порядка), нужно найти производную и решить, полученное выражение: ![]() ![]() ![]() ![]() Для того чтобы отделить все вещественные корни уравнения, достаточно сначала найти все интервалы монотонности функции, а затем из выбранных интервалов оставить те, на границах которых принимает значения разных знаков. Данная функция монотонна на интервалах ![]() ![]() ![]() ![]() ![]() Интервалы монотонности ![]() ![]() Проанализировав математическую модель, приступим к написанию программы. Сделаем программу, которая подходит не только для данного случая, но и для уравнений третьего порядка. Поэтому для удобства введем функцию общего вида для уравнений третьего порядка, которых имеют вид: ![]() В программе рассматриваются случаи, когда: 1)дискриминант меньше 0 и выдает, что нет вещественных корней; 2) Дискриминант равен нулю и выдает, что существует единственный вещественный корень, который лежит в полученном отрезке; 3) Дискриминант больше нуля и выдает различные случая, исходя из заданного условия. (См. 17-62 строчки программы). В третьем пункте так же происходит сортировка корней по промежутку (см. 34- 40 строчки программы). Программа: ![]() ![]() Текст программы: program lab1 implicit none real:: b0, b1, b2, d, p11, p12, p1, p2, z1, z2 real:: a0, a1, a2, a3 write(*,*) 'enter the coefficients of the equation(a0, a1, a2, a3)' read(*,*) a0, a1, a2, a3 b0=3*a0 b1=2*a1 b2=a2 d=b1*b1 - 4* b0*b2 !finding the discriminant if (d < 0) then ! case when the discriminant is less than zero write(*,*) 'no real roots' else if (d == 0) then ! the case when the discriminant is zero p1=-b1/(2*b0) !root of the equation if (func(p1, a0, a1, a2, a3) < 0) then !finding signs write(*,*) '(', p1, ';>)', 'one real root and two complex' else write(*,*) '(<;', p1, ')', 'one real root and two complex' end if end if if (d > 0) then !discriminant greater than zero p1=(-b1+sqrt(d))/(2*b0) !roots of the equation p2=(-b1-sqrt(d))/(2*b0) if (p1>p2) then ! sorting roots by range p11=p2 p12=p1 else p11=p1 p12=p2 end if z1= func(p11, a0, a1, a2, a3) !function values in given roots z2= func(p12, a0, a1, a2, a3) if ((z1>=0) .and. (z2>=0)) then write(*,*) '(<;', p11,')', 'one real root and two complex' end if if ((z1<=0) .and. (z2>0)) then write(*,*) '(', p11,';', p12, ')', 'one real root and two complex' end if if ((z1>0) .and. (z2<=0)) then write(*,*) '(<;', p11,');(', p11,';', p12,');', '(',p12, '; >)', 'three real roots' end if if ((z1<0) .and. (z2<0)) then write(*,*) '(', p12, ';>)', 'one real root and two complex' end if end if end if pause contains real function func(p, a0, a1, a2, a3) !function implicit none real p , a0, a1, a2, a3 intent(in) p func = a0 * p**3 + a1*p**2+a2*p+a3 end function func end program lab1 |