登录论坛

查看完整版本 : [MATLAB基础] 为什么我的计算结果中重复显示某个变量的值?


shoney
2009-08-10, 19:06
下面这个程序是某本参考书上面的(解一维抛物线型偏微分方程),我照着输入到Matlab6.5中,当我在命令窗口中输入ex0903来计算的时候,计算结果中却重复显示M=50,这是什么原因啊?开始以为是代码中误把分号写成了逗号,但是检查了一下,也没有啊。偶是新手,请达人指教!

function [u,x,t]=EF_Euler(A,xf,T,it0,bx0,bxf,M,N)
%解方程 A u_xx = u_t,0<=x<=xf,0<=t<=T
%初始条件:u(x,0)=it0(x)
%边界条件:u(0,t)=bx0(t),u(xf,t)=bxf(t)
%M:x轴的等分段数
%N:t轴的等分段数

dx=xf/M;x=[0:M]*dx;
dt=T/N;t=[0:N]*dt;
for i=1:M+1
u(i,1)=it0(x(i));
end
for n=1:N+1
u([1,M+1],n)=[bx0(t(n));bxf(t(n))];
end
r=A*dt/dx/dx;r1=1-2*r;
if (r>0.5)
disp('r>0.5,unstability');
end
for k=1:N %从k开始
for i=2;M %从i-1开始
u(i,k+1)=r*(u(i+1,k)+u(i-1,k))+r1*u(i,k);
end
end

function ex0903()
%调用函数EF_Euler解热传导方程

A=0.5; %方程系数
it0=inline('sin(pi*x)','x'); %初始条件
bx0=inline('0');bxf=inline('0'); %边界条件
xf=2;M=50;T=0.1;N=100;
[u1,x,t]=EF_Euler(A,xf,T,it0,bx0,bxf,M,N);
figure(1),clf,mesh(t,x,u1)
xlabel('x')
ylabel('y')
zlabel('U')
title('x>0.5')
figure(2),clf,mesh(t,x,u1)
xlabel('x')
ylabel('y')
zlabel('U')
title('x<0.5')

shoney
2009-08-10, 19:25
原来是把下面这条语句里的标点符号搞错了,分号应该是冒号,呵呵
眼神得尖点才能看出来,呵呵

for i=2;M %从i-1开始