繁体   English   中英

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

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

求解由表示的一维对流方程

u_t + u_x = 0,u = u(x,t)和ic 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(xt-1)的函数,因为我将通过精确的解决方案比较找到的结果:

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

在此,“ x”和“ t”是这样的向量:

x=-5:0.05:5

t=0:0.05:1

我编写了Heaviside步骤函数,如下所示: 但是,我需要没有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);

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

Heavyside=@(x) x>= 0;

消除尺寸必须同意误差的最简单方法是转置向量之一。 这将导致Matlab构造一个length(x1)length(x2)的矩阵

Heavyside(x-t'+1);

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


function H_X= heavisidefunc(x)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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