如何为这种Heaviside步进函数编写MATLAB代码?

时间:2019-05-07 14:35:56

标签: matlab

求解

表示的一维对流方程

u_t + u_x = 0,u = u(x,t)和i.c. u(x,0)= 1 + H(x + 1)+ H(x-1)

使用Lax Wanderoff方法,  我需要编写一个Heaviside阶跃函数H(x),并且当x <= 0时它必须为零,当x> 0时它必须为1。问题是我还需要使用写H(x-t + 1),H(x-t-1)的函数,因为我将通过精确解决方案比较找到的结果:

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

这里,“ x”和“ t”是这样的向量;

x=-5:0.05:5

t=0:0.05:1

我写了如下的Heaviside step函数;但是,我需要没有for循环。

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

我得到“尺寸必须一致”。如果我写错误

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

2 个答案:

答案 0 :(得分:1)

Heavyside函数非常容易在Matlab中编程

Heavyside=@(x) x>= 0;

摆脱尺寸必须同意误差的最简单方法是转置向量之一。这将导致Matlab通过length(x1)来构建length(x2)的矩阵

Heavyside(x-t'+1);

答案 1 :(得分:1)

我想出了一个解决方案。我新的Heaviside功能是;


function H_X= heavisidefunc(x)

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

我遇到的问题是因为我将输出存储为向量,这使事情变得很复杂。 现在,写H(x-t + 1),H(x-t-1)更容易。只需放入“ heavisidefunc(x(i)-t(j)-1)”,并在两个循环中从1循环到x和l的长度。谢谢大家!