How i implement Backward Difference Formula Method from general code ?

36 views (last 30 days)
Below is the Backward Difference Formula general code. How can I adapt this code to the above question? Can you please help?
%-------------------------------------------
% Tw0 step Backward Difference Formula Method with fixed point iteration
% [T,Y]=gerifark2(f,tanim,Y1,h); tanim=[t1,tson]
%-------------------------------------------
function [T,Y]=gerifark2(f,tanim,Y1,h)
t1=tanim(1);tson=tanim(2);
eps=0.0001;
t2=t1+h;t3=t2+h;
tanim=[t1,t2];
[T,Y]=geuler(f,tanim,Y1,h);
Y2=Y(2);Y31=Y2;
while t2 < tson
fark=2*eps;
while fark > eps
Y32=4/3*Y2-1/3*Y1+2/3*h*f(t3,Y31);
fark=abs(Y32-Y31);
Y31=Y32;
end
Y3=Y32;Y1=Y2;Y2=Y3;
t1=t2;t2=t3;
T=[T;t3];Y=[Y;Y3];
t3=t3+h;
end
  3 Comments
Torsten
Torsten on 27 May 2022
Edited: Torsten on 27 May 2022
You know the correct result of your differential equation.
If you plot Y against T in the calling program and compare the plot with the analytical solution, both should be approximately the same.
If yes, your code is (most probably) correct, if not, it's not.
Lateef Adewale Kareem
Lateef Adewale Kareem on 29 May 2022
Edited: Lateef Adewale Kareem on 29 May 2022
its hard to correct your code. you called other function (that I dont have) in your code. if I want to correct, there is no way for me to test. however I can try to solve the problem without using your code at all
I dont think I can help you on this

Sign in to comment.

Answers (1)

Nipun
Nipun on 17 Apr 2024 at 4:37
Hi Hazel,
I understand that you want to adapt the given backward difference formula general code for the listed set of equations and constraints.
Upon a scrupulous look at the given code, I can confirm that there are a few functions such as "geuler" which are custom functions and are not elaborated further. Additionally, it is unclear what the function "fn" stands for in the backward difference formula given in the query. The prompt says to derive the twelve calculations - it is unclear as to what calculations are to be performed.
Due to these missing information, it will not be possible to help with adapting the code for a specific case.
However, I can help you with an example code from scratch for this problem. The following code approximates the solution and codes the exact solution. Feel free to make any changes as required.
function bdf2_example()
% Parameters
a_values = [20, -20, -500];
h = 0.01;
t_final = 1;
t = 0:h:t_final;
y_exact = @(t, a) exp(a.*t) + cos(t);
% Loop through each value of a
for a = a_values
% Initial conditions
y = zeros(size(t));
y(1) = 2; % y(0) = 2
y(2) = y_exact(h, a); % Approximate y(1) using the exact solution for simplicity
% Solve using the second-order BDF method
for n = 3:length(t)
f_n = @(y_n) a*(y_n - cos(t(n))) - sin(t(n)); % Define f_n as a function of y_n
% Second-order BDF formula (implicit in y_n)
y(n) = (4*y(n-1) - y(n-2))/3 + (2*h/3)*f_n(y(n-1)); % Approximation, using y(n-1) for simplicity
end
% Plotting
plot(t, y, 'DisplayName', sprintf('BDF2, a = %d', a)); hold on;
end
% Exact solution plot
for a = a_values
plot(t, y_exact(t, a), '--', 'DisplayName', sprintf('Exact, a = %d', a));
end
title('Second-order BDF Solution vs. Exact Solution');
xlabel('t');
ylabel('y(t)');
legend('show');
grid on;
hold off;
end
Hope this helps.
Regards,
Nipun

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!