Index exceeds matrix dimensions
이전 댓글 표시
% flow m3/s
Q = 20;
% slope m/m
So = 0.0001;
% side slope m/m
z = 2;
% manning number
n = 0.015;
b = 10; % width of channel m
g = 9.81; % gravity force m/s2
N = 4;
ys = 1;
yend = 2;
dy = abs((ys-yend)/N);
y(1) = ys;
% A(1) = ;x
for i = 1:N+1
if i == 1
y(i) = ys;
else
y(i)= y(i-1) + dy;
end
A(i) = (b + y(i)*z)*(y(i));
P(i) = b + 2*y(i)*sqrt(1+z^2);
R(i) = A(i) / P(i);
V(i) = Q / A(i);
E(i) = y(i) + V(i)^2 / (2*g);
if i == 1;
dE(i) = 0;
else
dE(i) = E(i)-E(i-1);
end
dE
Se(i) = (V(i)^2)* (n^2)/(R(i)^(4/3))
if i > 1
Sav(i) = (Se(i) + Se(i+1))/2
else
Sav(i) = 0
end
if i > 1
dx = dE(i)/(So - Sav(i))
else
dx = 0
end
if i > 1
x (i) = dx(i) + dx(i-1);
else
x(i)= 0
end
end
its giving me on line where dE(i) =E(i) -E(i+1)
Sav(i) =(Se(i) + Se(i+1))/2
index exceed matrix dimension
How do i solve the issue???
thank you
댓글 수: 6
Adam Danz
2019년 9월 29일
When sections of your code are highlighted like in the image below, click on those sections and after a second or so, a message will appear that suggests improvements. If the message doesn't appear, you can press ctrl+m. Pay attention to those messages because there are lots of messy sections of the code.

The problem is here
E(i+1)
E only has 2 elements but i+1 equals 3 which means you're asking for the 3rd element.
hasan damaj
2019년 9월 29일
Adam Danz
2019년 9월 29일
After you make the E(i-1) change you also need to make the Se(i-1) change. Then your code runs without error. Then 'y' 'A' and 'P' are all vectors of length 5. 'x' don't exist in your code.
hasan damaj
2019년 9월 30일
hasan damaj
2019년 9월 30일
Adam Danz
2019년 9월 30일
See answer.
채택된 답변
추가 답변 (1개)
Adam Danz
2019년 9월 30일
"if i want to put the variable of
y A P R V E dE Se Sav dx x
in a matrix in for of a table .. what is the required code.??"
Those variables are row vectors of equal length and can be concatenated vertically into a matrix like this:
out = [y;A;P;R;V;E;dE;Se;Sav;dx;x];
But to follow the principles of Tidy Data, each column of a matrix should be a variable and each row an observation. The matrix would be transposed.
out = [y;A;P;R;V;E;dE;Se;Sav;dx;x].';
% ^^
Better yet, I recommend using a table
T = array2table([y;A;P;R;V;E;dE;Se;Sav;dx;x].',...
'VariableNames',{'y','A','P','R','V','E','dE','Se','Sav','dx','x'})
"also i need to plot the vales of x with respect to y."
Assuming you've created the table above,
plot(T.x,T.y,'o-')
댓글 수: 2
hasan damaj
2019년 9월 30일
Adam Danz
2019년 9월 30일
It's the linespec of the plot
It plots with lines (-) and circle markers (o).
카테고리
도움말 센터 및 File Exchange에서 Mathematics에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
