请协助发现MATLAB函数中的错误

时间:2013-11-19 04:06:27

标签: database matlab loops optimization struct

我正在学习MATLAB编程课程,目前我们正在开发一个项目,该项目使用一个名为Project2的数据库,该数据库包含多个航空公司飞行数据结构(全部为1 x N)。一项练习要求我们创建一个功能,以识别使用波音737-800飞机的航班段数(位于航班结构中)。下面我已经包含了我创建的函数的代码(注意:第一行的格式是指令中规定的格式,必须保持这种方式)。虽然这个函数似乎工作并且没有bug,但它始终返回0的结果,我无法弄清楚为什么。有人可以帮忙吗?我们非常感谢您解决问题和/或清理代码的建议!

function total = Problem2 (flights, aircraft, airlines, airports)
    load Project2
    id=findAircraftID (aircraft, Boeing 737-800)
    seg=0;
    for jj = 1:length(flights)
        if (strcmp (flights(1,jj).aircraft_id, id))
            seg=seg+1
        end
    end
    fprintf ('A total of %d flight segments used the Boeing 737-800 aircraft.\n', seg)
end

function id=findAircraftID (aircraft, AircraftName)
    id=0;
    for ii=1:length(aircraft)
        if (strcmp (aircraft(1,ii).name, AircraftName))
            id=ii;
            return;
        end
    end
end

2 个答案:

答案 0 :(得分:1)

为什么使用strcmp来比较整数? aircraft_id是一个字符串吗?如果是这样,也许您可​​以将id从int转换为字符串。或者更好的是你可以使用isequal(a,b):

if isequal(flights(1,jj).aircraft_id, id)
    seg=seg+1;
end

另见Octave/MATLAB: How to compare structs for equality?

的其他方法

另外(或者如果那不是问题)你正在迭代你的第二个函数并设置id几次,但只有最后一个值进入第一个函数。仔细看看你的for循环,看看你是否需要包装它们,将id存储为数组而不是单个整数等等。

没关系,如果飞机名称是唯一的,我会发现您的代码可以正常工作。 strcmp应该适用于那种情况 - 但也许可以逐步检查你是否因为大写,空格等而没有问题。

答案 1 :(得分:0)

通常,当您想要在数组中找到与条件匹配的元素时,可以使用类似

的内容
bWhenAis3 = B(A == 3);

当A为3时找到B的值。这可以返回多个值的向量,并且通常比显式循环快得多。

在您的代码中,aircraftID是一个整数,因为它由findAircraftID返回,返回ii。你无法将其与字符串进行比较!你需要比较类似的类型。