当前位置:文档之家› Matlab实现格子玻尔兹曼方法

Matlab实现格子玻尔兹曼方法

Matlab实现格子玻尔兹曼方法
Matlab实现格子玻尔兹曼方法

Matlab实现格子玻尔兹曼方法

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% cylinder.m: Flow around a cyliner, using LBM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% This program is free software; you can redistribute it and/or

% modify it under the terms of the GNU General Public License

% as published by the Free Software Foundation; either version 2

% of the License, or (at your option) any later version.

% This program is distributed in the hope that it will be useful,

% but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details.

% You should have received a copy of the GNU General Public

% License along with this program; if not, write to the Free

% Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

% Boston, MA 02110-1301, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear

% GENERAL FLOW CONSTANTS

lx = 250;

ly = 51;

obst_x = lx/5+1; % position of the cylinder; (exact

obst_y = ly/2+1; % y-symmetry is avoided)

obst_r = ly/10+1; % radius of the cylinder

uMax = 0.02; % maximum velocity of Poiseuille inflow

Re = 100; % Reynolds number

nu = uMax * 2.*obst_r / Re; % kinematic viscosity

omega = 1. / (3*nu+1./2.); % relaxation parameter

maxT = 400000; % total number of iterations

tPlot = 5; % cycles

% D2Q9 LATTICE CONSTANTS

t = [4/9, 1/9,1/9,1/9,1/9, 1/36,1/36,1/36,1/36];

cx = [ 0, 1, 0, -1, 0, 1, -1, -1, 1];

cy = [ 0, 0, 1, 0, -1, 1, 1, -1, -1];

opp = [ 1, 4, 5, 2, 3, 8, 9, 6, 7];

col = [2:(ly-1)];

[y,x] = meshgrid(1:ly,1:lx);

obst = (x-obst_x).^2 + (y-obst_y).^2 <= obst_r.^2;

obst(:,[1,ly]) = 1;

bbRegion = find(obst);

% INITIAL CONDITION: (rho=0, u=0) ==> fIn(i) = t(i)

fIn = reshape( t' * ones(1,lx*ly), 9, lx, ly);

% MAIN LOOP (TIME CYCLES)

for cycle = 1:maxT

% MACROSCOPIC VARIABLES

rho = sum(fIn);

ux = reshape ( ...

(cx * reshape(fIn,9,lx*ly)), 1,lx,ly) ./rho;

uy = reshape ( ...

(cy * reshape(fIn,9,lx*ly)), 1,lx,ly) ./rho;

% MACROSCOPIC (DIRICHLET) BOUNDARY CONDITIONS

% Inlet: Poiseuille profile

L = ly-2; y = col-1.5;

ux(:,1,col) = 4 * uMax / (L*L) * (y.*L-y.*y);

uy(:,1,col) = 0;

rho(:,1,col) = 1 ./ (1-ux(:,1,col)) .* ( ...

sum(fIn([1,3,5],1,col)) + ...

2*sum(fIn([4,7,8],1,col)) );

% Outlet: Zero gradient on rho/ux

rho(:,lx,col) = rho(:,lx-1,col);

uy(:,lx,col) = 0;

ux(:,lx,col) = ux(:,lx-1,col);

% COLLISION STEP

for i=1:9

cu = 3*(cx(i)*ux+cy(i)*uy);

fEq(i,:,:) = rho .* t(i) .* ...

( 1 + cu + 1/2*(cu.*cu) ...

- 3/2*(ux.^2+uy.^2) );

fOut(i,:,:) = fIn(i,:,:) - ...

omega .* (fIn(i,:,:)-fEq(i,:,:));

end

% MICROSCOPIC BOUNDARY CONDITIONS

for i=1:9

% Left boundary

fOut(i,1,col) = fEq(i,1,col) + ...

18*t(i)*cx(i)*cy(i)* ( fIn(8,1,col) - ...

fIn(7,1,col)-fEq(8,1,col)+fEq(7,1,col) );

% Right boundary

fOut(i,lx,col) = fEq(i,lx,col) + ...

18*t(i)*cx(i)*cy(i)* ( fIn(6,lx,col) - ...

fIn(9,lx,col)-fEq(6,lx,col)+fEq(9,lx,col) );

% Bounce back region

fOut(i,bbRegion) = fIn(opp(i),bbRegion);

end

% STREAMING STEP

for i=1:9

fIn(i,:,:) = ...

circshift(fOut(i,:,:), [0,cx(i),cy(i)]);

end

% VISUALIZATION

if (mod(cycle,tPlot)==0)

u = reshape(sqrt(ux.^2+uy.^2),lx,ly);

u(bbRegion) = nan;

imagesc(u');

axis equal off; drawnow

end

end

格子Boltzmann

格子Boltzmann 方法模拟C/C 复合材料 颗粒沉积过程 罗思璇 () Particle Deposition Process Simulation in C/C Composites by Lattice-Boltzmann Method Luo Sixuan () Abstract: Lattice Boltzmann method is used here to study the particle deposition process on C/C composites surface. This method considered the boudary condition change during particle deposition. Finally, the deposition pattern is obtained. Keywords: LB Method; flow-particle coupling; C/C composites; deposition 摘要:本文使用格子Boltzmann 方法研究了固体火箭发动机中C/C 复合材料表面上颗粒的沉积模态。该方法考虑了沉积过程中边界形貌的变化对流场的影响,最终得到了颗粒在碳纤维表面的沉积形态。 关键词:LB 方法;流固耦合;C/C 复合材料;沉积 0 引言 C/C 复合材料是目前新材料领域重点研究和开发的一种新型超高温热结构材料,具有密度小,比强度大、热膨胀系数低、热导率高等特点,是理想的航空航天高温材料[1, 2]。 C/C 复合材料在工作过程中其表面流过的工质为高温燃气。高温燃气中通常带有燃烧产生的固体颗粒,如选用较高比冲的含铝推进剂时会产生一定量的凝聚相(Al2O3颗粒)。固体颗粒在C/C 复合材料表面的沉积、冲刷及烧蚀会造成材料内型面的破坏,甚至影响气动性能。 本文使用格子Boltzmann 方法模拟C/C 复合材料中碳纤维上颗粒沉积过程及形态。 1模拟流场的格子Boltzmann 模型 格子Boltzmann 方法是近二十年来刚发展起来的,一种以“半晶格分离法”为处理方式的新型热量逐级传递数值方法,最初是在研究电磁场中的流动现象时被提出的,并且该方法可以确定流体域、固体域和温度场在边界处的连续性,十分适合针对复杂几何形状流固耦合传热问题的数值分析。与传统的经典CFD 方法相比,格子波尔兹曼算法具有很多优点。因而近年来受到国内外学者的广泛关注,并迅速在气固两相流和传热等研究领域得到应用。 格子Boltzmann 方法将流体抽象为微观的虚拟颗粒,通过这些颗粒在规则的网格点上进行碰撞和迁移来达到模拟流场的目的。分布函数f i (x ,t )表示t 时刻,x 网格点上,速度为c i 流体颗粒的概率密度,流场的宏观量通过对分布函数进行统计而得到。本文使用D3Q15模型模拟流场,流体宏观密度ρ和动量ρu 计算如下: 10 Q i i f ρ-==∑,1 Q i i i f ρ-==∑u c (1) 本文使用BGK 碰撞算子[3],流场演化方程为: eq (,)(,)[(,)(,)]i i i i i f x t t t f x t f x t f x t τ+??+?-=-c (2) 其中?t 为时间步长,τ为无量纲松弛时间,eq i f 为平衡态分布函数,在D2Q9模型中如下计算:

《应用计算方法教程》matlab作业二

6-1 试验目的计算特征值,实现算法 试验容:随机产生一个10阶整数矩阵,各数均在-5和5之间。 (1) 用MATLAB 函数“eig ”求矩阵全部特征值。 (2) 用幂法求A 的主特征值及对应的特征向量。 (3) 用基本QR 算法求全部特征值(可用MATLAB 函数“qr ”实现矩阵的QR 分解)。 原理 幂法:设矩阵A 的特征值为12n ||>||||λλλ≥???≥并设A 有完全的特征向量系12,,,n χχχ???(它们线性无关),则对任意一个非零向量0n V R ∈所构造的向量序列1k k V AV -=有11()lim ()k j k k j V V λ→∞ -=, 其中()k j V 表示向量的第j 个分量。 为避免逐次迭代向量k V 不为零的分量变得很大(1||1λ>时)或很小(1||1λ<时),将每一步的k V 按其模最大的元素进行归一化。具体过程如下: 选择初始向量0V ,令1max(),,,1k k k k k k k V m V U V AU k m +===≥,当k 充分大时1111,max()max() k k U V χλχ+≈ ≈。 QR 法求全部特征值: 111 11222 111 ,1,2,3,k k k k k A A Q R R Q A Q R k R Q A Q R +++==????==??=???? ??????==?? 由于此题的矩阵是10阶的,上述算法计算时间过长,考虑采用改进算法——移位加速。迭 代格式如下: 1 k k k k k k k k A q I Q R A R Q q I +-=?? =+? 计算k A 右下角的二阶矩阵() () 1,1 1,() (),1 ,k k n n n n k k n n n n a a a a ----?? ? ??? 的特征值()()1,k k n n λλ-,当()()1,k k n n λλ-为实数时,选k q 为()()1,k k n n λλ-中最接近(),k n n a 的。 程序

Matlab实现格子玻尔兹曼方法

Matlab实现格子玻尔兹曼方法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cylinder.m: Flow around a cyliner, using LBM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % You should have received a copy of the GNU General Public % License along with this program; if not, write to the Free % Software Foundation, Inc., 51 Franklin Street, Fifth Floor, % Boston, MA 02110-1301, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear % GENERAL FLOW CONSTANTS lx = 250; ly = 51; obst_x = lx/5+1; % position of the cylinder; (exact obst_y = ly/2+1; % y-symmetry is avoided) obst_r = ly/10+1; % radius of the cylinder uMax = 0.02; % maximum velocity of Poiseuille inflow Re = 100; % Reynolds number nu = uMax * 2.*obst_r / Re; % kinematic viscosity omega = 1. / (3*nu+1./2.); % relaxation parameter maxT = 400000; % total number of iterations tPlot = 5; % cycles % D2Q9 LATTICE CONSTANTS t = [4/9, 1/9,1/9,1/9,1/9, 1/36,1/36,1/36,1/36]; cx = [ 0, 1, 0, -1, 0, 1, -1, -1, 1]; cy = [ 0, 0, 1, 0, -1, 1, 1, -1, -1]; opp = [ 1, 4, 5, 2, 3, 8, 9, 6, 7]; col = [2:(ly-1)]; [y,x] = meshgrid(1:ly,1:lx); obst = (x-obst_x).^2 + (y-obst_y).^2 <= obst_r.^2; obst(:,[1,ly]) = 1;

0.618法的matlab实现

实验报告 实验题目: 0.618法的MATLAB实现学生姓名: 学号: 实验时间: 2013-5-13

一.实验名称: 0.618法求解单峰函数极小点 二.实验目的及要求: 1. 了解并熟悉0.618法的方法原理, 以及它的MATLAB 实现. 2. 运用0.618法解单峰函数的极小点. 三.实验内容: 1. 0.618法方法原理: 定理: 设f 是区间],[b a 上的单峰函数, ] ,[ ,)2()1(b a x x ∈, 且)2()1(x x <. 如果)()()2()1(x f x f >, 则对每一个],[)1(x a x ∈, 有)()()2(x f x f >; 如果)()()2()1(x f x f ≤, 则对每一个] ,[) 2(b x x ∈, 有)()()1(x f x f ≥. 根据上述定理, 只需选择两个试探点, 就可将包含极小点的区间缩短. 事实上, 必有 如果)()()2()1(x f x f >, 则],[)1(b x x ∈; 如果)()() 2()1(x f x f ≤, 则][)2(x a x ,∈. 0.618 法的基本思想是, 根据上述定理, 通过取试探点使包含极小点的区间(不确定区间)不断缩短, 当区间长度小到一定程度时, 区间上各点的函数值均接近极小值, 因此任意一点都可作为极小点的近似. 0.618 法计算试探点的公式: ). (618.0),(382.0k k k k k k k k a b a a b a -+=-+=μλ 2. 0.618法的算法步骤: ①置初始区间],[11b a 及精度要求0>L , 计算试探点1λ和1μ, 计算函数值)(1λf 和)(1μf . 计算公式是 ).(618.0 ),(382.011111111a b a a b a -+=-+=μλ 令1=k . ②若L a b k k <-, 则停止计算. 否则, 当)()(k k f f μλ>时, 转步骤③; 当)()(k k f f μλ≤时, 转步骤④. ③置k k a λ=+1, k k b b =+1, k k μλ=+1,)(618.01111++++-+=k k k k a b a μ, 计算函数值)(1+k f μ, 转步骤⑤.

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

小学科学案例用数格子方法“比较叶的大小”教学一得

描*数*算 ——用数格子方法“比较叶的大小”教学一得 比较叶的大小是一个非常有趣、有意义的活动。小朋友常常会用到数格子的方法比较叶的大小,从而经历了简单的大小比较观察和测量过程。 笔者在备课时,觉得这种方法比较简单,而且课本中又有这种方法的介绍并配有插图,因此没有多加思考。教学这一环节时,当学生大致描述了操作步骤后,我就发给每个学生一张事先印好的方格纸,让学生独立来完成。没想到很多小朋友遇到了困难。有些小朋友拿着不平整的叶子无从着手,按住了树叶的这边,翘起了那头,急得满脸通红,描下来的叶子轮廓弯弯扭扭很不准确;有些小朋友因为格子太多数了不知从那里数起;有些小朋友好不容易数到一百八十,一不留神忘记了,又得重数;还有些看着描好的叶子轮廓不知不完整的格子怎么处理,只好坐在那里发呆。教室里乱得一团糟,教学效果可想而知。 出现这样的教学现象和效果,真出乎我的意料。课后,我对学生出现的问题进行了仔细的分析、归类: 1、叶子不平整,轮廓描不出。 运用数格子的方法时,小朋友必须先把叶子轮廓描在格子上,如果叶子不平整,学生就很难完成这个看似简单易操作的任务。 2、所占格子多而数不清。 我发给他们的方格纸里的格子多而小,准备了小叶子的学生,容易操作,很快完成了,而喜欢大叶子的学生就麻烦了,他们的叶子占的格子有的有一百多格,有的甚至两百多格,密密麻麻,眼睛都看花了。 3、格子不完整计算有困难。 叶子轮廓中会出现许多不完整的格子,这些格子合计起来要占不少的面积,处理这些格子有困难。 “如果这些问题让我自己来解决,我行吗?”我这样反问自己,发现自己也是一片茫然。连老师都有困难完成的事情,学生怎能独立完成呢?更何况他们还是三年级刚接触科学课的小朋友。 那么,如何能较好地处理这些问题?我一时找不到较好的处理办法。后来,我作出一个大胆的设想。“到课堂上让小朋友来讨论这些问题,我到时因势利导可能会有意外的收获。”带着这样的想法,我在平行班三(2)班教学这一环节时,改变了做法。 当学生提出用数格子的方法并描述了操作过程以后。我让学生小组讨论“要是叶子不平整你们准备怎么描轮廓?”想不到学生很快想出了办法,更令我佩服的是他们还想出了三种简便的方法。 方法整理如下: 一、叶子反扣法 由于新鲜的叶子不平整,把叶子反扣在格子上,叶子的边缘就能紧紧贴在格子上,小朋友沿着边缘描下叶子轮廓不成问题。 二、轮廓拓印法(一) 用水彩笔在叶子的边缘上涂一圈颜料,把叶子的轮廓拓印在格子上。 三、轮廓拓印法(二)

作文格子制作方法

作文格子制作方法 有时候自己给学生出语文试卷,需要作文格子时,不熟悉制作方法,又没有现成的,很是伤脑筋。特别是不同版本的Word,有时候还连不了网,以及一页试卷有一般是试题,紧接着是半张作文纸等等情况;面对各种情况,在多方学习之后,特总结制作方法如下:另外附做成的作文格子一张,供需要的同行使用。 一般Word2003的稍微麻烦些,由于版本原因,可能没有“稿纸”这一项,有的使用“新建文档---稿纸导向之类的方法做”,但我觉得还是直接安装个“稿纸加载项”好用些。 具体Word2003的版本可以如下操作: 可以打开网页 https://www.doczj.com/doc/488175641.html,/downloads/zh-cn/confirmation.aspx?displaylan g=zh-cn&FamilyID=6730ff58-875d-4772-a3b3-3895de9c0b2f 先下载一个Word的加载项-稿纸,GenkoSetup_CHS.msi这个文件仅仅504KB,下载后,双击GenkoSetup_CHS.msi进行安装。安装完毕后,启动Word,在格式菜单中你会发现一个新的菜单“稿纸设置”,其他的自己按需要设置就行了。如果还想做的更好些,比如每一百字标注一次之类的,可以深入学习一下“稿纸功能”。 如果是Word2007就好办多了,此版本增加了这个功能,只要找到对应工具可以直接应用。所以2007版本的只是稍微提一下就可以了。 Word 2007的版本具体操作如下: 1、打开Word2007; 2、点击“页面布局”选项; 3、找到“稿纸”的“稿纸设置”功能区并单击; 4、在“格式”那个下拉菜单里选择“方格式稿纸”,其他的自己按需要设置就可以了。 但目前我们很多学校还有比较多的是2003版本,所以重点是希望交流一下2003的制作方法;当让还有就是直接插入表格,再设置,这样可以做好,但工作量太大了。下面还附了一张做好了的作文纸。

lbm波尔兹曼算法

波尔兹曼方法基本原理 格子Boltzmann 方法是使用简单的微观模型来模拟流体的宏观行为的一种新的方法。格子Boltzmann 方法是建立在微观粒子运动论基础上的数值计算方法。其求解过程一般需要通过编程来实现! 一般来说研究流体的行为有两种方法:一种是从宏观的角度出发,假设流体连续分布于整个流场,注入密度、速度、压力等物理量均是时间可空间的足够光滑的函数。另一种是从微观的角度,从非平衡统计力学的观点出发,假设流体是由大量的微观的例子组成,这些例子遵守力学定律,同时服从统计定律,运用统计的方法来讨论流体的宏观性质。 然而流体是由大量的粒子组成的,当我们从宏观的角度研究流体行为的时候,并没有涉及到单个粒子的行为。通常我们所感兴趣的事代表某个点的宏观量,例如密度、速度、压力。根据连续性假设我们可以推导出N-S 方程,并且利用数学上的微积分知识来求解,然而由于N-S 方程是高度非线性化的偏微分方程,仅仅一些具有简单变界或者比较严格物理闲着的现象才能够得到理论分析界,如果从微观的角度了研究单个粒子的真是行为,对于一个包含大量例子的系统来说粒子的运动方程往往是得不到解的。统计学可以考虑整个系统所有的状态以及处理这个状态的概率来解决这些困难,对于稀薄气体所得到的就是Boltzmann 方程,但是得到的方程还不够,我们还要借助于统计方法得到流体的宏观性质,这就要求解Boltzmann 方程,然而Boltzmann 方程是一非线性微分方程,一般情况下严格求解也是非常困难的。 格子气方法是近年来发展起来的模拟流体力学以及其他系统的比较新的方法,格子气自动机模拟流场,就是将流体及其存在的时间和空间完全离散,给出离散的流体粒子之间相互作用以及迁移的规则。流体只存在于空间网格上,用一系列布尔变量,.....,2,1)(,(b i t x n i =来描述在时刻t 位于x 处节点的每一个速度方向是否有粒子存在,其中b 表示每一个节点的速度方向的数目,粒子在每一个时间步长的演化包括两部分:()a 迁移,粒子沿它的速度方向向距离最近的节点运动;()b 碰撞,当不同的粒子同时到达某个节点时,按照一定的碰撞规则发生碰撞并改变运动的方向,格子气模型具有两重 意义: ()a 尽可能建立一个简单的模型是指能够用来模拟一个有大量粒子组成的系统;()b 反映粒子真实碰撞的本质,这样经过长时间我们可以获得流体的宏观特性。 粒子的演化过程能够用来模拟宏观的流体过程是基于下列事实,即流体的宏观特性是系统内大量粒子整体行为的结果。分子之间的相互作用可以改变流体的传输特性,比如粘度,但是并不改变宏观方程的基本形式。 格子气的HPP 模型与FPH 模型 HPP 模型将流体存在的空间划分为间距为单位长度的正方形网格,将流体想象成许多有质量没有体积的微小粒子组成,在同一时刻同一网格节点上,每一个速度方向最多允许存在一个粒子,每个粒子可以向四个方向的其中之一运动,并且遵守以下碰撞准则:当且仅当只有两个粒子沿相反方向达到某节点时(对头碰撞),它们沿另外的两个方向离开该节点,其他情形则直接穿透,PHP 模型则是将流场划分为间距为单位长度的正三角网格,并且增加了相应的碰撞准则。 格子气的微观方程 为简单起见,以HPP 模型为例,用()x ,t n i 代表在时刻t 位置x 处的节点上第i 个方向的粒子数,则整个布尔场的更新可以写成 ()()()()231312,1++++++-Λ-ΛΛ-Λ-ΛΛ-Λ=++i i i i i i i i i i i n n n n n n n n n e x t n ν

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的MatIab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。 具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1 ?最小化函数

2.方程求解函数 3.最小—乘(曲线拟合)函数

4?实用函数 5 ?大型方法的演示函数 6.中型方法的演示函数 9.1.3参数设置 利用OPtimSet函数,可以创建和编辑参数结构;利用OPtimget函数,可以获得o PtiOns优化参数。 ? OPtimget 函数 功能:获得OPtiOns优化参数。 语法:

Matlab实现玻尔兹曼晶格模拟

Matlab实现格子玻尔兹曼方法(Lattice Boltzmann Method,LBM)模拟clear % GENERAL FLOW CONSTANTS lx = 250; ly = 51; obst_x = lx/5+1; % position of the cylinder; (exact obst_y = ly/2+1; % y-symmetry is avoided) obst_r = ly/10+1; % radius of the cylinder uMax = 0.02; % maximum velocity of Poiseuille inflow Re = 100; % Reynolds number nu = uMax * 2.*obst_r / Re; % kinematic viscosity omega = 1. / (3*nu+1./2.); % relaxation parameter maxT = 400000; % total number of iterations tPlot = 5; % cycles % D2Q9 LATTICE CONSTANTS t = [4/9, 1/9,1/9,1/9,1/9, 1/36,1/36,1/36,1/36]; cx = [ 0, 1, 0, -1, 0, 1, -1, -1, 1]; cy = [ 0, 0, 1, 0, -1, 1, 1, -1, -1]; opp = [ 1, 4, 5, 2, 3, 8, 9, 6, 7]; col = [2:(ly-1)]; [y,x] = meshgrid(1:ly,1:lx); obst = (x-obst_x).^2 + (y-obst_y).^2 <= obst_r.^2; obst(:,[1,ly]) = 1; bbRegion = find(obst); % INITIAL CONDITION: (rho=0, u=0) ==> fIn(i) = t(i) fIn = reshape( t' * ones(1,lx*ly), 9, lx, ly); % MAIN LOOP (TIME CYCLES) for cycle = 1:maxT % MACROSCOPIC VARIABLES rho = sum(fIn); ux = reshape ( ... (cx * reshape(fIn,9,lx*ly)), 1,lx,ly) ./rho; uy = reshape ( ... (cy * reshape(fIn,9,lx*ly)), 1,lx,ly) ./rho; % MACROSCOPIC (DIRICHLET) BOUNDARY CONDITIONS

(整理)matlab16常用计算方法.

常用计算方法 1.超越方程的求解 一超越方程为 x (2ln x – 3) -100 = 0 求超越方程的解。 [算法]方法一:用迭代算法。将方程改为 01002ln()3 x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。 [程序]P1_1abs.m 如下。 %超越方程的迭代算法 clear %清除变量 x0=30; %初始值 xx=[]; %空向量 while 1 %无限循环 x=100/(2*log(x0)-3); %迭代运算 xx=[xx,x]; %连接结果 if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环 x0=x; %替换初值 end %结束循环 figure %创建图形窗口 plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接 grid on %加网格 fs=16; %字体大小 title('超越方程的迭代折线','fontsize',fs)%标题 xlabel('\itn','fontsize',fs) %x 标签 ylabel('\itx','fontsize',fs) %y 标签 text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果 [图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。 [算法]方法二:用求零函数和求解函数。将方程改为函数 100()2ln()3f x x x =-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是 x = fzero(f,x0) 其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是 x = fzero(f,[x1,x2])

[设计]罚函数法MATLAB程序

[设计]罚函数法MATLAB程序 一、进退法、0.618法、Powell法、罚函数法的Matlab程序设计罚函数法(通用) function y=ff(x,k) y=-17.86*0.42*x(1)/(0.8+0.42*x(1))*(1-exp(- 2*(0.8+0.42*x(1))/3))*exp(-1.6)*x(2)-22. 99*x(1)/(0.8+x(1))*(1-exp(-2*(0.8+x(1))/3))*x(3)+k*(x(2)- (1.22*10^2*(9517.8*exp(-1 .6-2*0.42*x(1)/3)*x(2)+19035.6*exp(- 2*x(1)/3)*x(3)))/(1.22*10^2+9517.8*exp(-1.6-2 *0.42*x(1)/3)*x(2)+19035.6*exp(-2*x(1)/3)*x(3)))^2+k*(x(3)-exp(-0.8-2*x(1)/3)*x(3) -exp(-2.4-2*0.42*x(1)/3)*x(2))^2; % 主函数,参数包括未知数的个数n,惩罚因子q,惩罚因子增长系数k,初值x0,以及允许的误差r function G=FHS(x0,q,k,n,r,h,a) l=1; while (l) x=powell(x0,n,q,r(1),h,a); %调用powell函数 g(1)=ff1(x),g(2)=ff2(x) . . . g(p)=ffp(x); %调用不等式约束函数,将其值 %存入数组g h(1)=hh1(x),h(2)=hh2(x) . . . h(t)=hht(x); %调用等式约束函数,将其值%存入数组h for i=1:p

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

格子玻尔兹曼方法(LBM)及其在微通道绕流中的应用

2019年第19卷第1期 编辑李文波 安全数值模拟专栏 格子玻尔兹曼方法(LBM)及其在 微通道绕流中的应用 冯俊杰,孙冰,姜杰,徐伟,石宁 (中国石化青岛安全工程研究院化学品安全控制国家重点实验室,山东青岛266071 ) 摘要:卜绍了格子玻尔兹曼方法基本理论 与计算方法,并建立了D2Q9计算模型,对宏观尺 度及微通道中的非稳态绕流进行了数值模拟,得 到了绕流过程的速度分布和涡量分布等信息,对 流场结构、固体阻力、尾涡脱落等变化规律进行了 分析。结果表明,格子玻尔兹曼方法以其计算稳 定、效率高等优势能够应用于微反应器领域的数值 模拟;同等液相停留时间条件下,微反应器中的圆柱 绕流湍动程度明显降低,未形成周期性涡流,流动更 加均勾稳定,有助于实现化学反应的精确控制。 关键词:(LBM)微反应器通 0 前言 微反应器在提高反应过程安全性、缩短反应 间、提高转化率、灵活生 面具有独特的优势,实现微通道 的精确测定和控制是微反应器发挥诸多优势的保障和广泛应用的基础[1]。由于微通道内的 具有尺度小、多尺度、相界面与复杂的特点,传统的计 体力学(CFD)方作为宏观模 在着诸多 ,而格子玻尔兹曼方法(lattice Boltzmann method,LBM)突破 了计 的框架, 离散模 发,通群的碰撞和迁移代 的体模型,更接近 的微观本质,在微流控领域具有明 显的优势[—3]。 格子玻尔兹曼 的体离散 为在网格 的介观 ,通过计 的碰 撞和迁移规律得到 布函数,进而统计计算到宏观变量如压力、速度 布规律,创造性地了模 体 的模 离散模型 的转变[]。LBM平 计物理 学的Boltzmann方程,因而能成为联系微观 尺 度与宏观尺度之间的 [5_6]。的C FD方法 宏观的 ,而难以计:些 不符合 者难以用宏观方程描述的 系统,对于这些体系往往 借助微观的 '动 力学 体动理论来进行描述[]。对 力 学来说必须同时跟踪大量 的运动,实际求解 的计算量 大。在这 , 论和概率统计力学的LBM就成为 有 法,其具有更高的计算效率,并且容易 行计 收稿日期=2018-07-16 作者简介:I俊杰,博士,工程师,2016年毕业于 北京化工大学化学工程与技术专业,现于中国 石化青岛安全工程研究院从事本质安全化技 术、反应器工程等方面工作。 SAFETY HEALTH & ENVIRONMENT U7

龙格库塔方法matlab实现

龙格库塔方法matlab实现~ function ff=rk(yy,x0,y0,h,a,b)%yy为y的导函数,x0,y0,为初值,h为步长,a,b为区间 c=(b-a)/h+1;i1=1; %c为迭代步数;i1为迭代步数累加值 y=y0;z=zeros(c,6); %z生成c行,5列的零矩阵存放结果; %每行存放c次迭代结果,每列分别存放k1~k4及y的结果 for x=a:h:b if i1<=c k1=feval(yy,x,y); k2=feval(yy,x+h/2,y+(h*k1)/2); k3=feval(yy,x+h/2,y+(h*k2)/2); k4=feval(yy,x+h,y+h*k3); y=y+(h/6)*(k1+2*k2+2*k3+k4); z(i1,1)=x;z(i1,2)=k1;z(i1,3)=k2;z(i1,4)=k3;z(i1,5)=k4;z(i1,6)=y; i1=i1+1; end end fprintf(‘结果矩阵,第一列为x(n),第二列~第五列为k1~k4,第六列为y(n+1)的结果') z %在命令框输入下列语句 %yy=inline('x+y'); %>> rk(yy,0,1,0.2,0,1) %将得到结果 %结果矩阵,第一列为x(n),第二列~第五列为k1~k4第六列为y(n+1)的结果 %z = % 0 1.0000 1.2000 1.2200 1.4440 1.2428 % 0.2000 1.4428 1.6871 1.7115 1.9851 1.5836 % 0.4000 1.9836 2.2820 2.3118 2.6460 2.0442 % 0.6000 2.6442 3.0086 3.0451 3.4532 2.6510 % 0.8000 3.4510 3.8961 3.9407 4.4392 3.4365 % 1.0000 4.4365 4.9802 5.0345 5.6434 4.4401

(完整版)纵横向拉开档次法的MATLAB实现

简介:本文档为《纵横向拉开档次法的MATLAB实现》,可适用于工程科技领域,主题内容包含globalxystdszxystdxy定义全局变量loadshuju原始数据xystd=zscore(shuju)数据无量纲处理xystdrow,符等。 global xystdsz xystd x y %定义全局变量 load shuju %原始数据 xystd= zscore (shuju); %数据无量纲处理 [xystdrow,xystdcol]=size(xystd); %----------区域知识创造能力评价---------- for tt=1:xystdcol xystdsz{tt}(:,:)=xystd{tt}(:,1:10); %提取区域知识创造能力指标无量纲值 end [xystdszrow,xystdszcol]=size(xystdsz); [xyrow,xycol]=size(xystdsz{1}); w0=zeros(1,xycol); for i=1:xycol w0(1,i)=1/xycol; % 优化初始值 end Aeq=[]; beq=[]; lb=zeros(1,xycol);ub=ones(1,xycol); %zeros生成零矩阵;ones生成全1阵。 options =optimset('largescale','off'); %优化函数,largescale大规模算法 [w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options ); %优化求权重;fmincon用来求解非线性多元函数最小值。 wqz1=w./sum(w); %权重归一化 for tt=1:xystdszcol z{tt}(:,1)=xystd{tt}(:,1:10)*wqz1'; % 求评价值 pxacz(:,tt)=px(z{tt}(:,1)) ; % 对评价值排序 end clear w0 w lb ub faval ; clear global xystdsz; %--------区域知识流动能力评价------------ for tt=1:xystdszcol xystdsz{tt}(:,:)=xystd{tt}(:,11:16); %提取区域知识流动能力指标无量纲值 end global xystdsz; [xystdszrow,xystdszcol]=size(xystdsz); [xyrow,xycol]=size(xystdsz{1}); w0=zeros(1,xycol); for i=1:xycol w0(1,i)=1/xycol; % 优化w初始值 end Aeq=[]; beq=[]; lb=zeros(1,xycol);ub=ones(1,xycol); options =optimset('largescale','off'); [w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options );

波前法及matlab实现

有限元二维热传导波前法MATLAB程序 ?二维热传导有限元 ?使用高斯消去法解线性方程组的二维热传导有限元程序 ?波前法的基本概念与算法 ?使用波前法解线性方程组的二维热传导有限元程序 ?消元过程 ?波前法与高斯消去法的效率之比较 ?小结:波前法的过去、现在和未来 波前法是求解线性方程组的一种方法,广泛用于有限元程序。它最初由英国人(?)B.M. Irons于1970在“国际工程计算方法杂志”上发表。30多年来,波前法有了不少变种。本文所用算法,采于法国人Pascal JOLY所著《Mise en Oeuvre de la Méthode des Eléments Finis》。这本书是我1993年在比利时一家书店买的,书中有一节"波前法",六页纸,解释了基本概念和算法,但没有程序,也没有细节讨论。我曾花了两个半天的时间,在网上寻找波前法程序,或更详细的资料,没有找到(需要花钱才能看的文献不算)。倒是看到不少中国人,也在寻找。 一些人说,波前法程序太难懂了。 通过自己编写程序,我同意这些人的说法,确实难。我还真很少编如此耗费脑力的程序。完工之后,我曾对朋友老王说,有了算法,编程序还这么难,当初想出 算法的人,真是了不起。 现将我对波前法的理解和编程体会解说如下,供感兴趣的网友参考,也为填补网 络上波前法空白。 二维热传导有限元 波前法和有限元密不可分。因而,在编写波前法程序之前,必须有个有限元程序。为了简化问题,最好是能解算一个节点上只有一个自由度的问题的有限元程序,而且要尽可能地简单。我手边现有的有限元程序都不符合这个要求。就决定先开发一个解算二维热传导问题的MATLAB有限元程序。 二维热传导问题的微分方程是 其中T 是温度,Kx 和Ky 分别是x 和y 方向上的热传导系数,q 是热源。 对于这样的比较经典的二阶微分方程,如何导出有限元表达式? 这个问题,是有限元的首要问题! 我相信,许许多多学过有限元的人,甚至每天都在用有限元的人,并不真的十分 明了。

相关主题
文本预览
相关文档 最新文档