My function won't accept the vector
6 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Arif Hoq
on 7 Jan 2023
Moved: Image Analyst
on 7 Jan 2023
You can not specify 0 as an index
x = 0:1:10;
f = x.^2-x-1
More Answers (3)
Walter Roberson
on 7 Jan 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 Comments
Walter Roberson
on 7 Jan 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
on 7 Jan 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
on 7 Jan 2023
Moved: Image Analyst
on 7 Jan 2023
Perhaps you're looking for
x = 0:1:10;
f = x.^2-x-1;
0 Comments
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!