Effacer les filtres
Effacer les filtres

Hi! I have a problem in my function, Error in MATLAB

1 vue (au cours des 30 derniers jours)
Anthony Fuentes
Anthony Fuentes le 30 Oct 2016
Réponse apportée : KSSV le 31 Oct 2016
Use Wellis product= pi/2=2/1∗2/3∗4/3∗4/5∗6/5∗ … in a function in MATLAB that receives the relative error willing to accept and return the user a vector with all values of π and other vector estimated with relative errors associated with each value of π. (This is in arrays). Thanks a lot. But, MATLAB gives me an error:
Attempted to access ret(0); index must be a positive integer or logical.
Error in pi_value (line 13)
ret(i) = 2 * (ret(i - 1) / 2) * temp;
The function is the following:
function[e, ret] = pi_value(err)
ret = [4];
value = 0;
e = inf;
i = 1;
while e > err
++i;
temp = 0;
if mod(i, 2) == 0
temp = i / (i + 1);
else
temp = (i + 1) / i;
end
ret(i) = 2 * (ret(i - 1) / 2) * temp;
e = abs(ret(i) - ret(i - 1));
end
end
Thanks a lot!
  2 commentaires
dpb
dpb le 30 Oct 2016
What is index of the RH ret value in
ret(i) = 2*(ret(i-1)/2)*temp;
?? Matlab arrays, as the error message says, only begin at 1. You'll have to special-case the end condition to avoid explicitly referencing a 'zeroth' element.
Also, note that numerically the expression as written above is simply
ret(i) = ret(i-1)*temp;
the two 2's cancel each other out...
John D'Errico
John D'Errico le 30 Oct 2016
Not that the code as posted is NOT valid MATLAB syntax.
++i;
NOT in MATLAB.

Connectez-vous pour commenter.

Réponse acceptée

KSSV
KSSV le 31 Oct 2016
function[e, ret] = pi_value(err)
ret = 4;
e = inf;
i = 1;
while e > err
i = i+1 ;
if mod(i, 2) == 0
temp = i / (i + 1);
else
temp = (i + 1) / i;
end
ret(i) = 2 * (ret(i - 1) / 2) * temp;
e = abs(ret(i) - ret(i - 1));
end
end

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by