Политех в Сети

Сайт для Учебы

Решение нелинейных уравнений с одной переменной численными методами

Рейтинг пользователей: / 1
ХудшийЛучший 

Цель: решая физическую задачу, свести их к виду нелинейного уравнения с одной переменной используя численные методы, решить его наиболее рациональным способом, т. е. выяснить имеет ли корни и найти их точные значения;

Условие задачи: Сила тока вакуумного диода зависит от напряжения по закону Богуславского-Лэнгмюра . Диод включен в цепь. Построить зависимость силы тока в цепи от сопротивления .

Решение:

Выбор численного метода решения и анализ его сходимости:

Для решения задачи я использовал метод Ньютона (метод касательных). Запишем наше уравнение в необходимой форме: =0

Тут:

) ;

Корень данного уравнения:

Решая функцию F(Z) в программе Wolfram Matematica, я получил следующий график для определения нужных корней:

Отделяем нужный корень. Это значит, найдем приближенное значение корня или малый интервал, внутри которого содержится искомый корень. Для этого воспользуемся методом пошаговой прогонки. Для определения корня этим методом достаточно достаточно убедится, что на выбранном интервале функция монотонна. Если это так, то можно утверждать, что на этом интервале имеется единственный корень. Исследовав график функции в программе Matematica, делаем вывод о том, что на выбранном интервале функция непрерывна. Пусть интервал [a, b]. Вычислим знак функции в точке а. Затем будем вычислять значения функции в каждой последующей точке, заданной шагом h. Если обнаружится, что функция изменила знак, то, следовательно, на этом (последнем) интервале (шириной h) имеется искомый корень. Таким образом мы отделили искомый корень с неким первым приближением, зависящим от h.

Построим график искомой зависимости Z(R) :

Программный код Delphi:

Begin

A:=strtofloat(edit3.Text);

U:=10;

B:=0.2;

Z:=0;

Repeat

F:=u-z*r-Power((z/b), 2/3);

Z:=z+0.01;

Until f<0;

Edit1.text:=floattostr(z);

Так как F(Z) = =0, то рекурентное соотношение имеет вид:

X1=x0 -

Метод Ньютона сходится практически всегда. Неприятности могут доставить те точки, в которых F’ = 0, кроме того не гарантируется сходимость метода при невыполнении условия F(x0).F”(x0)>0. Для оценки погрешности найденного значения корня используют стандартную оценку: Ɛk = |xk+1-xk| < Ɛ и заканчивают этарационный процесс, когда

|xk+1-xk| < Ɛ

Программный код в Delphi для метода Ньютона:

X0:=z;

Repeat

x1:=x0-((u-x0*r-Power((x0/b), 2/3))/(-r-2/(3*Power((b), 2/3))*(Power((x0), 1/3))));

c:=x0-x1;

x0:=x1;

Until c<a;

edit2.text:=floattostr(x0);

Программный код в Delphi для построения графика, используя метод касательных:

Unit Unit1;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Math, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

Type

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label2: TLabel;

Chart1: TChart;

Series1: TLineSeries;

Edit3: TEdit;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Var

Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.Button1Click(Sender: TObject);

Var

U, z,b, f,x0,x1,m, c,a:real;

R, i:integer;

Begin

For r:=1 to 20 do

Begin

A:=strtofloat(edit3.Text);

U:=10;

B:=0.2;

Z:=0;

Repeat

F:=u-z*r-Power((z/b), 2/3);

Z:=z+0.01;

Until f<0;

Edit1.text:=floattostr(z);

X0:=z;

Repeat

x1:=x0-((u-x0*r-Power((x0/b), 2/3))/(-r-2/(3*Power((b), 2/3))*(Power((x0), 1/3))));

c:=x0-x1;

x0:=x1;

Until c<a;

edit2.text:=floattostr(x0);

series1.AddXY(r, x0);

end;

End;

End.

Вывод: В результате проделанной работы были изучены численные методы решения нелинейных уравнений с одной переменной. Так же были изучены типичные проблемы, возникающие при программировании данных методов в Delphi.