Matlab 1D平流

时间:2015-12-17 14:51:57

标签: matlab equation-solving

我正在写一个代码来解决平流方程"它表示给定的属性或物理量如何随时间变化。为此,我表达了这个词:https://gyazo.com/f531cb756ffbd3ec28ab85ea1f09b18d 这是我的一个问题,我不知道如何实现它。 这是我目前的代码:

    %%Our paramatres 

k = 1e-4; 
x = [1 2 2.1 13.9 14 28 28.1 39.9 40 59 69 79 150];
y = [3000 3000 3150 3150 3000 3000 3080 3080 3000 3000 3150 3000 3000];
vx = 0.1; % velocity in x m/s
tmax = 250; %time max
xmin = min(x);
xmax = max(x);
axis([0 150 2990 3160])
plot(x,y,'--')

%% discretization of domain
%
dx = 150;
dt = dx/(5*vx); % delta time is equal delta x * vx
n = tmax / dt ;
m = (xmax - xmin)/dx;
x = linspace(xmin,xmax,m+1); % é igual a x = xmin:dx:xmax
%% Stability condition
%
lambda = k * dt/vx^2;
while lambda > 1/2
    fprintf ('Satisfied\n\n')
    fprintf ('Value of dt is %5.1f and for z is %i \n\n', dt,dx)
    dt = input('New value for dt: ')
    dx = input ('New value for dx: ')
    lambda = k*dt/dx^2;
    n = tmax/dt;
    m = xmax/dx;
    x = linspace(xmin,xmax,m+1);
end
%%Initial conditions and frontier
%
h = zeros(size(x));
h(x>0)=1;
plot(x,h)
xlabel('Distance')
ylabel('Density')
grid on

1 个答案:

答案 0 :(得分:0)

您可以将ode45用于首阶差异eq。 http://www.mathworks.com/help/matlab/ref/ode45.html

或者

使它成为一个简单的线性方程。用矩阵逆乘法\来解决它。

如果方程不可解,则用pinv http://www.mathworks.com/help/matlab/ref/pinv.html计算Moore-Penrose伪逆。