My function won't accept the vector
3 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Arif Hoq
2023-1-7
移动:Image Analyst
2023-1-7
You can not specify 0 as an index
x = 0:1:10;
f = x.^2-x-1
更多回答(3 个)
Walter Roberson
2023-1-7
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 个评论
Walter Roberson
2023-1-7
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
2023-1-7
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
2023-1-7
移动:Image Analyst
2023-1-7
Perhaps you're looking for
x = 0:1:10;
f = x.^2-x-1;
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!