Array indices must be positive integers or logical values.

x = (a + (i-1).*h)';
alphax = alpha(x);
f = f(x);
I get error: Array indices must be positive integers or logical value
ive tried storing alpha as another variable, but I don't understand.
Here is the full code:
----------------
function [u,x] = solveHeat(alpha, f, a, b, n, tolerance, maxIterations)
h= (b-a)/(n-1);
i=1:n;
x=(a+ (i-1).*h)';
alphax=alpha(x);
f=f(x);
%define starting value of temperature, u
u= [a; zeros(n-2,1);b]
r(1)=0;
r(n)=0;
Dinverse(2:n-1)=1./(-2alphax(2:n-1).*(h^2));
Dinverse(1)=1;
Dinverse(n)=1;
for s =1:maxItreations
r(2:n-1)= (u(1:n-2)-(2+alphax(2:n-1).*h^2)).*u(2:n-1)...
+u(3:n)+(h^2)*f (2:n-1));
u(2:n-1)=u(2:n-1)-Dinverse(2:n-1').*r(2:n-1)';
if norm(r)<tol,break,end
end
end
code to call function
[u, x] = solveHeat(1, @(x) zeros(size(x)), 1, cosh(1), 20, 1e-6, 2000);
error = norm(u - cosh(x))

2 个评论

What are your inputs?
What is the full copy-pasted error message?
And where does ua and ub come from? They aren't defined in your function.
Sorry fixed ua, ub
Inputs: [u, x] = solveHeat(1, @(x) zeros(size(x)), 1, cosh(1), 20, 1e-6, 2000)
Array indices must be positive integers or logical values.
Error in solveHeat (line 9)
alphax = alpha(x);

请先登录,再进行评论。

 采纳的回答

The error is here
% For position in the column vector
x = (a + (i-1).*h)';
alphax = alpha(x);
You're indexing alpha using vector x. As the error indicates, indices need to be positive integers. Instead, x equals
x =
1
1.0286
1.0572
. . .
Also, the alpha input is just 1 so why why would that be indexed in the first place?
Lastly, your last two inputs don't appear in your function so they aren't doing anything.

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by