Отчет по лабораторной работе
«Метод удвоения шага. Метод хорд»
содержание
1 Постановка задачи………………………………………………………………..3
2 Краткие теоретические сведения………………………………………………..4
2.1 Метод удвоения шага……………………………………………………4
2.2 Метод биекции (половинного деления)
2.3 Метод хорд……………………………………………………………….4
3 Практическая часть………………………………………………………………5
3.1 Алгоритм…………………………………………………………………5
3.2 Блок схема………………………………………………………………..7
3.3 Текст программы………………………………………………………...9
3.4 Тестовые примеры……………………………………………………...12
3.5 Проверка в MathCad……………………………………………………14
4 Список использованной литературы…………………………………………..16
1 Постановка задачи
Графически (в MathCad) отделить корни заданных функций с длиной отрезка неопределенности 0,5 – 1.
Реализовать программу методом удвоения шага и отделить корни для заданных функций с длиной отрезка неопределенности 0,5 – 1.
Уточнить отрезок неопределенности до длины 0,01 методом хорд.
Функции:
- xlgx-1,2=0
- x3-0,1x2+0,4x-1,5=0
2 Краткие теоретические сведения
Пусть f(x) - заданная нелинейная функция. Необходимо найти корни уравнения f(x)=0. Корни уравнения – х*, такие что f(х*)=0.
Задачи:
- Отделение корней;
- Локализация отрезка, на котором находится корень;
- Уточнение корня ( нахождение приближения с заданной степенью точности).
2.1 Метод удвоения шага
Цель: локализовать отрезок, содержащий корень заданной длины h.
Алгоритм
Выбираем точку х0, шаг длиной h, i=0.
Шаг 1: хi+1= хi + h.
Шаг 2: Проверяем знак произведения f(хi+1)f(хi) :
- если f(хi+1)f(хi)>0, то i=i+1, удваиваем шаг хi+1= хi +2i h; выполняем Шаг 2;
- если f(хi+1)f(хi) < 0, то проверяем критерий остановки | хi+1 – хi| > h.
Шаг 3:
- если | хi+1 – хi| > h, то обновляем алгоритм, x0:=xi ; i:=0, выполняем Шаг 1.
- если|| хi+1 – хi|- h|< ε ,то конец алгоритма.
Корень уравнения х* находится на отрезке [хi ; хi+1].
2.2 Метод биекции (половинного деления)
Дана функция f(x) - непрерывная на интервале [a, b].
Алгоритм
Шаг 1: Разделим отрезок [a, b] пополам точкой с=(a+b)/2.
Шаг 2: Если f(a)*f(c)<0, то b:=c, иначе a:=c.
Шаг 3: Если |b-a|<Е, то х*=(b-a)/2, иначе – Шаг 1.
2.3 Метод хорд
Дана функция f(x) - непрерывная на интервале [a, b].
Алгоритм
Шаг 1: Если f(a)*f(b)<0, то c=
Шаг 2: |ck+1 – ck|< :
- если условие не выполняется, то
f(a)*f(с)<0, то b:=c;
f(с)*f(b)<0, то a:=c.
- если условие выполняется, то конец алгоритма.
Получение точки с:
Уравнение прямой, проходящей через точки a и b
y=0 (уравнение оси OX)
x=c
Следовательно,c=
3 Практическая часть
3.1 Алгоритм
Метод удвоения шага
Выбираем точку х0, шаг длиной h, i=0.
Шаг 1: хi+1= хi + h.
Шаг 2: если f(хi+1)f(хi)>0, то i=i+1, удваиваем шаг хi+1= хi +2i h; выполняем Шаг 2; если f(хi+1)f(хi) < 0, то проверяем критерий остановки | хi+1 – хi| > h.
Шаг 3: если | хi+1 – хi| > h, то обновляем алгоритм, x0:=xi ; i:=0; переходим к Шагу 1; если|| хi+1 – хi|- h|< ε ,то конец алгоритма.
Корень уравнения х* находится на отрезке [хi ; хi+1].
Метод хорд
Шаг 1: Если f(a)*f(b)<0, то c=
Шаг 2: |ck+1 – ck|< :
- если условие не выполняется, то
f(a)*f(с)<0, то b:=c;
f(с)*f(b)<0, то a:=c.
- если условие выполняется, то конец алгоритма.
3.2 Блок схема
3.3 Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
Function f(x:real):real;
Begin
f:=x*(ln(x)/ln(10)) - 1.2;
//f:=exp(3*ln(abs(x)))-0.1*exp(2*ln(abs(x)))-1.5;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
x0,x1,x,h,a,b,c:real;
k, t,m:boolean;
i: integer;
begin
h:=StrToFloat(Edit3.Text);
x0:=StrToFloat(Edit1.Text);
t:=false;
k:=false;
while k=false do
begin
while t=false do
begin
i:=0;
x1:=x0+ exp(i*ln(2))*h;
if f(x0)*f(x1)<0 then t:=true
else
Begin
i:=i+1;
x0:=x1;
end;
end;
t:=false;
while t=false do
begin
if((x0-x1)>h) and( (x0-x1)>-h) then
begin
x0:=x1; end
else
begin
t:=true;
k:=true;
end;
end;
end;
edit2.Text:='['+floattostr(x0)+ ';' +floattostr(x1)+']';
a:=x0;
b:=x1;
h:=0.01;
m:=false;
while (abs(c-a)<h) or (abs(b-c)<h) do
begin
c:= a - ((f(a)*(b-a)) / (f(b) - f(a)));
if f(a)*f(c)<0 then b:=c
else a:=c;
end;
x:=(a+b)/2;
edit4.Text:=floattostr(x);
end;
end.
3.4 Тестовые примеры
- Функция: xlgx-1,2=0
Рис 3.3.1 – Тестовый пример 1
Рис 3.3.2 – Тестовый пример 2
- Функция: x3-0,1x2+0,4x-1,5=0
Рис 3.3.2 – Тестовый пример 3
Рис 3.3.2 – Тестовый пример 4
3.5 Проверка в MathCad
- Функция: xlgx-1,2=0
Рис 3.4.1 – Проверка 1
Рис 3.4.2 – Проверка 2
- Функция: x3-0,1x2+0,4x-1,5=0
Рис 3.4.3 – Проверка 3
Cписок использованной литературы
- Вержбицкий В.М. Численные методы (линейная алгебра и нелинейные уравнения): Учеб. пособие для вузов.- М.: Высш. шк., 2000.- 266с.:ил. ISBN 5-06-003654-5
Скачать: