xn+1=xn; x0=a. (4)
Вычисления очередных приближений к
точному корню уравнения продолжается
до тех пор, пока не достигнем заданной
точности, т.е. должно выполняться условие: |xn+1-xn|<, где - заданная точность.
Теперь рассмотрим случай, когда первая
и вторая производные имеют разные знаки,
т.е. f '(x) f ''(x)<0. (рис. 3).
Рис. 3. Геометрическая интерпретация метода
хорд для случая f '(x) f ''(x)<0.
Соединим точки A0(a,f(a)) и B0(b,f(b)) хордой А0В0. Точку пересечения хорды с осью Ох будем
считать первым приближение корня. В этом
случае неподвижным концом отрезка будет
являться конец а.
Уравнение хорды А0В0:. Отсюда найдем x1, полагая y = 0: x1=b. Теперь корень уравнения x[a;x1]. Применяя метод хорд к этому отрезку,
получим x2=x1. Продолжая и т.д.,
получим xn+1=xn.
Расчетные формулы метода:
xn+1=xn, x0=0 . (5)
Условие окончания вычислений: |xn+1-xn|<. Тогда хпр = xn+1 с
точностью Итак, если f '(x) f ''(x)>0 приближенное значение корня находят
по формуле (4), если f '(x) f ''(x)<0, то по формуле (5).
Практический выбор той или иной формулы
осуществляется, пользуясь следующим правилом: неподвижным концом отрезка является
тот, для которого знак функции совпадает
со знаком второй производной.
Пример. Проиллюстрировать действие этого правила
на уравнении
(x-1)ln(x)-1=0, если отрезок изоляции корня [2;3].
Решение. Здесь f(x)=(x-1)ln(x)-1.
f '(x)=ln(x)+;
f ''(x)=.
Вторая производная в этом примере положительна
на отрезке изоляции корня [2;3]: f ''(x)>0, f(3)>0, т.е. f(b) f''(x)>0. Таким образом, при решении данного
уравнения методом хорд для уточнения
корня выбираем формулы (4).
Блок-схема программы
Нет
ДА
Практическая
часть
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart,
StdCtrls, Series;
type
TForm1 = class (TForm)
Label3: TLabel;
Button1: TButton;
Edit3: TEdit;
Edit4: TEdit;
Chart1: TChart;
Series1: TFastLineSeries;
Edit2: TEdit;
Edit5: TEdit;
Button3: TButton;
Label2: TLabel;
Button2: TButton;
Label4: TLabel;
Button4: TButton;
Button5: TButton;
Panel1: TPanel;
Panel2: TPanel;
Edit6: TEdit;
Label5: TLabel;
Panel3: TPanel;
Edit9: TEdit;
Label8: TLabel;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Label6: TLabel;
Label7: TLabel;
Label1: TLabel;
procedure Button1Click(Sender:
TObject);
procedure Button3Click(Sender:
TObject);
procedure Button2Click(Sender:
TObject);
procedure Button4Click(Sender:
TObject);
procedure Button5Click(Sender:
TObject);
procedure Button6Click(Sender:
TObject);
procedure Button7Click(Sender:
TObject);
procedure Button8Click(Sender:
TObject);
procedure Button9Click(Sender:
TObject);
// procedure Label3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
function F(x:real): real;
begin
result:=2*cos((x+pi/6))+x*x-4*x+3;
end;
function F1(x:real): real;
begin
result:=2*(x-1/6*(6*x+pi)*sin(x)+cos(x)-2);
end;
procedure TForm1.Button1Click(Sender: TObject);
Var a,y,x0,y1,b,x1,xn,xn1: real;
x,e, Fx, Fx1: real;
begin
e:=strtofloat(edit3.Text);
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit5.Text);
x0:=a;
x:=x0-f(x0)/f1(x0);
repeat
begin
x1:=x;
y:=f(x);
y1:=f1(x);
x:=x-y/y1;
end;
until (x-x1)>e;
Repeat
x:=x-(F(x)/F1(x));
Until abs(f(x))<e;
edit4.Text:=FloatToStr(x);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
a,b,h: real;
i,n: integer;
begin
a:=StrToFloat(Form1.Edit2.Text);
b:=StrToFloat(Form1.Edit5.Text);
n:=100;
h:=(b-a)/n;
Form1.Series1.AddXY(a,f(a));
for i:=1 to n do
Form1.Series1.AddXY(a+h*i,f(a+h*i));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Series1.Clear;
end;
procedure TForm1.Button4Click(Sender: TObject);
var x,c,a,b,e:real;
begin
e:=strtofloat(Edit6.Text);
a:=strtofloat(edit2.Text);
b:=strtofloat(edit5.Text);
repeat
c:=(a+b)/2;
if f(a)*f(c)<0 then b:=c else a:=c;
until b-a<e;
x:=(a+b)/2;
begin
edit4.Text:=FloatToStr(x);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
Var a,b,c,g,e,x,x0,x1,y:real;
Fx: real;
begin
e:=strtofloat(edit9.text);
a:=strtofloat(edit2.Text);
b:=strtofloat(edit5.Text);
c:=a;
repeat
g:=c;
c:=(a*f(b)-b*f(a))/(f(b)-f(a));
if f(a)*f(c)<0 then b:=c else a:=c;
until abs(c-g)<e;
Form1.Edit4.Text:=(floattostr(c));
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
panel1.Visible:=true;
panel2.Visible:=false;
panel3.Visible:=false;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
panel2.Visible:=true;
panel1.Visible:=false;
panel3.Visible:=false;
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
panel3.Visible:=true;
panel1.Visible:=false;
panel2.Visible:=false;
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
form2.showmodal;
end;
end.
Метод касательных |
Точность |
0,001 |
Интервал |
(-1,2) |
Ответ |
1,02390 |
Метод половинного
деления |
Точность |
0,001 |
Интервал |
(-1,2) |
Ответ |
1,02404 |
Метод хорд |
Точность |
0,001 |
Интервал |
(-1,2) |
Ответ |
1,02383 |
Заключение.
Проблема повышения
качества вычислений, как несоответствие
между желаемым и действительным, существует
и будет существовать в дальнейшем. Ее
решению будет содействовать развитие
информационных технологий, которое заключается
как в совершенствовании методов организации
информационных процессов, так и их реализации
с помощью конкретных инструментов –
среды Delphi
Итогом работы
можно считать созданную функциональную
модель нахождения корней уравнения методами
Ньютона, хорд и половинного деления. Данная
модель применима к детерминированным
задачам, т.е. погрешностью экспериментального
вычисления которых можно пренебречь.
Созданная функциональная модель и ее
программная реализация могут служить
органической частью решения более сложных
задач.
Проведя исследования по теме
курсовой работы "Численные методы.
Решение нелинейных уравнений", мы добились
поставленных во введении целей. К
каждому определению и теореме были приведены
несколько примеров. Все теоремы доказаны.
Использование различных источников
дало возможность полностью раскрыть
тему.
Список литературы.
Бахвалов Н. С.
Численные методы М.: БИНОМ. Лаб. знаний,
2007. 632с.
Бахвалов Н. С.
Численные методы в задачах и упражнениях
/ Н. С. Бахвалов, А. В. Лапин, Е. В. Чижонков.
М.: Высш. шк., 2005. 192 с.
Вержбицкий В.
М. Численные методы. Линейная алгебра
и нелинейные уравнения. М.: Высш.шк., 2006.
268 с.
Вержбицкий В.
М. Численные методы. Математический анализ
и обыкновенные дифференциальные уравнения.
М.: Высш.шк., 2008. 383с.
Волков Е. А. Численные
методы. СПб.: Лань, 2010. 248 с.
Шуп Т. Е. Прикладные
численные методы в физике и технике. М.:
Высш. шк., 2007. 255 с.