Мегаобучалка Главная | О нас | Обратная связь


Дискретный метод Ньютона



2019-12-29 212 Обсуждений (0)
Дискретный метод Ньютона 0.00 из 5.00 0 оценок




 

Трудности практического применения метода Ньютона состоят в следующем:

1.Необходимость определения матрицы J = F / X .

При этом существует два подхода:

- аналитический способ. Здесь метод Ньютона особенно эффективен. Однако точные формулы могут быть слишком громоздкими, что повышает вероятность ошибки. Кроме того функции F(X) могут быть заданы таблично;

- конечно-разностная аппроксимация. При этом используется формула:

δ fi /δ xj = ( fi ( x 1 , …, xj + ∆ xj , …, xn ) - fi ( x 1 , …, xj - ∆ xj , …, xn )) / 2δ xj .

 

В этом случае имеем дискретный метод Ньютона, который уже не обладает квадратичной сходимостью. Скорость сходимости можно увеличить, уменьшая ∆ xj по мере приближения к X * .

2. Вычисление матрицы J -1 на каждом шаге требует значительных вычислительных затрат. Поэтому часто вместо этого решают систему линейных АУ, которая формируется следующим образом. Очевидно, что ∆ Xm = Xm +1 - Xm. Тогда после алгебраических преобразований алгоритм Xm +1 = Xm – J -1 ( Xm ) · F ( Xm ) примет вид:

J ( Xm ) · ∆ Xm = - F ( Xm ).

 

На каждом m-м шаге матрицы J ( Xm ) и F ( Xm ) известны. Необходимо найти ∆ Xm, как решение системы линейных АУ J ( Xm ) · ∆ Xm = - F ( Xm ). Тогда

Xm +1 = Xm + ∆ Xm .


Решение системы J ( Xm ) · ∆ Xm = - F ( Xm ) – наиболее трудоемкий этап, который определяет вычислительную эффективность каждой итерации.

 


ОПИСАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

 

Общие сведения

 

Наименования файлов, из которых состоит пакет: main.m, rk1.m, rk2, rk4.m, funf.m, dmn.m, dif.m .

Головная программа – файл main.m, остальные – внешние функции данной программы.

Программное обеспечение: ОС класса Windows.

Язык, на котором написана программа: MatLab (Version 5.1).

Функциональное назначение

 

Программа разработана для решения нелинейных систем алгебраических уравнений методом дифференцирования по параметру. Решение проводится с использованием трех различных методов Рунге – Кутта первого, второго и четвертого порядка. Решение уточняется с помощью дискретного метода Ньютона.

Описание логической структуры

 

Файл описания системы - funf.m. С помощью файла dif.m формируется система ОДУ, затем система интегрируется с помощью явных методов Рунге-Кутта (rk1.m, rk2, rk4.m), и полученное решение уточняется дискретным методом Ньютона (dmn.m). В файле main.m можно изменять шаг интегрирования, начальное решение системы, допустимую ошибку при уточнении, начальный и конечный моменты времени…

Головная программа

В головной программе задаются начальные значения необходимых параметров, а также производится вызов основных функций, необходимых для реализации метода дифференцирования по параметру. В течение одного цикла работы программы вызываются последовательно функции rk1.m, rk2.m, rk4.m, вычисляющие приближенные значения по методам Рунге – Кутта 1-го, 2-го и 4-го порядков. После каждого из них производится вызов функции dmn.m, вычисляющей уточненное значение по дискретному методу Ньютона, строятся графики и выводятся значения полученных решений системы и ошибок интегрирования; значения уточненных решений системы и ошибок интегрирования, полученных в процессе итераций. В конце работы каждого цикла выводится число шагов, за которое было получено приближенное решение и число итераций, за которое было получено уточненное решение.

Текст программы (файл Main.m):

t0=0;

tfinal=1;

y0=[2 0];

h=0.1;

trace=1;

disp('Метод Рунге - Кутта 1го порядка');pause;

[tout,yout,x]=rk1('dif',t0,tfinal,y0,h,trace);

subplot(2,1,1);

Plot(tout,yout(:,1));

grid;

title(sprintf('Метод Рунге - Кутта 1го порядка'));

ylabel('y(1)'); xlabel('t');

subplot(2,1,2);

plot(tout,yout(:,2));

grid;

ylabel('y(2)'); xlabel('t');

pause;

x0=x';

dx=[0.01;0.01];

Ed=0.000001;

[x,dx,m] = dmn('funf',x0,dx,Ed);

subplot(111);

plot(m,x(:,1),m,x(:,2));

grid;

title(sprintf(‘Уточнение решения системы’));

ylabel('x(m)'); xlabel('m');

pause;

plot(m,dx(:,1),m,dx(:,2));

grid;

ylabel('dx(m)'); xlabel('m');

pause;

out=[m,x,dx]

disp('Метод Рунге - Кутта 2го порядка');pause;

[tout,yout,x]=rk2('dif',t0,tfinal,y0,h,trace);

subplot(2,1,1);

Plot(tout,yout(:,1));

grid;

title(sprintf('Метод Рунге-Кутта 2го порядка'));

ylabel('y(1)'); xlabel('t');

subplot(2,1,2);

plot(tout,yout(:,2));

grid;

ylabel('y(2)'); xlabel('t');

pause;

x0=x';

dx=[0.01;0.01];

[x,dx,m] = dmn('funf',x0,dx,Ed);

subplot(111);

plot(m,x(:,1),m,x(:,2));

grid;

title(sprintf(‘Уточнение решения системы’));

ylabel('x(m)'); xlabel('m');

pause;

plot(m,dx(:,1),m,dx(:,2));

grid;

ylabel('dx(m)'); xlabel('m');

pause;

out=[m,x,dx]

disp('Метод Рунге - Кутта 4го порядка');pause;

[tout,yout,x]=rk4('dif',t0,tfinal,y0,h,trace);

subplot(2,1,1);

Plot(tout,yout(:,1));

grid;

title(sprintf('Метод Рунге-Кутта 4го порядка'));

ylabel('y(1)'); xlabel('t');

subplot(2,1,2);

plot(tout,yout(:,2));

grid;

ylabel('y(2)'); xlabel('t');

pause;

x0=x';

dx=[0.01;0.01];

[x,dx,m] = dmn('funf',x0,dx,Ed);

subplot(111);

plot(m,x(:,1),m,x(:,2));

grid;

title(sprintf(‘Уточнение решения системы’));

ylabel('x(m)'); xlabel('m');

pause;

plot(m,dx(:,1),m,dx(:,2));

grid;

ylabel('dx(m)'); xlabel('m');

pause;

out=[m,x,dx]

Функции rk1, rk2, rk4

Данные функции являются программной реализацией методов Рунге-Кутта 1-го, 2-го и 4-го порядка. Здесь производится расчет приближенных значений при интегрировании системы с t = [0; 1]. Входные параметры функции – правые части системы, начальный и конечный моменты времени, начальное значение вектора Y, шаг и признак трассировки. Выходные параметры – вектор моментов времени tout, матрица yout={n x 2}, где n – число шагов метода( по строкам матрицы располагаются вектора Ym, m = 0,n), вектор х, содержащий значения, полученные на последнем шаге работы функции и предназначенный для того, чтобы затем можно было передать значения данного вектора в подпрограмму, реализующую дискретный метод Ньютона.

Тексты программ (файл rk1.m, rk2.m, rk3.m):

 

function [tout,yout,x] = rk1(dif, t0, tfinal, y0, h, trace)

t=t0;y=y0;

tout=t;

yout=y;

b=0;

if trace

clc, t, h, y

end

while (t<tfinal)

if t+h>tfinal

h=tfinal-t;

end

if trace

clc, t, h, y

end

k1=feval(dif, t, y);

q=h*k1;

y=y+q';

t=t+h;

b=b+1;

tout=[tout; t];

yout=[yout; y];

if trace

home,t, h, y

end;

end; x=y;

disp('Количество шагов = '); disp(b);

function [tout,yout,x] = rk2(dif, t0, tfinal, y0, h, trace)

t=t0;y=y0;

tout=t;

yout=y;

b=0;

if trace

clc, t, h, y

end

while (t<tfinal)

if t+h>tfinal

h=tfinal-t;

end

if trace

clc, t, h, y

end

k1=feval(dif, t, y);

z=h*k1;

k2 = feval(dif, t+h, y+z');

q=h/2*(k1+k2);

y=y+q';

t=t+h;

b=b+1;

tout=[tout; t];

yout=[yout; y];

if trace

home,t, h, y

end;

end; x=y;

disp('Kоличество шагов = '); disp(b);

function [tout,yout,x] = rk4(dif, t0, tfinal, y0, h, trace)

t=t0;y=y0;

tout=t;

yout=y;

b=0;

if trace

clc, t, h, y

end

while (t<tfinal)

if t+h>tfinal

h=tfinal-t;

end

if trace

clc, t, h, y

end

k1=feval(dif, t, y);

z=h*k1;

k2 = feval(dif, t+h, y+z');

z=h*k2/2;

k3 = feval(dif, t+h/2, y+z');

z=h*k3;

k4 = feval(dif, t+h, y+z');

q=h*(k1+2*k2+2*k3+k4)/6;

y=y+q';

t=t+h;

b=b+1;

tout=[tout; t];

yout=[yout; y];

if trace

home,t, h, y

end;

end; x=y;

disp('Kоличество шагов = '); disp(b);

 

Файл funf.m



2019-12-29 212 Обсуждений (0)
Дискретный метод Ньютона 0.00 из 5.00 0 оценок









Обсуждение в статье: Дискретный метод Ньютона

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (212)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)