Updating variable over while loop inside function

8 views (last 30 days)
I am attempting to write a function that approximates the value of a sine function using the sine expansion. I'd like the function to stop when the difference between two adjacent values are less than 0.001. I have the while loop looping over n<100 because it goes on an infinite loop when set to n>0 and gives <missing> for the sin1 and sin2 display values. My code is below:
function output = custom_sine(x)
n=1;
sin1 = 0;
sin2 = 0;
sin_diff = 0;
while n<100
disp("N is " + n);
f2 = factorial(n+2);
f3 = factorial(n+4);
sin1 = sin1+((-1)^(n+2))*(x^(n+2))/(f2);
disp("Sin1 is " + sin1);
sin2 = sin2+((-1)^(n+4))*(x^(n+4))/(f3);
disp("Sin2 is " + sin2);
sin_diff = abs(sin2)-abs(sin1);
disp("sin diff is " + sin_diff);
if abs(sin_diff)<0.001
break
end
n=n+1;
end
output = x+sin2;
disp(output);
end
It does not seem to update the sin1 and sin2 values. Any help would be greatly appreciated!

Answers (1)

Dyuman Joshi
Dyuman Joshi on 5 Dec 2023
Moved: Dyuman Joshi on 5 Dec 2023
It does update the values. But, as the change is miniscule, the value displayed is does not seem to be updated.
However, the value displayed is not the same as the value stored.
I have increased the precision of the value displayed so the changes can be observed over iterations.
Note that after a certain term, the change is so insignificant (as the factorial value grows at a much higher rate than the given powers), that it the it appears that the value is not being updated. But that does not mean, there is no change.
And once again, if you want to see that minute minute change, you can increase the precision of the value displayed.
custom_sine(pi/3);
N is 1 Sin1 is -0.191396769631480307 Sin2 is -0.010494502221717465 sin diff is -0.180902267409762840 N is 2 Sin1 is -0.141289212515223944 Sin2 is -0.008662866050449167 sin diff is -0.132626346464774780 N is 3 Sin1 is -0.151783714736941411 Sin2 is -0.008936878180911349 sin diff is -0.142846836556030060 N is 4 Sin1 is -0.149952078565673108 Sin2 is -0.008901010076909079 sin diff is -0.141051068488764031 N is 5 Sin1 is -0.150226090696135295 Sin2 is -0.008905183520317661 sin diff is -0.141320907175817634 N is 6 Sin1 is -0.150190222592133021 Sin2 is -0.008904746478345908 sin diff is -0.141285476113787112 N is 7 Sin1 is -0.150194396035541605 Sin2 is -0.008904788084644325 sin diff is -0.141289607950897289 N is 8 Sin1 is -0.150193958993569854 Sin2 is -0.008904784453809839 sin diff is -0.141289174539760004 N is 9 Sin1 is -0.150194000599868260 Sin2 is -0.008904784746286839 sin diff is -0.141289215853581424 N is 10 Sin1 is -0.150193996969033766 Sin2 is -0.008904784724409609 sin diff is -0.141289212244624152 N is 11 Sin1 is -0.150193997261510753 Sin2 is -0.008904784725936928 sin diff is -0.141289212535573833 N is 12 Sin1 is -0.150193997239633531 Sin2 is -0.008904784725836964 sin diff is -0.141289212513796558 N is 13 Sin1 is -0.150193997241160837 Sin2 is -0.008904784725843122 sin diff is -0.141289212515317703 N is 14 Sin1 is -0.150193997241060861 Sin2 is -0.008904784725842763 sin diff is -0.141289212515218088 N is 15 Sin1 is -0.150193997241067023 Sin2 is -0.008904784725842782 sin diff is -0.141289212515224250 N is 16 Sin1 is -0.150193997241066662 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223889 N is 17 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 18 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 19 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 20 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 21 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 22 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 23 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 24 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 25 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 26 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 27 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 28 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 29 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 30 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 31 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 32 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 33 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 34 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 35 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 36 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 37 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 38 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 39 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 40 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 41 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 42 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 43 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 44 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 45 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 46 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 47 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 48 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 49 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 50 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 51 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 52 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 53 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 54 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 55 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 56 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 57 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 58 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 59 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 60 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 61 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 62 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 63 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 64 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 65 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 66 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 67 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 68 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 69 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 70 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 71 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 72 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 73 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 74 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 75 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 76 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 77 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 78 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 79 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 80 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 81 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 82 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 83 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 84 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 85 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 86 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 87 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 88 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 89 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 90 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 91 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 92 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 93 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 94 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 95 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 96 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 97 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 98 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 N is 99 Sin1 is -0.150193997241066690 Sin2 is -0.008904784725842781 sin diff is -0.141289212515223916 1.0383
function output = custom_sine(x)
n=1;
sin1 = 0;
sin2 = 0;
sin_diff = 0;
while n<100
disp("N is " + n);
f2 = factorial(n+2);
f3 = factorial(n+4);
sin1 = sin1+((-1)^(n+2))*(x^(n+2))/(f2);
fprintf('Sin1 is %0.18f\n', sin1);
sin2 = sin2+((-1)^(n+4))*(x^(n+4))/(f3);
fprintf('Sin2 is %0.18f\n', sin2);
sin_diff = abs(sin2)-abs(sin1);
fprintf('sin diff is %0.18f\n', sin_diff);
if abs(sin_diff)<0.001
break
end
n=n+1;
end
output = x+sin2;
disp(output);
end

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!