简体   繁体   中英

How to write a MATLAB code for this kind of Heaviside step function?

To solve one dimensional advection equation denoted by

u_t+u_x = 0, u=u(x,t), and ic u(x,0)= 1+H(x+1)+H(x-1)

using Lax Wanderoff method, I need to write a Heaviside step function H(x) and it needs to be zero when x <= 0, 1 when x>0 . The problem is I also need to use that function writing H(x-t+1), H(xt-1) as I will compare what I find by the exact solution:

u(x,t) =1 + H(x-t+1) -H(xt-1)

Here, the "x" and "t" are vectors such that;

x=-5:0.05:5

t=0:0.05:1

I wrote the Heaviside step function as the following; however, I need it without the for loop.

L=length(x)

function H_X= heavisidefunc(x,L)
H_X=zeros(1,L);
for i= 1:L
    if x(i)<= 0
        H_X(i)=0;
    else
        H_X(i)=1;
    end
end
end

I get "Dimensions must agree." error if I write

H_X3 = heavisidefunc(x-t+1,L);
H_X4 = heavisidefunc(x-t-1,L);

The Heavyside function is really easy to program in Matlab

Heavyside=@(x) x>= 0;

The easiest way to get rid of the dimensions must agree error is to transpose one of the vectors. This will cause Matlab to construct a matrix of length(x1) by length(x2)

Heavyside(x-t'+1);

I came up with a solution. My new Heaviside function is;


function H_X= heavisidefunc(x)

    if x<= 0
        H_X=0;
    else
        H_X=1;
    end
end

The problem I had was because I was storing the output as a vector and it just complicated things. Now,writing H(x-t+1), H(xt-1) is easier. Just put "heavisidefunc(x(i)-t(j)-1)" and loop from 1 to the length of x and l in two loops. Thanks to everyone!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM