Первый семестр / Лабалаторная работа №3 / Лаболаторная работа №3
.odt
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра математического обеспечения и применения ЭВМ
отчет
по лабораторной работе №3
по дисциплине «Информационные модели и системы»
Тема: «Вычисление корней многочлена третьей »
Студент гр. 8802 |
|
Попов А.П. |
Преподаватель |
|
Сидоров Ю.Н. |
Санкт-Петербург
2018
СОДЕРЖАНИЕ
Содержательная постановка задачи...........................................................................3
Формальная постановка задачи..................................................................................4
Алгоритмизация...........................................................................................................5
Типы структур данных................................................................................................6
Текст программы.........................................................................................................6
Пример исполнения программы................................................................................7
Содержательная постановка задачи
Требуется написать программу, вычисляющую корни кубического многочлена x³+0*x²-2*x-5 на интервале [1,3]. Корни многочлена — один действительный, равный x₁ ≈ 2,095, должен быть вычислен методом Ньютона. И два комплексно сопряженных x₂¸₃ ≈ -1,047±i*1,136
Формальная постановка задачи.
Дано: f(x)=x³+0*x²-2*x-5 – функция многочлена третьей степени, где x∈ [1,3].
Найти: корни многочлена x₁,x₂,x₃.
Алгоритмизация
Сообщения, выводимые на экран, сокращены.
Типы и структуры данных
NewTon – рекурсивная функция. Принимает на вход текущее значение приближения первого корня, возвращает новое значение приближения. Выход из рекурсивных вызовов происходит при выполнении условия в методе Ньютона «fx/fxder < eps».
Типы данных функции NewTon:
1. fx — переменная вещественного типа. Значение функции в точке
2. fxder — переменная вещественного типа. Значение первой производной функции в точке
3. eps — вещественная константа. Число эпсилон, равное минимально возможному положительному значению вещественного числа в Паскале
root – вещественный массив из трех элементов. Заполняется вещественными частями значений корня многочлена f(x)=x³+0*x²-2*x-5.
gorner – вещественный массив из трех элементов. Заполняется значениями коэффициентов многочлена, который вычисляется по схеме Горнера.
D — вещественная переменная. Содержит значение дискриминанта от многочлена, полученного схемой Горнера.
Текст программы.
program lab3; {Программа вычисляет корни многочлена третьей степени x^3-2*x-5=0 на интервале [1,3]. Один действительный корень - методом Ньютона. Оставшиеся комплексные - схемой Горнера}
var
root: array [1..3] of real; //Массив со значениями корней многочлена (только их вещественные части)
gorner: array[1..3] of real; //Массив со значениями коэффициентов многочлена для схемы Горнера
D: real; //D - Дискриминант для поиска двух оставшихся корней
*Продолжение на странице 7
function NewTon(x0:real):real;
var fx,fxder:real; //fx-значение функции в точке, fxder - значение функции у первой производной в точке
const eps=MINreal; //Епсилон, сколь угодно малое положительное число. В связи с ограничением вычислительных машин, ограничено минимально возможным положительным вещественным значением
begin
fx:=((x0*x0*x0)-(2*x0)-5);
fxder:=((3*x0*x0)-2);
if ((fx/fxder)<eps) then NewTon:=x0 else NewTon:=NewTon(x0-(fx/fxder));
{Если условие метода Ньютона выполняется, то возвращается нужное
значение. Если нет - то происходит рекурентный вызов функции вплоть до получения требуемой точности}
end;
begin
root[1]:=NewTon(3); //Вычисление первого корня
//Вычисление коэффициентов по схеме Горнера
gorner[1]:=1;
gorner[2]:=gorner[1]*root[1];
gorner[3]:=gorner[2]*root[1]-2;
//Вычисление оставшихся комплексных корней
D:=(gorner[2]*gorner[2])-4*gorner[1]*gorner[3];
root[2]:=gorner[2]/2; root[3]:=gorner[2]/2;
//Вывод результатов вычислений
write('Вещественный корень уравнения x^3-2*x-5=0 -> '); writeln (root[1]);
write('Комплексные корни уравнения ->');
write (root[2]); write ('+'); write(sqrt(-D)/2); write('i ');
write (root[3]); write ('-'); write(sqrt(-D)/2); writeln('i');
end.
Пример выполнения программы
Вещественный корень уравнения x^3-2*x-5=0 -> 2.09455148154233
Комплексные корни уравнения ->1.04727574077116+1.13593988908893i 1.04727574077116-1.13593988908893i