Why is my code running for forever?

2 visualizzazioni (ultimi 30 giorni)
Mikayla Farr
Mikayla Farr il 1 Mar 2018
Modificato: Jos (10584) il 1 Mar 2018
I am using forward differencing to calculate values of Yn for the given timestep t. The first while loop outputs what I want, but it seems to get stuck on the second one. In the second while loop I am first finding the values of the analytical solution as the timestep t increases, and I am using those values to calculate the error of the analytical solutions and the solutions that used forward differencing.
clear
clc
clf
%Known Values
theta = 10;
v = 0;
t = 0.1;
%First-order system of equations
I = [1 0; 0 1];
A = [0 1; (-327/20) -4];
Yn = [theta; v];
%Analytical Solution
x = 0;
T = linspace(0,6,1000);
theta1 = 10*exp(-2*x)*cosd((1/2)*sqrt(247/5)*x) + 5.691103933*exp(-2*x)*sind((1/2)*sqrt(247/5)*x);
subplot(2,1,1)
plot(T,theta1,'k','LineWidth',2);
hold on
%Forward Differencing at t = 0.1
Te = 0;
i = 1;
n = 1;
Tmax = 6;
while (Te(i) <= Tmax);
Yn(:,i+1) = [I + t*A]*Yn(:,i);
Te(i+1) = Te(i) + t;
i = i + 1;
end
%Plot
subplot(2,1,1)
plot(Te, Yn(1,:),'m','LineWidth', 2);
title('Change in Angle Theta as Time Increases');
xlabel('Time (s)');
ylabel({'Angle Made by the String'; 'with the Vertical Axis';'(degrees)'});
axis([0 7 -5 12]);
Te = ones(1,62);
theta11 = ones(1,62);
%error
while (Te(n) <= Tmax)
theta11(n) = 10*exp(-2*Te(n))*cosd((1/2)*sqrt(247/5)*Te(n)) + 5.691103933*exp(-2*Te(n))*sind((1/2)*sqrt(247/5)*Te(n));
error1 = abs(theta11- Yn(1,:));
Te(n+1) = Te(n) + t;
end
%Find Max Error and plot it
M1 = max(error1)

Risposte (1)

Jos (10584)
Jos (10584) il 1 Mar 2018
Modificato: Jos (10584) il 1 Mar 2018
You never change n inside the second while loop
→ T(n) never changes
T(n) <= Tmax always evaluates to true
→ infine loop ...
btw, you also overwrites error1 all the time
(very buggy code ..)

Categorie

Scopri di più su MATLAB Coder in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by