Загрузка данных


clc; clear;
 
% Вариант 28. Задача Коши:
% 4*y''' - 8*y'' - 11*y' - 3*y = -18*exp(x), 0 < x < 1
% y(0)=1, y'(0)=4, y''(0)=8
 
x0xL = input('[x0 xL]=');          % Ввести: [0 1]
z0 = input('[z10 z20 z30]=');      % Ввести: [1 4 8]
 
% z1=y, z2=y', z3=y''
F = @(x,z)[ z(2); ...
           z(3); ...
           2*z(3) + (11/4)*z(2) + (3/4)*z(1) - (9/2)*exp(x) ];
 
% Для компактной таблицы выводим значения в 11 равномерных узлах.
% Если нужно вывести внутренние узлы решателя, замените tspan на x0xL.
tspan = linspace(x0xL(1), x0xL(2), 11);
 
% ---------------- ode45 ----------------
[X45, Z45] = ode45(F, tspan, z0);
print_result('ode45', X45, Z45);
figure;
plot(X45, Z45(:,1), X45, Z45(:,2), X45, Z45(:,3));
grid on;
legend('y(x)','dy(x)','d2y(x)',0);
title('ode45');
 
% ---------------- ode15s ----------------
[X15, Z15] = ode15s(F, tspan, z0);
print_result('ode15s', X15, Z15);
figure;
plot(X15, Z15(:,1), X15, Z15(:,2), X15, Z15(:,3));
grid on;
legend('y(x)','dy(x)','d2y(x)',0);
title('ode15s');
 
% ---------------- ode15s с options ----------------
options = odeset('RelTol',1e-6,'AbsTol',[1e-6 1e-6 1e-6]);
[X15o, Z15o] = ode15s(F, tspan, z0, options);
print_result('ode15s (options)', X15o, Z15o);
figure;
plot(X15o, Z15o(:,1), X15o, Z15o(:,2), X15o, Z15o(:,3));
grid on;
legend('y(x)','dy(x)','d2y(x)',0);
title('ode15s (options)');
 
function print_result(name, X, Z)
   n = length(X);
   fprintf('\n%s\n', name);
   fprintf('%3s %8s %12s %12s %12s\n','i','x','y','dy','d2y');
   for i = 1:n
       fprintf('%3d %8.4f %12.4f %12.4f %12.4f\n', ...
               i, X(i), Z(i,1), Z(i,2), Z(i,3));
   end
end