The while loop for my taylor expansion will not check the condition for each iteration.

1 visualizzazione (ultimi 30 giorni)
c = pi;
x = (12*pi)/17;
f = x + 1.9 + 0.158*sin(x); %original equation f
f1 = 1 + 0.158*cos(x); %derivative 1
f2 = -0.158*sin(x); %derivative 2
f3 = -0.158*cos(x); %derivative 3
f4 = 0.158*sin(x); %derivative 4
f5 = 0.158*cos(x); %derivative 5 Note: derivative 4 and 5 wll flip for eternity
real_value = c + 1.9 + 0.158*sin(c);
i = 1;
MAXerror = 1;
while MAXerror >= 0.0000001 %while loop will execute until all values stored in variable c is approximated under an error of 0.00001%
if i == 1
f_taylor(i) = f; %0th order taylor
Et(i) = abs(real_value - f_taylor(i))/real_value;
elseif i == 2
f_taylor(i) = f_taylor(i - 1) + f1.*((c - x).^(i-1)); %1st order taylor
Et(i) = abs(real_value - f_taylor(i))/real_value;
elseif i == 3
f_taylor(i) = f_taylor(i - 1) + (f2/factorial(i-1)).*((c - x).^(i-1)); %2nd order taylor
Et(i) = abs(real_value - f_taylor(i))/real_value;
elseif i == 4
f_taylor(i) = f_taylor(i - 1) + (f3/factorial(i-1)).*((c - x).^(i-1)); %3rd order taylor
Et(i) = abs(real_value - f_taylor(i))/real_value;
elseif i == 5
f_taylor(i) = f_taylor(i - 1) + (f4/factorial(i-1)).*((c - x).^(i-1)); %4th order taylor
Et(i) = abs(real_value - f_taylor(i))/real_value;
elseif mod(i,2) == 0
f_taylor(i) = f_taylor(i - 1) + (f5/factorial(i - 1)).*((c - x).^(i - 1)); %5th order taylor and will cover all odd orders from here on
Et(i) = abs(real_value - f_taylor(i))/real_value;
elseif i > 10000
fprintf('break')
break
else
f_taylor(i) = f_taylor(i - 1) + (f5/factorial(i - 1)).*((c - x).^(i - 1)); %6th order taylor and will cover all even orders from here on
Et(i) = abs(real_value - f_taylor(i))/real_value;
end
MAXerror = Et(i); %determines the maximum error value in each taylor order
i = i + 1;
end
The loop goes to the maximum i (1000) but should be finished wihin the first 8 loops based on the condition. Debugging found out that the while loop conditon is not checked after the first loop.

Risposte (1)

Geoff Hayes
Geoff Hayes il 6 Ott 2021
@Zachary Nies - I don't think your MAXerror ever gets below the condition. When I run your code, the minimum value assigned to it is
4.04848575875934e-07
which is still greater
0.000000404848575875934 >= 0.0000001
As an aside, is it necessary to have separate if/elseif conditions for i equal to 1, 2, 3, 4 and 5? Can't you just generalize for even and odd i?

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Prodotti


Release

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by