[英]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.