Matlab - 尺寸不匹配

时间:2014-10-19 14:47:28

标签: arrays matlab multidimensional-array

我在matlab函数上有一些功课。 任务是创建一个函数acc=accvec(m,rv,rl)来计算以下内容:

其中m是3x1数组,rv是3x3x3数组,rl是3x3数组。我的解决方案如下:

function acc=accvec(m,rv,rl)
% calculate the acceleration of the object
s=size(rv);
acc=zeros(s(1),s(2));

global G

for i=1:s(2)
    for j=1:s(2)
        if i ~= j
            for k=1:3
                acc(k,i)=acc(k,i)-G*m(j)*rl(i,j)./rv(k,i,j)^3;
            end
        end
    end
end

这是rar文件的link,其中包含所有使用的函数。如果您将rvr=[1 0 0; 0 1 0; 0 0 1]rl一起提供新计算的rv并生成m=[1 2 3]G=1;,则结果应为

acc = 
-1.7678    0.3536    0.3536
0.7071   -1.4142    0.7071
1.0607    1.0607   -1.0607

但是我的功能ac引发了尺寸不匹配,我只是无法弄清楚为什么,我需要别人看着它并且去看看它是如此简单

1 个答案:

答案 0 :(得分:0)

此代码无效的原因是G尚未初始化,即使您已将其设为global。参考documentation on global,变量仅在特定程序的生命周期内为global。此外,当变量为global时,您正在执行的脚本的生命周期内的所有函数将能够看到此变量。

即使您在调用它之前可能将其设置为函数之外的某些内容,G实际上也不会设置为任何内容。请记住,在MATLAB中调用函数时,您声明的变量仅在该函数的范围内定义,因此在执行函数之前在函数外部设置的任何值都将不可见。因此,您需要在脚本中自己设置此变量。

如果您手动更改G以便将其设置为1(根据您的帖子),那么您将能够得到答案。因此,请改为:

G = 1;

您的程序现在应该运行。我实际上只是用随机数据进行测试,它输出一个3 x 3矩阵。但是,你正在计算的公式的准确性我没有检查过,所以我将把它留给你作为练习。祝你好运!