@@@matlab 写函数中的平面数组的问题◎◎◎
我用“追赶法”也就是消元法写了一个解3点迭代方程的函数func,在主函数里调用。一维没问题,二维遇到个郁闷的问题。
function x=func(a,b,c,d)
[M N]=size(b)
n=20;
for i=1:N*n
a(1,i)=0;
c(M*n,i)=0;
p(1,i)=-c(1,i)/b(1,i);q(1,i)=d(1,i)/b(1,i);
end
for i=1:N*n
for j=2:M*n
p(j,i)=-c(j,i)/(b(j,i)+a(j,i)*p(j-1,i));
q(j,i)=(d(j,i)-a(j,i)*q(j-1,i))/(b(j,i)+a(j,i)*p(j-1,i));
end
end
for i=1:N*n
x(M*n,i)=q(M*n,i);
end
for i=1:N*n
for j=M*n-1:-1:1
x(j,i)=p(j,i)*x(j+1,i)+q(j,i);
end
end
a、b、c、d在主函数里对应的系数都已经赋值好,是(M*n N*n)矩阵。像我这样在程序第7行就会出现错误,提示Attempted to access b(1,2); index out of bounds because size(b)=[1,1].
难道说,matlab以为我func函数里的x、a、b、c、d是一维的?b对应的系数项在主程序里都写好了阿。 是单独在这个调用函数里出问题吗?
下面是没问题的一维调用函数:
function x=func(a,b,c,d)
n=length(d);
a(1)=0;c(n)=0;
p(1)=-c(1)/b(1);q(1)=d(1)/b(1);
for i=2:n
p(i)=-c(i)/(b(i)+a(i)*p(i-1));
q(i)=(d(i)-a(i)*q(i-1))/(b(i)+a(i)*p(i-1));
end
x(n,1)=q(n);
for i=n-1:-1:1
x(i,1)=p(i)*x(i+1,1)+q(i);
end
x=x';
end
|