绘制波动方程二维数值解的问题

问题描述

我正在尝试在 MATLAB (R2020a) 中制作二维波动方程的动画。到目前为止,我相信有限差分方法是正确实现的。然而;当我尝试在 matlab 中使用“surf”命令绘制这些值时,它不起作用。 到目前为止,这是我的脚本:

clear
clc
close all
VL = 2;

tMin = 0;
tMax = 30;

xMin = -10;
xMax = 10;

yMin = -10;
yMax = 10;

Nt = 100;
Nx = 100;
Ny = 100;

t = linspace(tMin,tMax,Nt);
x = linspace(xMin,xMax,Nx);
y = linspace(yMin,yMax,Ny);

DeltaT = t(2) - t(1);
DeltaX = x(2) - x(1);
DeltaY = y(2) - y(1);

CFX = ((VL)*(DeltaT/DeltaX))^2;
CFY = ((VL)*(DeltaT/DeltaY))^2;

u = zeros(Nt,Nx,Ny);

[X,Y] = meshgrid(x,y);

u(1,:,:) = Initial(t(1),X,Y);

u(2,Y) + InitialV(t(1),Y);

for i=3:Nt
    for j=1:Nx
        for k=1:Ny
            if(j==1 || j==Nx || k==1 || k==Ny)
                u(i,j,k) = 0;
            else
                u(i,k) = 2*u(i-1,k) - u(i-2,k) + (CFX)*(u(i-1,j+1,k) - 2*u(i-1,k) + u(i-1,j-1,k)) + (CFY)*(u(i-1,k+1) - 2*u(i-1,k-1));
            end           
        end        
    end            
end

函数:Initial 和 initialV 分别是 u(0,x,​​y) 和 ut(0,​​y)。 我相信此代码可用于查找 u 的函数值,但是当我尝试按如下方式绘制结果时:

for i=1:Nt
    figure
    clf
    hold on
    surf(X,Y,u(i,:))
end

我收到一个错误,说 Z 必须是一个矩阵...在我看来,这看起来很奇怪,将 3d 数组切片会产生一个 2d 矩阵。 如何制作一个动画,将 u 显示为 x 和 y 的函数? 提前致谢!非常感谢任何帮助

附言我是这个页面的新手,所以如果我在分享代码时忽略了某些准则,请告诉我,我会调整它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)