langia 发表于 2008-6-2 17:32:09

求助,MATLAB程序运行时出错,怎么改?

各位前辈们,有谁特别熟悉MATLAB软件?帮我看下这个程序,为什么运行的时候,总是提示我这个错误:
Warning: Divide by zero.
> In lllllllll at 17
Warning: Divide by zero.
> In lllllllll at 18
??? Attempted to access G(0,0); index must be a positive integer or logical.
Error in ==> lllllllll at 29
    G(i,i)=G(i,i)+gij/(k^2);


程序如下:
%牛顿——拉夫逊法进行潮流计算
n=input('请输入节点数:n=')
nl=input('请输入支路数:nl=')
isb=input('请输入平衡母线节点号:isb=')
A=input('请输入由支路参数形成的矩阵: A=')
A=zeros(nl,5);
G=zeros(n)
B=zeros(n)
for a=1:nl
i=A(a,1);
j=A(a,2);
r=A(a,3);
x=A(a,4);
k=A(a,5);
z=r*r+x*x;
gij=r/z;
bij=-x/z;
       if(k<0)
          k=abs(k);
      G(i,i)=G(i,i)+gij;
      B(i,i)=B(i,i)+bij+k;
      G(j,j)=G(j,j)+gij;
      B(j,j)=B(j,j)+bij+k;
      G(i,j)=-gij;
      B(i,j)=-bij;
elseif(k==0)
    k=1;
    G(i,i)=G(i,i)+gij/(k^2);
    B(i,i)=B(i,i)+bij/(k^2);
    G(j,j)=G(j,j)+gij;
    B(j,j)=B(j,j)+bij;
    G(i,j)=-gij/k;
    B(i,j)=-bij/k;
elseif(k>0)
    G(i,i)=G(i,i)+gij/(k*k);
    B(i,i)=B(i,i)+bij/(k*k);
      G(j,j)=G(j,j)+gij;
      B(j,j)=B(j,j)+bij;
      G(i,j)=-gij/k;
    B(i,j)=-bij/k;
end
if(i>j)
         G(j,i)=G(i,j);
         B(j,i)=B(i,j);
end
end
for a=1:n
   for b=1:n
      if(a<b)
            G(b,a)=G(a,b);
            B(b,a)=B(a,b);
      end
   end
end
n=input('请输入节点数:n=')
nl=input('请输入支路数:nl=')
isb=input('请输入平衡母线节点号:isb=')
g=0%迭代次数
e=input('请输入各节点参数形成的矩阵: e=')%%%%%%%%%%原始数据输入
f=input('请输入各节点参数形成的矩阵: f=')
Pis=input('请输入各节点参数形成的矩阵: Pis=')
Qis=input('请输入各节点参数形成的矩阵: Qis=')
e=zeros(n,1)
f=zeros(n,1)
Pis=zeros((n-1),1)
Qis=zeros((n-1),1)
max=1
while(max>1.0e-5)
A=input('请输入由支路参数形成的矩阵: A=')
G=zeros(n,n)
B=zeros(n,n)
for a=1:nl
    i=A(a,1)
j=A(a,2)
r=A(a,3)
x=A(a,4)
k=A(a,5)
z=r*r+x*x
gij=r/z
       bij=-x/z
       if(k<0)
          k=abs(k);
      G(i,i)=G(i,i)+gij;
      B(i,i)=B(i,i)+bij+k;
      G(j,j)=G(j,j)+gij;
      B(j,j)=B(j,j)+bij+k;
      G(i,j)=-gij;
            B(i,j)=-bij;
elseif(k==0)
    k=1;
G(i,i)=G(i,i)+gij/(k*k);
    B(i,i)=B(i,i)+bij/(k*k);
      G(j,j)=G(j,j)+gij;
      B(j,j)=B(j,j)+bij;
      G(i,j)=-gij/k;
    B(i,j)=-bij/k;
elseif(k>0)
    G(i,i)=G(i,i)+gij/(k*k);
    B(i,i)=B(i,i)+bij/(k*k);
      G(j,j)=G(j,j)+gij;
      B(j,j)=B(j,j)+bij;
      G(i,j)=-gij/k;
    B(i,j)=-bij/k;
end
if(i>j)
         G(j,i)=G(i,j);
         B(j,i)=B(i,j);
end
end
for a=1:n
   for b=1:n
      if(a<b)
            G(b,a)=G(a,b);
            B(b,a)=B(a,b);
      end
   end
end
这是求节点导纳矩阵。请问,为什么我输进去参数之后,老是提示那个错误??
还有,定义矩阵的时候,定义完之后要不要加;号??到底怎么区分??急死了。
大家快来帮帮我。。。。。。。。。。。。。。。。。。
先谢谢啦。。。。。。。

qiuwei_002 发表于 2008-6-2 17:54:57

能否提供一下参数?

sadever 发表于 2008-6-2 19:14:17

A=input('请输入由支路参数形成的矩阵: A=')" i9 a, L# ^- E) y1 j5 eE/ Y
A=zeros(nl,5);2 m- H+ g% m- c2 Y
这两句是不是有问题,既然赋值了,为什么又给零矩阵。
这两个错误是很简单的错误,一个是除零,一个是矩阵下标为零,你只要给个断点就可以了。

hhusunguoqiang 发表于 2008-6-18 10:43:55

楼上的说的很对,做除法的时候有0元素出现!
页: [1]
查看完整版本: 求助,MATLAB程序运行时出错,怎么改?

招聘斑竹