Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Метод Гира





В начале получаем одним из методов Рунге-Кутты решение y1, y2, y3 задачи Коши

y′ = f(x, y), y(x0) = y0 (1)

в точках x1, x2, x3. В окрестности узлов x0, …, x4 искомое решение y(x) приближенно заменим интерполяционным полиномом Ньютона четвёртой степени:

y(x)=y0+y01(x-x0)+y012(x-x0)(x-x1)+y0123(x-x0)(x-x1)(x-x2)+y01234(x-x0)(x-x1)(x-x2)(x-x3) (2)

где y01, …, y01234 – разделённый разности первого – четвёртого порядков.

Левую часть (1) приближенно найдём путем дифференцирования по х полинома (2)

y′(x)=y01+y012(x-x0+ x-x1)+y0123[(x-x0)(x-x1)+(x-x0)(x-x2)+(x-x1)(x-x2)]+ y01234[(x-x0)(x-x1)(x-x2)+ (x-x0)(x-x1)(x-x3)+ (x-x0)(x-x2)(x-x3)+ (x-x1)(x-x2)(x-x3)] (3)

Разделённые разности для узлов выражаются через узловые значения аппроксимируемой функции

y01 = (y1-y0) / h,

y012 = (y2-2y1+ y0) / (2h2), (4)

y0123 = (y3-3y2+3y1- y0) / (2h3),

y01234 = (y4-4y3+6y2-4y1+ y0) / (24h4),

где h = xj+1 - xj .

Полагая в выражении для производной (3) значение аргумента x = x4 и учитывая значения разделённых разностей (4), получим:

y′(x4) = (3y0 - 16 y1 + 36 y2 – 48y3 + 25y1) / (12h) (5)

C другой стороны, уравнение (1) при x = x4 принимает вид:

y′(x4) = f(x4,y4). (6)

Приравниваем правые части соотношений (5) и (6) и найдём:

y4 = [ 3(4hf(x4,y4) - yo) +16y1-36y2+48y3] / 25 (7)

Формула (7) представляет собой неявную схему Гира четвертого порядка для решения задачи Коши. Изменяя количество xj, можно аналогичным способом получить формулы Гира как более низких, так и более высоких порядков.

С помощью формулы Гира решим уравнение Ван-дер-Поля. Его можно записать в виде системы:

,

В расчётах рассматриваем 2 случая: a=10 и a=100. Для тестов обычно полагают y1=2, y2=0. Конечное время интегрирования системы положить Tk=20.

Код программы:

 

vector=array[1..2]of double;

var

Form1: TForm1;

a,b,t,Tk:double;

mas1,mas2,mas3:array[0..3]of double;

function f1(y1,y2:double):double;

function f2(y1,y2,a:double):double;

procedure Runge_Kutta(x0,y0,h:double);

procedure Gir(y10,y20,h,e:double);

implementation

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var y10,y20,h,e:double;

begin

Form1.Series1.Clear;

Form1.Series4.Clear;

If RadioGroup1.ItemIndex=0 then a:=10 else a:=100;

y10:=StrToFloat(edit1.Text);

y20:=StrToFloat(Edit2.Text);

h:=StrToFloat(edit4.Text);

e:=StrToFloat(edit5.Text);

Gir(y10,y20,h,e);

end;

 

function f1(y1,y2:double):double;

begin

result:=y2;

end;

 

function f2(y1,y2,a:double):double;

begin

result:=-a*(y2*(y1*y1-1)+y1);

end;

 

procedure Runge_Kutta(x0,y0,h:double);

var k1,k2,k3,k4,xn,yn,zn,xn1,yn1,zn1:double;

i:byte;

begin

xn1:=x0;

yn1:=y0;

 

t:=0;

Form1.Series1.addxy(t,(x0));

Form1.Series4.addxy(t,(0));

 

mas1[0]:=x0;

mas2[0]:=y0;

 

for i:=1 to 3 do

begin

t:=t+h;

xn:=xn1; //y1

yn:=yn1; //y2

 

k1:=f1(xn,yn)*h;

k2:=f1(xn+0.5*k1,yn+0.5*k1)*h;

k3:=f1(xn+0.5*k2,yn+0.5*k2)*h;

k4:=f1(xn+k3,yn+k3)*h;

xn1:=xn+(k1+2*k2+2*k3+k4)/6;

 

k1:=f2(xn,yn,a)*h;

k2:=f2(xn+0.5*k1,yn+0.5*k1,a)*h;

k3:=f2(xn+0.5*k2,yn+0.5*k2,a)*h;

k4:=f2(xn+k3,yn+k3,a)*h;

yn1:=yn+(k1+2*k2+2*k3+k4)/6;

 

Form1.series1.addxy(t,(xn1));

Form1.series4.addxy(t,(yn1));

 

mas1[i]:=xn1;

mas2[i]:=yn1;

 

end;

end;

 

function Iteracii(var x0,y0,e:double):vector;

var Xi,Xi1,Yi,Yi1:double;

n:integer;

h:double;

begin

n:=0;

h:=strtofloat(Form1.edit4.Text);

xi1:=x0;

yi1:=y0;

 

repeat

begin

xi:=xi1;

yi:=yi1;

 

n:=n+1;

xi1:=(3*(4*h*f1(xi,yi)-mas1[0])+16*mas1[1]-36*mas1[2]+48*mas1[3])/25;

yi1:=(3*(4*h*f2(xi1,yi,a)-mas2[0])+16*mas2[1]-36*mas2[2]+48*mas2[3])/25;

 

end

until (((abs(xi1-xi))<e) and ((abs(yi1-yi))<e));

result[1]:=xi1;

result[2]:=yi1;

 

end;

 

procedure Gir(y10,y20,h,e:double);

var nextyy:vector;

t:double;

begin

Runge_Kutta(y10,y20,h);

t:=0;

nextyy[1]:=4*h*f1(mas1[3],mas2[3])+(1-10*mas1[3])/3-2*mas1[1]+6*mas1[2];

nextyy[2]:=4*h*f2(mas1[3],mas2[3],a)+(0-10*mas2[3])/3-2*mas2[1]+6*mas2[2];

while t<=20 do

begin

t:=t+h;

 

Form1.series1.addxy(t,(nextyy[1]));

Form1.series4.addxy(t,(nextyy[2]));

mas1[0]:=mas1[1]; mas2[0]:=mas2[1];

mas1[1]:=mas1[2]; mas2[1]:=mas2[2];

mas1[2]:=mas1[3]; mas2[2]:=mas2[3];

mas1[3]:=nextyy[1]; mas2[3]:=nextyy[2];

nextyy:=Iteracii(mas1[3],mas2[3],e);

end;

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

Button1.Visible:=true;

end;

 

При шага равном 0,001 и точности равной 0,001 мы получаем следующие графики:

· При параметре a =10:

· При параметре a =100:

 

Список используемой литературы

1. Райзер Ю.П. «Физика газового разряда» издание второе 1992г.

2. Зельдович Я.В. Райзер Ю.П. «Физика ударных волн и высокотемпературных гидродинамических явлений» 1966г.

3. Мудров А.Е. «Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль» 1991г.

Date: 2015-07-17; view: 834; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию