这是我到目前为止的代码:
function [u]=example222(xrange,trange,uinit,u0bound,uLbound);
n = length(xrange);
m = length(trange);
u = zeros(n,m); %%%
Dx = (xrange(n)-xrange(1))/(n-1);
Dt = (trange(m)-trange(1))/(m-1);
u(:,1)=uinit';
u(1,:)=u0bound;
u(n,:)=uLbound;
gegu=0.08;
alpha=0;
koefa=(-Dt*gegu/(2*Dx));
koefb=(alpha*Dt/(Dx)^2);
u
% first time step
for i = 2:n-1
u(i,2) = u(i,1)+2*koefa*(u(i+1,1)-u(i-1,1))+(koefb/2)*(u(i-1,1)-2*u(i,1)+u(i+1,1))
end;
% subsequent time steps
for j = 2:m-1
for i = 2:n-1
u(i,j+1)=u(i,j-1)+koefa*(u(i+1,j)-u(i-1,j))+koefb*(u(i-1,j)-2*u(i,j)+u(i+1,j))
end;
end;
______________________________________
x = (0:0.1:1);
t = (0:0.8:8) ;
u0=zeros;uL=zeros;
uinit=1-(10*x-1).^2;
[u]=example222(x,t,uinit,u0,uL);
surf(x,t,u,'EdgeColor','black')
接下来我需要做的是实现uinit = 1-(10 * x-1)的间隔。^ 2
IF x-0.08 * t< 0.2。那么=> uinit = 1-(10 * X-1)^ 2。 别的uinit = 0;
请有人帮助我。我试图用if子句和循环来做它并且无法使它工作。非常感谢帮助。
答案 0 :(得分:0)
有许多方法可以定义分段函数,我的常用方法如下:
uinit = zeros(size(x));
I = x<(0.08*t+0.2); %// Find the indices where x<(0.08*t+0.2)
uinit(I) = 1-(10*x(I)-1).^2;
由于您希望uinit
的所有其他值都为零,因此这种情况比您经常更容易。如果你在另一个地区有另一个功能(比如x^2
),你也可以这样做:
uinit(1-I) = x(1-I).^2;
操作1-I
给出0 I==1
和1 I==0
,因此得到I
的补码。