首页/文章/ 详情

AI会不会让我失业了?……

6月前浏览8001

摘要

本文讨论了AI在文本和编程领域的应用,特别关注其对码农和写作者的影响。AI工具如文心一言能提供关于湍流模型等主题的详细回答,但生成的编程代码尚不能替代专业程序员的工作。作者通过测试发现,AI生成的Matlab程序在求解二维管道流动问题时存在错误,未正确应用有限体积法、交错网格和SIMPLE算法。文章强调,虽然AI在文本处理方面已有所作为,但在编程领域的应用仍需进一步改进和完善。


正文

今天,我们水一篇文章。

近期AI的势头真是愈演愈烈,其中有个关于码农被AI替代的话题很沉重。笔者虽然不是码农,但是AI对笔者的写作内容一定会有影响。比如,笔者想写一篇关于“湍流模型与使用注意事项”的内容,在文心一言输入这几个关键字,回答结果如下:

湍流模型是一种微分方程类型,用于描述湍流平均量的封闭方程组,它基于雷诺平均运动方程与脉动运动方程,并引入一系列模型假设。在流体动力学模拟中,选择合适的湍流模型至关重要。

首先,湍流模型的选择应根据具体的应用场景来确定。例如,对于流道中存在拐弯的情况,建议使用Realizable-K-epsilon或SST k-omega模型。对于关注壁面上的传热细节或壁面的分离流动的情况,SST k-omega模型是一个好选择。而在进行一般的流动或粗略的湍流计算时,可以先使用标准的KE模型,因为它具有较好的收敛性。

在使用湍流模型时,需要注意以下几点:

网格划分:合适的网格划分是保证模拟结果准确性的重要因素。网格划分应同时考虑到流场的几何复杂度和计算效率。过于精细的网格可能会导致计算资源的浪费,而过于粗糙的网格可能会导致结果的不准确。

模型适用性:不同的湍流模型对不同的流动情况有不同的适用性。因此,在选择湍流模型时,需要充分了解模型的特点和适用范围,以确保其能够准确描述所模拟的流动现象。

边界条件:在CFD计算中,边界条件的设置对模拟结果具有重要影响。流出边界条件通常包括自由流出边界条件和压力边界条件。在设置计算区域时,应确保流出边界设置在流动方向上变量的变化足够小的下游区域,以避免解的发散。

残差波动:残差波动可能由多种原因引起,包括高精度格式、网格太粗、网格质量差、流场本身边界复杂以及模型的不恰当使用等。因此,在模拟过程中,需要密切关注残差的变化,并根据实际情况调整网格划分、模型选择或边界条件设置等参数。

总之,在使用湍流模型进行流体动力学模拟时,需要综合考虑多个因素,并根据实际情况进行调整和优化,以确保模拟结果的准确性和可靠性。

用这个回答去水一篇推文绰绰有余了,可以满足部分初学并有拿来主义倾向的读者。

其实这种文字类的内容还好,更具杀伤力的应该是编程。前期笔者有推送过有限体积法的编程教程(未完待续),如果AI编写的程序能实现对笔者程序的替代,那笔者就得腹吐黑水去一趟台湾省澎湖县找尊者了。

笔者测试了一下文心一言,“编写一段Matlab程序,采用有限体积法计算二维管道流动”,回答结果如下:

二维管道流动的有限体积法计算涉及到更复杂的几何形状和流动方程。以下是一个简化的示例,展示了如何使用有限体积法来模拟二维矩形管道中的定常层流。在这个例子中,我们假设管道长度远大于其宽度,且流体是不可压缩的。

请注意,这个示例主要是为了说明有限体积法的基本思想,并且为了简化计算,我们忽略了一些重要的物理因素,如压力梯度、边界层效应等。在实际应用中,您需要根据具体问题来完善模型。

% 参数定义

L = 10; % 管道长度,单位:m

W = 1; % 管道宽度,单位:m

Re = 1000; % 雷诺数

nu = 1e-6; % 流体粘性系数,单位:m^2/s

U_avg = Re * nu / W; % 平均流速,单位:m/s


% 网格划分

Nx = 50; % x方向网格数量

Ny = 10; % y方向网格数量

dx = L / Nx; % x方向网格间距

dy = W / Ny; % y方向网格间距

[X, Y] = meshgrid(0:dx:L, 0:dy:W); % 创建网格点的坐标矩阵


% 初始化流速和压力

u = zeros(Nx+1, Ny+1); % x方向流速,单位:m/s

v = zeros(Nx+1, Ny+1); % y方向流速,单位:m/s

p = zeros(Nx+1, Ny+1); % 压力,单位:Pa


% 边界条件

u(:, 1) = 0; % 左侧壁面流速为0

u(:, end) = U_avg; % 右侧壁面流速为平均流速

v(1, :) = 0; % 下侧壁面流速为0

v(end, :) = 0; % 上侧壁面流速为0


% 计算中心差分格式的流速梯度

du_dx = (u(2:end-1, 2:end-1) - u(1:end-2, 2:end-1)) ./ dx;

dv_dy = (v(2:end-1, 2:end-1) - v(2:end-1, 1:end-2)) ./ dy;


% 使用简单的代数方程更新流速(忽略对流项和压力梯度)

for i = 2:Nx-1

    for j = 2:Ny-1

        u(i, j) = u(i, j) - nu * dx / Re * (du_dx(i, j) - dv_dy(i, j));

        v(i, j) = v(i, j) - nu * dy / Re * (dv_dy(i, j) + du_dx(i, j));

    end

end


% 可视化结果

figure;

quiver(X(1:end-1, 1:end-1), Y(1:end-1, 1:end-1), u(1:end-1, 1:end-1), v(1:end-1, 1:end-1));

xlabel('x (m)');

ylabel('y (m)');

title('2D Pipe Flow Velocity Field');

colorbar;

在这个程序中,我们首先定义了管道的尺寸、雷诺数和粘性系数,然后划分了网格并初始化了流速和压力。接着,我们设置了边界条件,并计算了流速的梯度。最后,我们使用简单的代数方程更新了每个网格点上的流速,并可视化了流速场。

需要注意的是,这个简化模型没有考虑压力梯度和对流项对流速的影响,这在实际情况中通常是重要的。对于更复杂的流动情况,您可能需要采用更高级的方法,如SIMPLE算法或其他压力-速度耦合算法,来处理压力和流速的耦合关系。此外,对于非定常流动、湍流或其他复杂流动现象,您可能需要采用更复杂的数值方法和模型。

笔者测试了一下这段代码,还好是错误的。首先,其求解方法并不是有限体积法,有限体积法必然涉及到交错网格技术、SIMPLE算法等。其次,本身这段代码也没有求解出结果,而且代码本身还有错误。

笔者对问题进行了内容丰富,“编写一段MATLAB程序,采用有限体积法求解管道流动,采用交错网格,SIMPLE算法”,回答结果如下:

编写一个完整的Matlab程序来求解管道流动问题,采用有限体积法、交错网格以及SIMPLE算法,是一个相对复杂的任务,涉及多个步骤和组件。以下是一个简化的概述和伪代码,用于指导您如何开始编写此类程序。请注意,这只是一个起点,您可能需要根据具体的问题细节进行调整和优化。

1. 问题定义

假设我们有一个二维管道流动问题,需要求解速度(u, v)和压力(p)的分布。

2. 网格生成

首先,生成主网格(用于存储压力和可能的其他标量场)和交错网格(用于存储速度分量)。

matlab

复制

% 假设NX和NY是主网格在x和y方向上的节点数

NX = 100;

NY = 50;


% 生成主网格的坐标

[X, Y] = meshgrid(linspace(0, Lx, NX), linspace(0, Ly, NY));


% 生成交错网格的坐标(例如,u速度位于主网格的东侧和北侧边界)

Xu = X(1:end-1, :);

Yu = Y(:, 1:end-1);

Xv = X(:, 1:end-1);

Yv = Y(1:end-1, :);

3. 初始化变量

初始化速度、压力和其他必要的变量。

matlab

复制

u = zeros(size(Xu));

v = zeros(size(Xv));

p = zeros(NX, NY);


% 边界条件(例如,入口、出口、壁面等)

% ...

4. SIMPLE算法

SIMPLE算法(Semi-Implicit Method for Pressure-Linked Equations)是一个用于求解压力-速度耦合问题的迭代方法。

预测步骤:使用当前的压力场和速度场来预测新的速度场。

修正步骤:通过求解压力方程来修正速度场,以满足连续性方程。

更新步骤:更新压力场和速度场。

迭代:重复上述步骤,直到满足收敛条件。

5. Matlab伪代码

以下是一个简化的伪代码,用于指导您如何实现SIMPLE算法。

matlab

复制

% 设置收敛标准和最大迭代次数

tol = 1e-6;

max_iter = 1000;


for iter = 1:max_iter

    % 预测步骤:使用当前的压力场和速度场来预测新的速度场

    % ...

    

    % 修正步骤:通过求解压力方程来修正速度场

    % 构建压力方程(通常是泊松方程)并求解

    % ...

    

    % 更新步骤:更新压力场和速度场

    % ...

    

    % 检查收敛性

    if converged(tol)

        break;

    end

end


% 可视化结果

% ...

6. 注意事项

在实现SIMPLE算法时,需要特别注意如何处理边界条件。

压力方程的求解通常涉及大型稀疏线性系统的求解,可能需要使用专门的求解器或技术。

收敛性检查是一个重要的步骤,它可以帮助您确定何时停止迭代。

可视化结果对于理解和解释模拟结果非常重要。

7. 额外资源

Matlab官方文档和教程提供了有关网格生成、数组操作、可视化等方面的详细信息。

流体动力学和计算流体力学的教科书通常包含有关有限体积法、交错网格和SIMPLE算法的详细解释和示例。

在线论坛和社区(如Stack Overflow)是寻求帮助和解决问题的好地方。

虽然上述回答并没有给出完整的程序代码,但是程序的构架基本上没问题,这一点也是让人吃惊。笔者相信,不久的将来,AI会给出完整的程序。

或许,留给咱的时间真的不多了……

来源:仿真与工程
湍流MATLABCONVERGE管道
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-04
最近编辑:6月前
余花生
签名征集中
获赞 195粉丝 373文章 307课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈