Can anyone find the error in my code?

조회 수: 1 (최근 30일)
Georgia potter
Georgia potter 2017년 5월 21일
답변: Srishti Saha 2018년 5월 1일
Write a function called approximate_e that uses the following formula to compute e, Euler’s number. Instead of going to infinity, the function stops at the smallest k for which the approximation differs from exp(1) (i.e., the value returned MATLAB’s built-in function) by no more than the positive scalar, delta, which is the only input argument. The first output of the function is the approximate value of e, while the second is k. (Note: if your program or the grader takes a long time, you may have created an infinite loop and need to hit Ctrl-C on your keyboard.) You are not allowed to use the built-in function factorial.
function [e, k] = approximate_e( delta )
k= 0;
e = 0;
while ((exp(1))-e) > delta
k = k + 1;
e = e + 1/prod(1:k);
if k > 1000
break;
end
end
note: this code fails to produce the correct output for delta = 1
YOU CAN'T USE THE FACTORIAL FUNCTION
  댓글 수: 2
Akira Agata
Akira Agata 2017년 5월 22일
Let me clarify.
Using the Taylor expansion, exp(1) can be expanded as follows:
exp(1) = 1 + (1/1) + (1/2!) + (1/3!) + ...
On the other hand, your code calculates following equation.
(1/1) + (1/2!) + (1/3!) + ...
So, I think the code correctly generates ~1.718.
Steven Liu
Steven Liu 2017년 6월 4일
e should be 1, not 0. Problem solved!

댓글을 달려면 로그인하십시오.

답변 (1개)

Srishti Saha
Srishti Saha 2018년 5월 1일
Hey, this piece of code works just fine:
%function to compute euler's number
function [approx_e, k] = approximate_e (delta)
% Set the variables for the while loop.
k = 0;
fact = 1;
approx_e=1;
while abs(approx_e - exp(1)) > delta
k=k+1;
fact = fact * (1/k);
approx_e = approx_e + fact;
end
approx_e;
k;
end

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by