Implementing forward Euler method
조회 수: 4 (최근 30일)
이전 댓글 표시

So I'm working on part(b) and I'm unsure how to plot the error versus step size on a log-log scale. Here is the code I have thus far...
function [tgrid, Y] = euler_method(fun, y_0, n, T)
if nargin(fun) ~=2
error('fun must take two inputs, t and y.');
end
if ~all(size(y_0) == size(fun(0, y_0)))
error('You have not passed appropriate fun or y_0.');
end
%Set up the time grid. ***NOTE THE n+1***
tgrid = linspace(0, T, n+1);
%Compute h from the time grid.
h = tgrid(2) - tgrid(1);
%Orient tgrid as a column vector.
tgrid = reshape(tgrid, n+1, 1);
%How many equations?
m = length(y_0);
%Orient y0 as a row vector.
y_0 = reshape(y_0, 1, m);
% Preallocate an array to hold the approximate solution. Each row
% corresponds to a point in the time grid.
Y = zeros(n+1, m);
% Set the initial conditions.
Y(1,:) = y_0;
% Euler loop
for i = 1: n
% Store the point in time as a temporary variable
t_i = tgrid(i);
% Take the Euler step into the temporary variable
y_1 = y_0 + h * fun(t_i, y_0);
% Store the Euler step
Y(i+1,:) = y_1;
% Update the temporary variable
y_0 = y_1;
end
댓글 수: 0
채택된 답변
Torsten
2017년 11월 13일
Call "euler_method" in a loop for n = 8*2^k (k=1,...,15) and store Y(n+1,1) for each run.
Then make the plot.
Best wishes
Torsten.
댓글 수: 4
Torsten
2017년 11월 13일
y_0 = 0;
tend = 8.0;
fun=@(t,y) sin(t)-y;
for k = 1:15
n = 8*2^k;
[T Y] = euler_method(fun, y_0, n, tend);
Yend(k) = Y(n+1,1);
end
Now add the plot.
Best wishes
Torsten.
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!