具有2个区间的matlab parcial方程

时间:2014-03-29 11:31:48

标签: matlab if-statement

这是我到目前为止的代码:

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子句和循环来做它并且无法使它工作。非常感谢帮助。

1 个答案:

答案 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的补码。