求解
表示的一维对流方程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);
答案 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的长度。谢谢大家!