【问题标题】:Matlab - Dimensional mismatchMatlab - 尺寸不匹配
【发布时间】:2014-12-14 14:39:41
【问题描述】:

我有一些关于 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 引发了尺寸不匹配,我就是不知道为什么,我需要其他人来查看它并进行操作哦,这太简单了。

【问题讨论】:

    标签: arrays matlab multidimensional-array


    【解决方案1】:

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

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

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

    G = 1;
    

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

    【讨论】:

    • 哦,没错。现在它运行了。我刚刚发现了错误(我已经翻转了 rv 和 rl)。所以现在它产生了正确的结果。谢谢。全局变量的原因是我们假设 G 被定义为网站中检查我们代码的全局变量。我的错。非常感谢!
    猜你喜欢
    • 2013-12-23
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2022-09-27
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多