Filling an array with recursive function
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
mustafa ozendi
el 7 de En. de 2019
Comentada: mustafa ozendi
el 9 de En. de 2019
Dear MATLAB Users,
I am trying to fill in the empty array
using a recursive formula. The formula is shown as follows:
For all 


In this formula, I already know the B array which is
.
So far, I had many attempts but non of them worked. My function is shown below. When I run it, I get the error message "Assignment has more non-singleton rhs dimensions than non-singleton subscripts". Could you please help me to solve this problem?
function I_matrix = fill_I_recursively(B_matrix, u_ind, v_ind, w_ind)
M = size(B_matrix,1);
if u_ind == 1 && v_ind == 1 && w_ind == 1
I_matrix(u_ind,v_ind,w_ind) = 0;
else
if w_ind > 1
I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind, v_ind, w_ind-1) + B_matrix(u_ind,v_ind,w_ind-1);
elseif v_ind > 1
I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind, v_ind-1, M-1) + B_matrix(u_ind,v_ind-1,M-1);
else
I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind-1, M-1, M-1) + B_matrix(u_ind-1,M-1,M-1);
end
end
I am looking forward to hearing from you
3 comentarios
Respuesta aceptada
Stephen23
el 7 de En. de 2019
Editada: Stephen23
el 7 de En. de 2019
I don't see why you need to use a recursive function:
M = 3;
B = randi(9,M,M,M);
I = zeros(M,M,M);
for ku = 1:M
for kv = 1:M
for kw = 1:M
if kw>1
I(ku,kv,kw) = I(ku,kv,kw-1) + B(ku,kv,kw-1);
elseif kv>1
I(ku,kv,kw) = I(ku,kv-1,M-1) + B(ku,kv-1,M-1);
elseif kw>1
I(ku,kv,kw) = I(ku-1,M-1,M-1) + B(ku-1,M-1,M-1);
end
end
end
end
Note that the formula you gave will give different results depending on the order that you fill the dimensions in.
3 comentarios
Stephen23
el 7 de En. de 2019
"As far as I know the more for loops in a matlab program means the more execution time"
Not really. This might have been true fifteen years ago, but MATLAB from fifteen years ago is definitely not the same as MATLAB today. Loops are very effiicient and there is absolutely no reason to avoid using them. Just make sure that you preallocate as required!
"That is the reason why I am triyng to implement it as a recursive function"
Recursive functions have a lot more overhead than a few loops, so your approach is likely to be much slower. Test it yourself to find out!
"I realized that this problem can only be solved with a recursive fucntion but I will definitely try your solution"
I am confused: if it can only be solved using a recursive function, why bother trying my loops?
Más respuestas (0)
Ver también
Categorías
Más información sobre Cell Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!