[已答复] 索引超出范围

[复制链接]
ldkuaile 发表于 2018-7-19 20:04:06
d=0;p=rem(nn,2);
n=(nn-p)/2;m=ceil(1.2*n+15);
q=q+10^(-12);
if s==0
    if p==0
        a=coe(0,nn,abs(q));
        if q>0
            for j=0:m
                d=d+a(j+1)*cos(2*j*x);
            end
运行时提示试图访问 a(17);由于 numel(a)=16,索引超出范围。
出错 ce (line 16)
                d=d+a(j+1)*cos(2*j*x);
求教 该如何修改呢?

7 条回复


caicaibi 发表于 2018-7-19 23:56:24
a中只有16个元素,你要访问第17个,就报错了呗。

ldkuaile 发表于 2018-7-20 09:43:22
caicaibi 发表于 2018-7-19 23:56
a中只有16个元素,你要访问第17个,就报错了呗。

嗯嗯 请问该如何修改呢

caicaibi 发表于 2018-7-20 09:46:36
ldkuaile 发表于 2018-7-20 09:43
嗯嗯 请问该如何修改呢

你这个半吊子程序,改不了

ldkuaile 发表于 2018-7-20 10:26:56
caicaibi 发表于 2018-7-20 09:46
你这个半吊子程序,改不了

function y=ce(a,s,nn,q,x)
%--Compute the value of even-AMF of first kind and mod AMF
%-s:Drivation or not,if not,s=0;else s=1;
%-n:order;
%-q:Mathieu Parameter;
%-x:Argument to be computed;
%***************************************************
d=0;p=rem(nn,2);
n=(nn-p)/2;m=ceil(1.2*n+15);
q=q+10^(-12);
if s==0
    if p==0
%         a=coe(0,nn,abs(q));
        if q>0
            for j=0:m
                d=d+a(j+1)*cos(2*j*x);
            end
        else
            for j=0:m
                d=d+a(j+1)*cos(2*j*(pi/2-x));
            end
            d=(-1)^n*d;
        end
    else
        if q>=0
            a=coe(0,nn,q);
            for j=0:m
                d=d+a(j+1)*cos((2*j+1)*x);
            end
        else
            b=coe(1,nn,-q);
            for j=0:m
                d=d+b(j+1)*sin((2*j+1)*(pi/2-x));
            end
            d=(-1)^n*d;
        end
    end
else
    if p==0
        a=coe(0,nn,abs(q));
        if q>=0
            for j=0:m
                d=d+(-2*j)*a(j+1)*sin(2*j*x);
            end
        else
            for j=0:m
                d=d+2*j*a(j+1)*sin(2*j*((pi/2)-x));
            end
            d=(-1)^n*d;
        end
    else
        if q>=0
            a=coe(0,nn,q);
            for j=0:m
                d=d-(2*j+1)*a(j+1)*sin((2*j+1)*x);
            end
        else
            b=coe(1,nn,-q);
            for j=0:m
                d=d-(2*j+1)*b(j+1)*cos((2*j+1)*((pi/2)-x));
            end
            d=(-1)^n*d;
        end
    end
end
y=d;
%***************************************************
这个是完整的程序,下面是ie.m的程序
function y=ie(s,nn,q,x)
%--Compute the value of the first kind Modified Radial Mathieu Function ie;
%-s:Drivation or not,if not,s=0;else s=1;
%-n:order
%-q:Parameter;
%-x:Argument to be computed;
%*****************************************************************************
d=0;p=rem(nn,2);n=(nn-p)./2;
m=ceil(1.2.*n+15);
if q>0
    error('Wrong!For ie,q<=0!q>0 for je(s,n,q,x)');
else
    q=-q;
    v1=sqrt(q).*exp(-x);v2=sqrt(q).*exp(x);
    u=2*sqrt(q).*sinh(x);w=2*sqrt(q).*cosh(x);
    if p==0
         a=coe(0,nn,q);
        p2n=ce(a,0,nn,q,0).*ce(a,0,nn,q,pi/2);
        if s==0
            for j=0:m
                d=d+(-1).^n.*p2n/(a(1).^2)*(-1)^j*a(j+1)*besseli(j,v1)*besseli(j,v2);
            end
        else%s==1
            for j=0:m
                d=d+(-1).^n*ce(a,0,nn,q,pi/2)/a(1)*a(j+1).*w/2*(besseli(2*j-1,u)+besseli(2*j+1,u));
            end
        end
    else
        b=coe(1,nn,q);
        s2n1=se(1,nn,q,0).*se(0,nn,q,pi/2);
        if s==0
            for j=0:m
                d=d+s2n1/(sqrt(q)*b(1)^2)*(-1)^j*b(j+1)*(besseli(j,v1)*besseli(j+1,v2)+besseli(j+1,v1)*besseli(j,v2));%
            end
            d=d*(-1)^n;
        else
            for j=0:m
                d=d+(-1)^n*se(1,nn,q,0)/(sqrt(q)*b(1))*(-1)^j*b(j+1)*u/2*(besseli(2*j,w)+besseli(2*j+2,w));
            end
        end
    end
end
y=d;
报错为:
试图访问 a(17);由于 numel(a)=16,索引超出范围。

出错 ce (line 16)
                d=d+a(j+1)*cos(2*j*x);

出错 ie (line 19)
        p2n=ce(a,0,nn,q,0).*ce(a,0,nn,q,pi/2);
请问是应该找到a的最初值,增大a的范围,还是找到调用a的程序啊?

caicaibi 发表于 2018-7-20 10:52:13
ldkuaile 发表于 2018-7-20 10:26
function y=ce(a,s,nn,q,x)
%--Compute the value of even-AMF of first kind and mod AMF
%-srivation ...

你这是两个子函数,没有主函数阿

ldkuaile 发表于 2018-7-20 15:50:57
caicaibi 发表于 2018-7-20 10:52
你这是两个子函数,没有主函数阿

运行主函数时 调用的这一步出现了问题 请问我应该怎么去解决这个问题呢?是要找a=coe(0,nn,abs(q))中的这个coe.m程序,然后修改它吗?

caicaibi 发表于 2018-7-20 17:13:16
ldkuaile 发表于 2018-7-20 15:50
运行主函数时 调用的这一步出现了问题 请问我应该怎么去解决这个问题呢?是要找a=coe(0,nn,abs(q))中的这 ...

额,是和这个相关,但是具体的不知道
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表