【问题标题】:Recursively fill array in MATLAB在MATLAB中递归填充数组
【发布时间】:2019-01-07 13:58:32
【问题描述】:

我正在尝试使用递归公式填充数组I。公式如下所示。

在这个公式中,我已经计算了 B 数组并且我知道所有元素,并且 MB 数组的维数等于 I 数组的维数。 u,vw 字母表示索引。我的功能是:

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_matrix = NaN(max_boxes,max_boxes,max_boxes);
%%fill the I matrix using recursive function
for u_ind = 1:max_boxes
    for v_ind = 1:max_boxes
        for w_ind = 1:max_boxes
            I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind, v_ind, w_ind);
        end
    end
end

当它运行时,我收到错误消息“分配的非单一右轴维度比非单一下标更多”。你能帮我解决这个问题吗?

【问题讨论】:

  • 我不清楚为什么这需要递归。为什么不能从0,0,0(或1,1,1 用于MATLAB 索引)开始并通过循环遍历uvw 来填充矩阵? I 的元素只依赖于先前计算的值 - 即 uv 或 `w.递归使这个问题复杂化。

标签: matlab recursion multidimensional-array


【解决方案1】:

问题的出现是由于您对 fill_I_recursively 函数的期望不同。

在您的函数定义中,输出为I_matrix,这是一个多维数组。

在您的主程序中,fill_I_recursively 的预期输出是一个标量,它被填充到 I_matrix 多维数组的一个条目中。

您应该更改两个部分之一,以使它们保持一致。

以下是如何修改函数定义以输出标量的示例:

function I_uvw = 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_uvw = 0; 
else
    if w_ind > 1
        I_uvw = 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_uvw = fill_I_recursively(B_matrix, u_ind, v_ind-1, M-1) + B_matrix(u_ind,v_ind-1,M-1);
    else
        I_uvw = fill_I_recursively(B_matrix, u_ind-1,  M-1, M-1) + B_matrix(u_ind-1,M-1,M-1);
   end
end

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2016-07-13
    • 2013-12-08
    • 1970-01-01
    • 2011-07-17
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多