Effacer les filtres
Effacer les filtres

Array indices must be positive integers or logical values Error

2 vues (au cours des 30 derniers jours)
Abigail Mullen
Abigail Mullen le 4 Sep 2018
The question I am trying to answer is: Write a program to test the two finite difference approximations in section 1.6 (the forward and centered difference formulas). Test your program on the function arctan(x) at x=sqrt(2).Start with h = 1/2, and generate a sequence of approximations by reducing h by a factor of 2 each time, until h = 2−40. Observe how the error changes with h.
So far I have;
f(x)=atan(x);
x=sqrt(2) ;
h=1:.5:2^(-40);
%Forward Euler
F(x)=((f(x+h)-f(x))/h);
I keep getting the array indices must be positive integers or logical values error.
  2 commentaires
Adam
Adam le 4 Sep 2018
f(x)=atan(x);
What are you looking to do with this line? f will be an array here and x the index into it. You haven't defined x before this line though immediately afterwards you define it to sqrt(2) which clearly is not an integer to use as an index.
Are you expecting the above line to define a function? If so you would need it to be more like
f = @(x) atan( x );
Abigail Mullen
Abigail Mullen le 4 Sep 2018
I suppose I am just not sure how to do this problem, thank you for your help - I am new to matlab.

Connectez-vous pour commenter.

Réponses (1)

Ashutosh Prasad
Ashutosh Prasad le 7 Sep 2018
The error that you are getting is because of the way you are defining the h vector. Your definition creates an empty vector with no elements. But I understand you want h to be halved on each iteration, that's when loops come handy.
Try execution the following script
f = @(x) atan(x);
x = sqrt(2) ;
h = 0.5;
%Forward Euler
while(h >= 2^(-40))
F = ((f(x+h)-f(x))/h);
h = h/2;
end
Let me know if this helps

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by