【物理应用】基于傅里叶伽辽金谱法二维纳维-斯托克斯附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

​【物理应用】基于傅里叶伽辽金谱法二维纳维-斯托克斯附matlab代码

⛄ 部分代码

function examples

%% customVortices

N=128;

Re=200;

te=50;

w0=customVortices(N);

FGM2DNS=FGM2D_NavierStokes(N,Re,w0,0,te,[]);

FGM2DNS=FGM2DNS.Preprocessing_FGM2D;

FGM2DNS=FGM2DNS.Main_FGM2D(0,1);

%% taylorVortex

N=64;

locx=0;

locy=0;

R=0.3;

Re=1000;

te=10;

w0=taylorVortex(N,locx,locy,R);

w_exact=singleTaylorVortexSol(N,locx,locy,R,Re,te);

dt=0.01;

FGM2DNS=FGM2D_NavierStokes(N,Re,w0,0,te,dt);

FGM2DNS=FGM2DNS.Preprocessing_FGM2D;

close

FGM2DNS=FGM2DNS.Main_FGM2D(0,1);

plot(FGM2DNS.x(N/2+1,N/2+1:end),w0(N/2+1,N/2+1:end))

hold on

plot(FGM2DNS.x(N/2+1,N/2+1:end),w_exact(N/2+1,N/2+1:end),'*',FGM2DNS.x(N/2+1,N/2+1:end),FGM2DNS.w(N/2+1,N/2+1:end))

grid on

xlabel('$$x$$',Interpreter='latex')

ylabel('$$\omega$$',Interpreter='latex')

title("Taylor vortex")

legend('Initial condition','Exact solution','Numerical solution')

%% corotatingVortexPair

locy=[0 0];

Re=1000;

te=3;

N=128;

d=pi/6;

R=[0.2 0.2];

locx=[-d/2 d/2];

w0=taylorVortex(N,locx,locy,R);

FGM2DNS=FGM2D_NavierStokes(N,Re,w0,0,te,[]);

FGM2DNS=FGM2DNS.Preprocessing_FGM2D;

close

FGM2DNS=FGM2DNS.Main_FGM2D(0,1);

contourf(FGM2DNS.x,FGM2DNS.y,FGM2DNS.w,200,'edgecolor','none')

axis equal

colorbar

title("$$R=$$"+R(1)+"$$\quad d=\frac{\pi}{6}$$","Interpreter","latex")

xlabel("Dimensionless $$x$$","Interpreter","latex")

ylabel("Dimensionless $$y$$","Interpreter","latex")

%% kelvinHelmholtzInstability

N=256;

Re=5000;

w0 = twoEqualOppositeMixingLayer(N,19,pi/3);

w0(:,linspace(1,256,6))=w0(:,linspace(1,256,6))*1.1;

FGM2DNS=FGM2D_NavierStokes(N,Re,w0,0,5,[]);

FGM2DNS=FGM2DNS.Preprocessing_FGM2D;

FGM2DNS=FGM2DNS.Main_FGM2D(0,1);

%% periodicArrayOfVortices

locy=[pi/4 pi/4 pi/4 pi/4 pi/4 -pi/4 -pi/4 -pi/4 -pi/4 -pi/4];

locx=[-pi -2*pi/4 0 2*pi/4 pi -pi -2*pi/4 0 2*pi/4 pi];

R=[0.3 0.3 0.3 0.3 0.3 -0.3 -0.3 -0.3 -0.3 -0.3];

Re=100;

N=128;

w0=taylorVortex(N,locx,locy,R);

FGM2DNS=FGM2D_NavierStokes(N,Re,w0,0,30,[]);

FGM2DNS=FGM2DNS.Preprocessing_FGM2D;

FGM2DNS=FGM2DNS.Main_FGM2D(0,1);

return

⛄ 运行结果

⛄ 参考文献

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用MATLAB实现将Bouc-Wen模型在傅里叶基上进行投影的示例代码: ```matlab % 建立Bouc-Wen模型 syms x f = sym('f(x)'); k = sym('k'); n = sym('n'); a = sym('a'); b = sym('b'); c = sym('c'); d = sym('d'); g = sym('g'); h = sym('h'); f(x) = a*(1-k*abs(f(n-1)))*f(x-n)+b*f(n-1)-c*g(n-1)^d*f(n-1)+c*g(n)^d*f(n)+h; % 在傅里叶基上展开Bouc-Wen模型 syms t T = 2*pi; N = 100; % Fourier级数展开的次数 f_t = 0; for n = -N:N c_n = 1/T * int(f*exp(-1i*n*t/T), t, -T/2, T/2); f_t = f_t + c_n * exp(1i*n*t/T); end % 将展开后的Bouc-Wen模型代入Bouc-Wen运动方程中,得到一系列关于傅里叶系数的微分方程 syms c_n c_n_conj f_t_dot = diff(f_t, t); f_t_dot_dot = diff(f_t_dot, t); g_t = f_t_dot_dot + f_t - g; eq = simplify(subs(g_t, f_t, f_t_dot_dot + f_t - c_n*exp(-1i*n*t/T) - c_n_conj*exp(1i*n*t/T))); eq = simplify(eq * exp(-1i*m*t/T)); eq = subs(eq, c_n_conj, conj(c_n)); % 使用伽辽金方法,在傅里叶基上建立一个测试函数空间和一个权函数空间,将微分方程两侧分别乘以测试函数和权函数,并在整个空间上积分 syms w_m psi_m = exp(-1i*m*t/T); phi_n = exp(-1i*n*t/T); a_m = 1/T * int(eq * phi_n * conj(psi_m), t, -T/2, T/2); a_m_conj = conj(a_m); % 将积分后的方程离散化,得到一组关于傅里叶系数的代数方程组 A = sym('A', [2*N+1, 2*N+1]); for m = -N:N for n = -N:N i = m + N + 1; j = n + N + 1; A(i, j) = subs(a_m, [m, n], [m-N-1, n-N-1]); end end b = zeros(2*N+1, 1); b(N+1) = 1; A(N+1, :) = zeros(1, 2*N+1); A(N+1, N+1) = 1; % 使用数值方法求解代数方程组,得到傅里叶系数的解 c = A\b; c(N+1) = 0.5; % 将解代入展开后的Bouc-Wen模型中,得到在傅里叶基上的Bouc-Wen模型 f_t_Fourier = 0; for n = -N:N c_n = c(n+N+1); f_t_Fourier = f_t_Fourier + c_n * exp(1i*n*t/T); end ``` 以上是一个基本的实现,具体根据实际情况做出调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值