My function won't accept the vector
    15 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Natalie
 el 6 de En. de 2023
  
    
    
    
    
    Comentada: Natalie
 el 7 de En. de 2023
            x = 0:1:10;
f(x) = x.^2-x-1;
I keep getting an error message saying Array indices must be positive integers or logical values. I am trying to find values of f(x) within certain parameters using the find function.
0 comentarios
Respuesta aceptada
  Arif Hoq
      
 el 7 de En. de 2023
        
      Movida: Image Analyst
      
      
 el 7 de En. de 2023
  
      You can not specify 0 as an index
x = 0:1:10;
f = x.^2-x-1
Más respuestas (3)
  Walter Roberson
      
      
 el 7 de En. de 2023
        x = 0:1:10;
okay, x is a list of values [0 1 2 3 4 5 6 7 8 9 10]
f(x) = x.^2-x-1;
you have to substitute in that list of values, so your statement is effectively
f(0:10) = (0:10).^2-(0:10)-1;
which tries to assign to index 0, 1, 2, ... 10. But MATLAB does not permit index 0, so you have a problem.
You could write
f(x+1) = x.^2-x-1;
which would then be equivalent to
f((0:10)+1) = (0:10).^2-(0:10)-1;
which would assign to index locations 1, 2, 3... 11. 
But if you are going to define x that way, you might easily have wanted to do something like
x = 0:0.1:10;
and if you add 1 to that you would just end up with indices such as 1, 1.1, 1.2, and so on. Non-integer indices are not permitted either.
2 comentarios
  Walter Roberson
      
      
 el 7 de En. de 2023
				When you have a statement such as
f(x) = x.^2-x-1;
you need to decide whether you are working with arrays or if you are working with formulas .
If you are working with arrays, then the (x) part of f(x) has to be non-negative integers. 
If you are working with formulas then the (x) on the left has to be a symbolic variable (Symbolic Toolbox)
syms x
f(x) = x.^2-x-1;
X = 0:1:10;
plot(X, f(X))
  Walter Roberson
      
      
 el 7 de En. de 2023
				You should learn this programming pattern: you will use it a lot.
%can be negative, non-integer, can include duplicates,\
% does not need to be sorted
xvals = -1:.1:1; 
num_x = numel(xvals);   %how many are there?
f = zeros(size(xvals)); %pre-allocate output same size as input
for xidx = 1 : num_x   %loop over INDICES
    x = xvals(xidx);   %pull out one SPECIFIC value into your x
    y = x.^2-x-1;      %calculate based on that ONE x
    f(xidx) = y;       %store into a location according to the INDEX
end
plot(xvals, f)         %use the entire vector of values, NOT plot(x, f)
  Adam Danz
    
      
 el 7 de En. de 2023
        
      Movida: Image Analyst
      
      
 el 7 de En. de 2023
  
      Perhaps you're looking for
x = 0:1:10;
f = x.^2-x-1;
0 comentarios
  Image Analyst
      
      
 el 7 de En. de 2023
        See the FAQ:
You probably want
x = 0:1:10;
f = x.^2-x-1
0 comentarios
Ver también
Categorías
				Más información sobre Matrix Indexing en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

