index必须是正整数还是逻辑?

时间:2015-06-01 00:05:20

标签: matlab integer bisection

k = 0.019;
Pstar = 100;
H = 33;
h = 0.1;
X = 36;
N = round(X/h);
t = zeros(1,N+1);
P = zeros(1,N+1);
P(1) = 84;
t(1) = 0;
yHeun = zeros(1,N+1);
yHeun(1)=84;
a = 1; b = 100;
while b-a >0.5
    c = (a+b)/2;
    for n = 1:N
        t(n+1) = t(n) + h;
        Inside = nthroot(sin(2*pi*t/12),15);
        Harvest = c*0.5*(Inside+1);
        P(n+1) = P(n) + h*(k*P(n)*(Pstar-P(n))-Harvest(n));
        if P < 0
            P = 0;
        end
        yHeun(n+1) = yHeun(n) + h*0.5*((k*P(n)*(Pstar-P(n))-Harvest(n))+(k*P(n+1)*(Pstar-P(n+1))-Harvest(n+1)));
    end
    if sign(yHeun(c)) == sign(yHeun(a))
        c = a;
    else
        c = b;
    end
end
disp(['The root is between ' num2str(a) ' and ' num2str(b) '.'])

这是我尝试运行的代码,我知道它可能很糟糕,但编码很糟糕,每当我尝试运行代码时,它说:

  

试图访问yHeun(50.5); index必须是正整数或   逻辑。

     

Matlab3Q4中的错误(第30行)       if sign(yHeun(c))== sign(yHeun(a))

我不知道如何让yHeun(c或a或者其他)返回任何整数。我不认为我做了while + for循环。

问题:&#34;从H的上限开始为100(高值导致36个月后的总体为0),下限为1.放置求解器来自上面的问题#3,在一个while循环的中间,并保持H的上下界平分,直到上下界之间的差值小于0.5。&#34;

1 个答案:

答案 0 :(得分:1)

第30行(有错误)是这一行:

if sign(yHeun(c)) == sign(yHeun(a))

在这里,我猜测 c等于50.5,因为上面有c = (a+b)/2(BTW你可以通过调试发现我是否猜对了 - 尝试在第30行之前添加disp(c)

要强制数字为整数,请使用floor

c = floor((a+b)/2);

似乎你正试图使用​​某种分而治之的算法;当b - a等于1时,它应该足够停止。