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

2 ビュー (過去 30 日間)
Anthony Fuentes
Anthony Fuentes 2016 年 10 月 30 日
回答済み: KSSV 2016 年 10 月 31 日
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 件のコメント
dpb
dpb 2016 年 10 月 30 日
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 2016 年 10 月 30 日
Not that the code as posted is NOT valid MATLAB syntax.
++i;
NOT in MATLAB.

サインインしてコメントする。

採用された回答

KSSV
KSSV 2016 年 10 月 31 日
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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by