Help finding error in Matlab code
Mostrar comentarios más antiguos
I have two sets of code, one in Python and the other in Matlab. I am converting Python to Matlab, but ran into a error that I am having a difficult time trouble shooting. There erros is...
Index exceeds matrix dimensions.
Error in unSteadyTEvortexShedding (line 167)
[xVV(i, j), yVV(i, j)] = VortexPointOnPt(xVorPos(i),
yVorPos(i), xVorPos(j), yVorPos(j), 0);
I have attached the VortexPointOnPt function file as well. The indexing is occurring at the while loop with k or the for loops?
4 comentarios
OCDER
el 13 de Nov. de 2017
To help with debugging, you need to format the code in unSteadTEvortexShedding. It's hard to determine which loop is starting where because the end statements aren't aligned. I see a recycling of for loop variables, which could cause the error.
Where is the end of this if/else statement?
for i = 1:t
for j = 1:t
if i == j
xVV(i, j) = yVV(i,j) == 0;
else
...
wakePanelStr = 0.1;
xpWake1 = xp(end);
Try not to override counter variables. Example, this for loop seems to be within another for loop with the same i counter variable
for i = 1:t
for j = 1:t
...
for i = 1:numPanels %THIS "i" replaced the other "i"
[tWP(i), nWP(i)] = VortexPointOnPt(xc(i), yc(i), xcWake, ycWake, theta(i));
What are these "end" ending in your function?
end
end
end
end
end
end
end
end
end
end
end
end
This will not the source of errors, but
filepath = savepath('C:/FramesMatlab')
saves the folders of the current Matlab path to a pathdef.m file in the folder 'C:/FramesMatlab'. This is meaningless.
Zach Dunagan
el 14 de Nov. de 2017
Editada: Zach Dunagan
el 14 de Nov. de 2017
@Zach: The equivalent of what in Python? All I see is a meaningless Matlab command:
filepath = savepath('C:/FramesMatlab')
But I cannot know, which Python command you want to replace. Perhaps:
pathName='C://Users//Zach Dunagan//Desktop//frames//'
Then:
filepath = 'C:/FramesMatlab';
Respuestas (2)
You define xVorPos and yVorPos:
xVorPos = zeros(numFrames, 1);
yVorPos = zeros(numFrames, 1);
Then you run a loop:
for t = 1:numFrames % for each time frame
Inside this loop you check
if t > 0
repeatedly, but this is impossible, when the loop runs from 1:numFrames. Omit this tests to reduce clutter. You access:
for j =1:t
... xVorPos(j), yVorPos(j)
before the failing line successfully. Therefor I cannot imagine, why
for i = 1:t
for j = 1:t
if i == j
xVV(i, j) = yVV(i,j) == 0;
else
[xVV(i, j), yVV(i, j)] = VortexPointOnPt(xVorPos(i), yVorPos(i), ...
xVorPos(j), yVorPos(j), 0);
fails some lines later.
What is the purpose of:
xVV(i, j) = yVV(i,j) == 0;
This sets xVV(i,j) to 1, if yVV(i,j) is 0, and to 1 otherwise. Is this wanted? If so, it is strange, because you have defined
xVV = zeros(t, t);
yVV = zeros(t, t);
explicitly. Or do you want to set xVV(i,j) and yVV(i,j) both to zeros? If so, omit this, because the zeros set this value already.
There are so many strange and confusing commands in your code, that I think the most efficient way to debug it is to delete it and rewrite in in Matlab from scratch. Digging in the mud does not produce reliable and clean code. You cannot write an English article by typing it in German, use Google's auto-translator and fix the errors afterwards.
1 comentario
Zach Dunagan
el 14 de Nov. de 2017
Editada: Zach Dunagan
el 14 de Nov. de 2017
Walter Roberson
el 14 de Nov. de 2017
0 votos
As I described in a previous question, in Python, setting pathName is just setting a variable, with no side effects and no special meaning. It is just another variable name. It is also unused in the code you posted, so you can simply delete the line.
7 comentarios
Zach Dunagan
el 14 de Nov. de 2017
Editada: Walter Roberson
el 14 de Nov. de 2017
Walter Roberson
el 14 de Nov. de 2017
"It's a string that is the path for where to save the images. "
But nothing in that code saves images.
Walter Roberson
el 14 de Nov. de 2017
else
abs(currCircSum) > 10^(-14)
should be
elseif abs(currCircSum) > 10^(-14)
Zach Dunagan
el 15 de Nov. de 2017
Walter Roberson
el 15 de Nov. de 2017
You are not passing nPanels in to PanelCoorToNTCoor() so it is not obvious to me that the second output of that routine (which I do not see the code for) will have nPanels rows.
Zach Dunagan
el 15 de Nov. de 2017
Editada: Zach Dunagan
el 15 de Nov. de 2017
Zach Dunagan
el 16 de Nov. de 2017
Editada: Zach Dunagan
el 20 de Nov. de 2017
Categorías
Más información sobre Call Python from MATLAB en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!