Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
48
Добавлен:
23.01.2015
Размер:
134.14 Кб
Скачать

Лабораторная работа №7

Изучение процедур ode.. в MATLAB.

Постановка задачи.

Возьмем функцию и будем считать ее решением задачи Коши для дифференциального уравнения первого порядка.

Получим это дифференциальное уравнение и начальное условие . Изучим порядок использования процедур ode.. (например, help ode45) и другие сопутствующие команды.

Реализация математической модели.

Создадим m-файл функцию yp.m, описывающую правую часть нашего дифференциального уравнения:

function [ S2 ] = proverkaode45(fun, interv, y0, toch)

format long g

OPTIONS = odeset( 'MaxStep', toch);

[t,Y]=ode45(fun, interv, y0, OPTIONS);

figure

hold on

plot(t,t.^2,'g+',t,Y,'r');

title(['Теоретическое и численное решения']);

xlabel('argument');

ylabel('Function');

hold off

razm = size(Y);

D=0;

for i = 1:razm(1,1)

D = D+ (Y(i,1) - (t(i,1))^2)^2;

end

D;

S2(1,1) = D;

D = D/razm(1,1);

S2(1,2) = D;

end

Входные параметры функции proverkaode45:

  • имя функции, содержащей дифференциальное уравнение;

  • интервал поиска решения дифференциального уравнения;

  • граничное условие задачи Коши (значение искомого решения в крайней левой точке интервала поиска решения);

  • точность решения: MaxStep – верхняя граница размера шага [положительный скаляр], по-умолчанию равен одной десятой длинны интервала поиска решения для всех решений.

Выходные параметры:

  • суммарное квадратичное отклонение практического решения от теоретического;

  • среднее квадратичное отклонение практического решения (выборки) от теоретического решения (матожидания) – статистика

для изучения этого уравнения будем использовать функцию:

function [ MassS2 ] = S2(fun, interv, y0, ntoch)

format long g

toch (1,1)= 1;

for i = 2:ntoch

toch(1,i) = toch(1,i-1)/10;

end

for i = 1:ntoch

MassS2(i,:) = proverkaode45(fun, interv, y0, toch(1,i));

end

figure

hold on

plot(log10(toch),20*log10(MassS2(:,1)),'g.-');

title(['Зависимость суммарного квадратичного отклонения от точности решения']);

xlabel('точность');

ylabel('суммарное квадратичное отклонение');

hold off

figure

hold on

plot(log10(toch),20*log10(MassS2(:,2)),'r.-');

title(['Зависимость среднего квадратичного отклонения от точности решения']);

xlabel('точность');

ylabel('среднее квадратичное отклонение');

hold off

end

Входные параметры функции S2:

  • имя функции, содержащей дифференциальное уравнение;

  • интервал поиска решения дифференциального уравнения;

  • граничное условие задачи Коши (значение искомого решения в крайней левой точке интервала поиска решения);

  • число точек графика зависимости суммарного квадратичного отклонения и среднего квадратичного отклонения численного решения от теоретического от точности решения (MaxStep); точность изменяется в геометрической прогрессии с

Выходные параметры:

  • массив суммарных квадратичных отклонений и среднее квадратичных отклонений численных решений различной точности от теоретического решения (в порядке уменьшения точности по строкам в геометрической прогрессии).

Введём ещё одно представление ранее описанного дифференциального уравнения, исходя из того, что интересующее нас решение нам известно. Функция yp1.m:

function yp=yp1(t,y)

yp=sqrt(y)+t;

end

Эта функция пригодится нам как сейчас для сравнительного анализа точности численного решения дифференциального уравнения, так и в дальнейшем.

Результаты моделирования:

Результаты работы функций S2(@yp1, [0 3], 0, 7) и S2(@yp, [0 3], 0, 7) приведены ниже:

Численные результаты (соответствуют выходным параметрам функции S2)

>> S2(@yp, [0 3], 0, 7)

ans =

3.87034881624059e-29 2.97719139710815e-30

4.88733253670591e-28 4.0391177989305e-30

1.20642354511534e-24 1.00451585771469e-27

1.601529130435e-21 1.33449640066244e-25

1.18030010576173e-18 9.83575225007901e-24

4.65006432565654e-16 3.87505037550514e-22

2.55340147734914e-13 2.12783438713808e-20

>> S2(@yp1, [0 3], 0, 7)

ans =

0.00351866437049759 0.000206980257088094

1.28019063116428e-05 1.02415250493142e-07

1.18248867348599e-07 9.84586738955863e-11

1.18145078355402e-09 9.84460281271576e-14

1.18182499672581e-11 9.84845956888531e-17

1.31970506173309e-13 1.09975330164982e-19

2.48056769076757e-13 2.06713957004468e-20

Графики приведены в полулогарифмическом масштабе. Значению точности 0 соответствует , значению -5 –. Кривые, расположенные выше соответствуют решению yp1, расположенные ниже – yp. Видно, что в первом случае оценка убывает (среднеквадратичное отклонение уменьшается) с ростом точности (MaxStep убывает), во втором случае оценка возрастает (среднеквадратичное отклонение увеличивается) с ростом точности (MaxStep убывает).

Вывод:

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

Рассмотрим ещё одно представление ранее описанного дифференциального уравнения, исходя из того, что интересующее нас решение нам известно. Функция yp2.m:

function yp=yp2(t,y)

yp=2*sqrt(y);

end

Решение этого уравнения, найденное с помощью функции

proverkaode45(@yp2, [0 3], 0, 1)

Решение этого уравнения, найденное с помощью функции

proverkaode45(@yp2, [1 4], 1, 1)

В первом случае задача Коши имеет 2 решения , во втором решение единственно.

Вывод:

при численном решении дифференциальных уравнений надо учитывать возможность тривиальных решений в постановке задачи Коши.

Теперь рассмотри возможность решения уравнений второго порядка с помощью процедур «ode…».

Положим, что производная второго порядка выражается через первую производную и переменную: тогда, если заданы граничные условия , мы можем решить его относительно первой производной, то есть найти , а это уравнение разрешить относительно y: . Процедуры ode предназначены для решения систем дифференциальных уравнений. Поэтому в функции, описывающей систему дифференциальных уравнений, переменной y соответствует столбец искомых функций, а переменной yp столбец производных этих функций.

function yp = yp3 (t, y)

yp = [-cos(t); y(1, 1)];

end

Первый эемент столбца yp – , а второй – , соответствующий решению = y(1,1). Таким образом, командой '[t,YY]=ode45('yp3',[0 2*pi],[0 1]);' мы получаем массив YY, первый столбец которого соответствует , а второй - . Командой ‘plot(t,cos(t),'r+',t,YY)' построим графики производной и самой функции:

Голубой линии соответствует график производной, зелёной – теоретическое решение, красным крестикам – численное решение.

Решим задачу Коши: .

function yp=yp4(t,y)

yp=1-y^2;

end

>> [t,YY]=ode45('ypp',[-10 10],-0.999999995877693);

>> plot(t,YY,'r-',t,tanh(t),'g.')

Соседние файлы в папке МП-30