数学建模美赛集训的时候要用到一个海面模拟,分享一下海面模拟的MATLAB代码

先贴一下结果图:

下面是源代码~~~

function waterwave

n = 64; % grid size

g = 9.8; % gravitational constant

dt = 0.01; % hardwired timestep

dx = 1.0;

dy = 1.0;

nplotstep = 8; % plot interval

ndrops = 5; % maximum number of drops

dropstep = 500; % drop interval

D = droplet(1.5,21); % simulate a water drop

% Initialize graphics

[surfplot,top,start,stop] = initgraphics(n);

% Outer loop, restarts.

while get(stop,'value') == 0

set(start,'value',0)

H = ones(n+2,n+2); U = zeros(n+2,n+2); V = zeros(n+2,n+2);

Hx = zeros(n+1,n+1); Ux = zeros(n+1,n+1); Vx = zeros(n+1,n+1);

Hy = zeros(n+1,n+1); Uy = zeros(n+1,n+1); Vy = zeros(n+1,n+1);

ndrop = ceil(rand*ndrops);

nstep = 0;

% Inner loop, time steps.

while get(start,'value')==0 && get(stop,'value')==0

nstep = nstep + 1;

% Random water drops

if mod(nstep,dropstep) == 0 && nstep <= ndrop*dropstep

w = size(D,1);

i = ceil(rand*(n-w))+(1:w);

j = ceil(rand*(n-w))+(1:w);

H(i,j) = H(i,j) + rand*D;

end

% Reflective boundary conditions

H(:,1) = H(:,2); U(:,1) = U(:,2); V(:,1) = -V(:,2);

H(:,n+2) = H(:,n+1); U(:,n+2) = U(:,n+1); V(:,n+2) = -V(:,n+1);

H(1,:) = H(2,:); U(1,:) = -U(2,:); V(1,:) = V(2,:);

H(n+2,:) = H(n+1,:); U(n+2,:) = -U(n+1,:); V(n+2,:) = V(n+1,:);

% First half step

% x direction

i = 1:n+1;

j = 1:n;

% height

Hx(i,j) = (H(i+1,j+1)+H(i,j+1))/2 - dt/(2*dx)*(U(i+1,j+1)-U(i,j+1));

% x momentum

Ux(i,j) = (U(i+1,j+1)+U(i,j+1))/2 - ...

dt/(2*dx)*((U(i+1,j+1).^2./H(i+1,j+1) + g/2*H(i+1,j+1).^2) - ...

(U(i,j+1).^2./H(i,j+1) + g/2*H(i,j+1).^2));

% y momentum

Vx(i,j) = (V(i+1,j+1)+V(i,j+1))/2 - ...

dt/(2*dx)*((U(i+1,j+1).*V(i+1,j+1)./H(i+1,j+1)) - ...

(U(i,j+1).*V(i,j+1)./H(i,j+1)));

% y direction

i = 1:n;

j = 1:n+1;

% height

Hy(i,j) = (H(i+1,j+1)+H(i+1,j))/2 - dt/(2*dy)*(V(i+1,j+1)-V(i+1,j));

% x momentum

Uy(i,j) = (U(i+1,j+1)+U(i+1,j))/2 - ...

dt/(2*dy)*((V(i+1,j+1).*U(i+1,j+1)./H(i+1,j+1)) - ...

(V(i+1,j).*U(i+1,j)./H(i+1,j)));

% y momentum

Vy(i,j) = (V(i+1,j+1)+V(i+1,j))/2 - ...

dt/(2*dy)*((V(i+1,j+1).^2./H(i+1,j+1) + g/2*H(i+1,j+1).^2) - ...

(V(i+1,j).^2./H(i+1,j) + g/2*H(i+1,j).^2));

% Second half step

i = 2:n+1;

j = 2:n+1;

% height

H(i,j) = H(i,j) - (dt/dx)*(Ux(i,j-1)-Ux(i-1,j-1)) - ...

(dt/dy)*(Vy(i-1,j)-Vy(i-1,j-1));

% x momentum

U(i,j) = U(i,j) - (dt/dx)*((Ux(i,j-1).^2./Hx(i,j-1) + g/2*Hx(i,j-1).^2) - ...

(Ux(i-1,j-1).^2./Hx(i-1,j-1) + g/2*Hx(i-1,j-1).^2)) ...

- (dt/dy)*((Vy(i-1,j).*Uy(i-1,j)./Hy(i-1,j)) - ...

(Vy(i-1,j-1).*Uy(i-1,j-1)./Hy(i-1,j-1)));

% y momentum

V(i,j) = V(i,j) - (dt/dx)*((Ux(i,j-1).*Vx(i,j-1)./Hx(i,j-1)) - ...

(Ux(i-1,j-1).*Vx(i-1,j-1)./Hx(i-1,j-1))) ...

- (dt/dy)*((Vy(i-1,j).^2./Hy(i-1,j) + g/2*Hy(i-1,j).^2) - ...

(Vy(i-1,j-1).^2./Hy(i-1,j-1) + g/2*Hy(i-1,j-1).^2));

% Update plot

if mod(nstep,nplotstep) == 0

C = abs(U(i,j)) + abs(V(i,j)); % Color shows momemtum

t = nstep*dt;

tv = norm(C,'fro');

set(surfplot,'zdata',H(i,j),'cdata',C);

set(top,'string',sprintf('t = %6.2f, tv = %6.2f',t,tv))

drawnow

end

if all(all(isnan(H))), break, end % Unstable, restart

end

end

close(gcf)

% ------------------------------------

function D = droplet(height,width)

% DROPLET 2D Gaussian

% D = droplet(height,width)

[x,y] = ndgrid(-1:(2/(width-1)):1);

D = height*exp(-5*(x.^2+y.^2));

% ------------------------------------

function [surfplot,top,start,stop] = initgraphics(n);

% INITGRAPHICS Initialize graphics for waterwave.

% [surfplot,top,start,stop] = initgraphics(n)

% returns handles to a surface plot, its title, and two uicontrol toggles.

clf

shg

set(gcf,'numbertitle','off','name','Shallow_water')

x = (0:n-1)/(n-1);

surfplot = surf(x,x,ones(n,n),zeros(n,n));

grid off

axis([0 1 0 1 -1 3])

caxis([-1 1])

shading faceted

c = (1:64)'/64;

cyan = [0*c c c];

colormap(cyan)

top = title('Click start');

start = uicontrol('position',[20 20 80 20],'style','toggle','string','start');

stop = uicontrol('position',[120 20 80 20],'style','toggle','string','stop');

PhoenixFD插件流体模拟——UI布局【Dynamics】详解

matlab 海面反射,海面波浪模拟 MATLAB相关推荐

  1. 海面波浪模拟 MATLAB

    数学建模美赛集训的时候要用到一个海面模拟,分享一下海面模拟的MATLAB代码 先贴一下结果图: 下面是源代码~~~ 1 function waterwave 2 3 4 n = 64; % grid ...

  2. Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动

    Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动 目录 输出结果 设计代码 输出结果 基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动 设计代码 %基于Matlab实 ...

  3. matlab高中必修三数学模拟,基于MATLAB的模拟调制实验报告

    <基于MATLAB的模拟调制实验报告>由会员分享,可在线阅读,更多相关<基于MATLAB的模拟调制实验报告(19页珍藏版)>请在金锄头文库上搜索. 1.基于 MATLAB 的模 ...

  4. matlab 高斯函数_光学与matlab:高斯光的模拟

    光学与matlab:高斯光的模拟 高斯光束,自然何为高斯光束?百度了一下,如下所示,"通常情形,激光谐振腔发出的基模辐射场,其横截面的振幅分布遵守高斯函数,故称高斯光束."如果您对 ...

  5. Matlab心电信号的PQRST模拟-实验报告

    心电信号处理算法设计-实验要求 data4 是一段实际采样得到的心电数据, 采样频率为 100Hz, 波形如下图所示.设计相应的算法, 计算心率, 单位为: 次/分钟.可能会用到的知识为数字滤波器的设 ...

  6. 【数字图像处理】模拟Matlab的imresize()写一个你自己的imresize()函数,至少应实现‘nearest’和‘bilinear’两种方法

    作业要求:模拟Matlab的imresize()写一个你自己的imresize()函数,至少应实现'nearest'和'bilinear'两种方法. 首先理论方面主要参考了一下两个网址 https:/ ...

  7. matlab中eacf函数,基于MATLAB的切比雪夫I型模拟低通滤波器设计

    基于MATLAB的切比雪夫I型模拟低通滤波器设计课程设计名称:数字信号处理课程设计专业班级 : 电信0604 学生姓 名 : 学号 : 20064300430 指导教师 : 课程设计时间:2009.6 ...

  8. matlab画一维波动方程,MATLAB编辑一维波动方程的模拟的程序.doc

    MATLAB编辑一维波动方程的模拟的程序 一维波动方程的模拟 程序: function wave_equation() %一维线性齐次波动方程 options={'空间杆长L','空间点数N' ,'时 ...

  9. matlab仿真分形树,使用MATLAB实现随机分形树模拟

    使用MATLAB实现随机分形树模拟 尤鸿霞 (南通纺织职业技术学院,南通,226007) 摘要:阐述了植物模拟的典型方法L-系统及迭代函数系统(IFS)的基本原理.根据这两种方法,利用Matlab软件 ...

最新文章

  1. What?! Python一行代码,能玩这么多童年的游戏?
  2. python【数据结构与算法】剪枝策略
  3. linux的虚拟文件系统VFS
  4. linux下添加用户并赋予root权限
  5. php mysqli new 连接,php mysqli 连接数据库
  6. Circular Dance
  7. SAP Spartacus cx-page-layout 属性运行时的赋值原理, set 是如何被框架调用的?
  8. Intellij IDEA15:建立Scala的Maven项目
  9. C++:fseek( FILE *stream, long offset, int origin )
  10. C#语法之event关键字
  11. java int 指针_如何在Java中使用指针?
  12. Eclipse 解决PHP函数代码不能自动提示问题
  13. 蔚来汽车提交IPO招股书:三年亏百亿,腾讯为大股东
  14. 什么是阿里云服务器系统盘和数据盘?
  15. 2017年c语言试卷及答案,2017年全国计算机c语言试题及答案
  16. Servlet运行原理(Tomcat为例)
  17. 开源的SNMP网管系统LibreNMS
  18. 业务系统+电子签章开放平台,快速构建个性化的电子签署应用
  19. FragmentVisible
  20. 第8章 HDFS HA高可用

热门文章

  1. KiTTY及cnKiTTY配置文件kitty.ini的简单中文注释
  2. [Swift]LeetCode120. 三角形最小路径和 | Triangle
  3. 计算机python指什么_系统学习python-1.1什么是计算机
  4. Python读写zip压缩文件的方法
  5. 詹姆斯高斯林_詹姆斯·高斯林(James Gosling)关于Oracle与谷歌的竞争–“问题始终是互操作性”
  6. 【淘宝代运营】店铺运营实操中,需要掌握的五点
  7. 使用爬虫抓取淘宝商品数据
  8. 四旋翼飞行器2——自己设计四旋翼飞行器的硬件准备和基础知识
  9. 笔记02-java基础语法
  10. 中国互联网量级分化严重:小米将360踢出第二阵营