szwstar 发表于 2009-2-3 17:00

高手帮我看看哪里有问题

% 求解在区域R={(x,y):0≤x≤a,0≤y≤b}内的uxx(x,y)+uyy(x,y)=0的近似解,而且满足条件u(x,0)=f1(x), u(x,b)=f2(x),
%其中0≤x≤a且u(0,y)=f3(y), u(a,y)=f4(y),其中0≤y≤b.设Δx=Δy=h,而且存在整数n和m,使得a=nh,b=mh.
%function U=dirich(f1,f2,f3,f4,a,b,h,tol,max1)
%Input-f1,f2,f3,f4 are boundary functions input as strings
%       -a and b right end points of and
%       -h step size
%       -tol is the tolerance
%Output -U solution matrix
%Initialize parameters and U
function U=dirich(20,180,80,0,4,4,0.5,0.001,10)
n=fix(a/h)+1;
m=fix(b/h)+1;
ave=(a*(feval(f1,0)+feval(f2,0))...
    +b*(feval(f3,0)+feval(f4,0)))/(2*a+2*b);%feval('fun',x)等价于求fun(x)值。
U=ave*ones(n,m);
%Boundary conditions
U(1,1:m)=feval(f3,0:h:(m-1)*h)';
U(n,1:m)=feval(f4,0:h:(m-1)*h)';
U(1:n,1)=feval(f1,0:h:(n-1)*h)';
U(1:n,m)=feval(f3,0:h:(n-1)*h)';
U(1,1)=(U(1,2)+U(2,1))/2;
U(1,m)=(U(1,m-1)+U(2,m))/2;
U(n,1)=(U(n-1,2)+U(n,2))/2;
U(n,m)=(U(n-1,m)+U(n,m-1))/2;
%SOR parameter
w=4/(2+sqrt(4-(cos(pi(n-1))+cos(pi/(m-1)))^2));
%Refine approximations and sweep operator throughout
%the grid
err=1;
cnt=0;
while((err>tol)&(cnt<=max1))
    err=0;
    for j=2:m-1
      for i=2:n-1
            relx=w*(U(i,j+1)+U(i,j-1)+U(i+1,j)+U(i-1,j)-4*U(i,j))/4;
            U(i,j)=U(i,j)+relx;
            if(err<=abs(relx))
                err=abs(relx);
            end
      end
    end
    cnt=cnt+1;
end
U=flipud(U');    %flipud(X) returns X with columns preserved and rows flipped in the up/down direction.


运行后出现

??? Error: File: D:\doctor\programe\self-consistent\dirich.m Line: 13 Column: 19
"identifier" expected, "numeric value" found.

[ 本帖最后由 ChaChing 于 2009-2-4 10:17 编辑 ]

szwstar 发表于 2009-2-4 08:53

怎么没有回啊,恳求各位了,谢谢

ChaChing 发表于 2009-2-4 10:15

回复 楼主 szwstar 的帖子

function使用有误, function U=dirich(20,180,80,0,4,4,0.5,0.001,10)内都已是数值了, 干麽还使用function!?
doc fuction

szwstar 发表于 2009-2-4 15:42

好的,谢谢

ChaChing 发表于 2009-2-4 16:32

先自己试下吧! 有问题再讨论!
页: [1]
查看完整版本: 高手帮我看看哪里有问题