Array indices must be positive integers or logical values.
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
As111
am 14 Okt. 2019
Bearbeitet: Adam Danz
am 14 Okt. 2019
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 Kommentare
Adam Danz
am 14 Okt. 2019
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.
Akzeptierte Antwort
Adam Danz
am 14 Okt. 2019
Bearbeitet: Adam Danz
am 14 Okt. 2019
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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!