为啥 MATLAB 报告我的变量未初始化?
Posted
技术标签:
【中文标题】为啥 MATLAB 报告我的变量未初始化?【英文标题】:Why is MATLAB reporting my variable uninitialized?为什么 MATLAB 报告我的变量未初始化? 【发布时间】:2009-03-23 14:41:22 【问题描述】:我创建了一个类,在其中一种方法中我需要计算两点之间的距离。所以我写了一个名为“remoteness”的普通函数来为我做这件事。
编译错误:
在编译时,“远程”是 确定为一个变量,这 变量未初始化。 “remoteness”也是一个函数名 和以前版本的 MATLAB 将 已调用该函数。
但是,MATLAB 7 禁止在相同的上下文中使用相同的名称作为函数和变量。
==> TRobot>TRobot.makeVisibilityGraph 在 58 处出错 obj.visiblityGraph(k,k+1) = remoteness(:,obj.VGVertices(k),obj.VGVertices(:,k+1));
我认为名称 remoteness
可能是另一个函数的名称,但是当我将其名称更改为 kamran
时,错误仍然存在。需要注意的是,我可以在命令行中使用kamran
函数(或remoteness
)没有任何问题。
命令行示例:
>> kamran([0,0],[3,4])
ans = 5
kamran
函数的代码在单独的m文件中。
kamran
函数代码:
function dist = kamran(v1,v2)
dist = sqrt( (v1(1) - v2(1)) ^2 + (v1(2) - v2(2)) ^2 );
kamran
函数如何使用的代码示例:
function obj = makeVisibilityGraph(obj)
verticesNumber = 0;
for num = 1: size(obj.staticObstacle,2)
verticesNumber = verticesNumber + size(obj.staticObstacle(num).polygon,2);
end
% in the below line, 2 is for start and goal vertices
obj.visibilityGraph = ones(2 + size(obj.VGVertices,2)) * Inf;
for j=1 : size(obj.staticObstacle,2)
index = size(obj.VGVertices,2);
obj.VGVertices = [obj.VGVertices, obj.staticObstacle(j).polygon];
obj.labelVGVertices = [obj.labelVGVertices, ones(1,size(obj.staticObstacle(j).polygon,2))* j ];
for k = index+1 : (size(obj.VGVertices,2)-1)
obj.visiblityGraph(k,k+1) = kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));
end
% as the first and last point of a polygon are visible to each
% other, so set them visible to each other
obj.visibilityGraph(index+1,size(obj.VGVertices,2)) = ...
kamran( obj.VGVertices(:,index+1), obj.VGVertices(:,size(obj.VGVertices,2)));
end
end
【问题讨论】:
【参考方案1】:您似乎正在尝试将 kamran 用作数组:
kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));
注意到第一个参数“:”了吗?
我敢打赌 MATLAB 假定 kamran(此处称为)应该是一个 3 维数组,而您正在尝试选择包含
的子集kamran(all-of-first-index, Nth-of-second, Mth-of-third)
第二次调用 kamran 看起来不错:
kamran( obj.VGVertices(:,index+1), obj.VGVertices(:,size(obj.VGVertices,2))
【讨论】:
+1 好收获!这很可能是错误的来源。我只注意到对 kamran 的第二次调用并没有发现问题。 哈。我走在正确的轨道上,但不知道语法是什么意思。很好的解释,Jukka。【参考方案2】:我不知道 MATLAB,但我注意到这一行,您正在运行 kamran,看起来像 3 个参数。在所有其他情况下,它使用 2 个参数执行。也许这有什么关系?
kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));
【讨论】:
以上是关于为啥 MATLAB 报告我的变量未初始化?的主要内容,如果未能解决你的问题,请参考以下文章