文档库 最新最全的文档下载
当前位置:文档库 › K N N ( k 近 邻 ) 机 器 学 习 算 法 详 解

K N N ( k 近 邻 ) 机 器 学 习 算 法 详 解

K N N ( k 近 邻 ) 机 器 学 习 算 法 详 解
K N N ( k 近 邻 ) 机 器 学 习 算 法 详 解

KNN算法代码详细解释

《机器学习实战》

K-近邻算法采用测量不同特征值之间的距离方法进行分类。适用数据范围:数值型和标称型。

工作原理:存在一个样本数据集(训练样本集),且样本集中每个数据都存在标签,即知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据每个特征与样本集中数据对应的特征进行比较,然后提取样本集中特征最相似(最近邻)的分类标签。一般,只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中的K的出处,通常K是不大于20的整数。最后,选择K个最相似数据在中次数出现最多的分类,作为新数据的分类。

代码及注释:

def classify0(inX, dataSet, labels, k):

dataSetSize = dataSet.shape[0] # 计算矩阵的行数

diffMat = tile(inX, (dataSetSize, 1)) - dataSet # 第一个维度重复1次,第二个维度重复dataSetSize次

sqDiffMat = diffMat ** 2

sqDistances = sqDiffMat.sum(axis=1) # 矩阵的每一行相加

distances = sqDistances ** 0.5

sortedDistIndicies = distances.argsort() # argsort()函数返回的是distances元素从小到大排列后相应元素的索引。如

a=array([2,1,5,3]),a.argsort() 的结果为:[1,0,3,2]

classCount = {} # 分类标签字典标签:标签出现次数

for i in range(k): # 选择距离最小的K个点

voteIlabel = labels[sortedDistIndicies[i]]

classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 #字典的get(key,default)方法返回字典中key对应的值,若key在字典中不存在,则返回default的值

sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) # 排序 sort() 在本地排序,不返回副本;sorted() 返回副本,原始输入不变

return sortedClassCount[0][0]

# iteritems()返回的是一个迭代器

# sorted(iterable, cmp=None, key=None, reverse=False) -- new sorted list

# 第一个参数是可迭代对象,后面的参数都有默认值。cmp,比较的函数,具有两个参数,参数的值从可迭代对象中取,规则为:大于则返回1,小于则返回-1,等于则返回0

# key,用来进行比较的元素,只有一个参数,参数取自可迭代对象,指定可迭代对象中的一个元素来进行排序。itemgetter()用于获取对象指定维的数据,参数为序号

# reverse,排序规则,reverse = True 降序, reverse = False 升序

# 文件数据读取

def file2matrix(filename):

fr = open(filename)

arrayOLines = fr.readlines() # 读取文件所有内容

# .readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for . in . 结构进行处理。另一方面,.readline() 每次只读取一行,

# 通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()

numberOfLines = len(arrayOLines) # 得到文件行数

returnMat = zeros((numberOfLines, 3))

classLabelVector = [] # 分类标签向量

index = 0 # 行索引号

for line in arrayOLines:

line = line.strip()

# s.strip(rm) s为字符串,rm为要删除的字符序列。删除s字符串中开头结尾处rm字符。rm为空时,默认删除空白符(‘’,‘r’,‘t’‘ ’)如a=' 123',a='t123',a='123r' # a.strip()的结果都为123 s.lstrip(rm) 删除s字符串中开头处rm字符 ; s.rstrip(rm) 删除s字符串中结尾处rm字符

listFromLine = line.split('t') # split()将一个字符串分裂成多个字符串组成的列表

returnMat[index, :] = listFromLine[0:3] # 将数据前三列提取出来

classLabelVector.append(listFromLine[-1]) # 将数据最后一列标签提取出来

index += 1

# ?数据归一化处理

def autoNorm(dataSet): # 数据归一化处理

minValues = dataSet.min(0) # 参数0使得函数可以从列中选取最小值,而不是选取当前行的最小值

maxValues = dataSet.max(0)

ranges = maxValues - minValues

normDataSet = zeros(shape(dataSet)) # 归一化结果

m = dataSet.shape[0]

normDataSet = dataSet - tile(minValues, (m, 1))

normDataSet = normDataSet - tile(ranges, (m, 1))

return normDataSet, ranges, minValues

# ?分类器测试

def datingClassTest():

hoRatio = 0.10 # 取10%的数据作为测试集 90%的数据作为训练集 datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')

normMat, ranges, minVals = autoNorm(datingDataMat)

m = normMat.shape[0]

numTestVecs = int(m * hoRatio) # 测试集数据量

errorCount = 0.0

for i in range(numTestVecs):

classifierResult = classify0(normMat[i, :], normMat[numTestVecs:m, :],

datingLabels[numTestVecs:m], 3)

print "分类器结果:%d, 实际值 :%d"

% (int(classifierResult), int(datingLabels[i]))

if (classifierResult != datingLabels[i]): errorCount += 1.0 print "错误率:%f" % (errorCount - float(numTestVecs))

# ?分类综合程序

def classifyPerson():

resultList = ['一点也不喜欢', '有点喜欢', '非常喜欢']

ffMiles = float(raw_input("Frequent flier miles earned per year? "))

percentTats = float(raw_input("Percentage of time spent playing video games? "))

iceCream = float(raw_input("Liters of ice cream consumed per year? "))

datingDataMat, datingLabels = file2matrix('datingTestSet2.txt') # 读取数据

normMat, ranges, minVals = autoNorm(datingDataMat) # 归一化特征值

inArr = array([ffMiles, percentTats, iceCream])

classifierResult = classify0((inArr - minVals) - ranges, normMat, datingLabels, 3) # 分类器

print "你喜欢这个人的程度:", resultList[int(classifierResult) - 1]

sortedDistIndices = distances.argsort()

print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)

returnMat[index, : ] = listFromLine[0:3] #将列表listFromLine前3个数据,赋给returnMat第index行的,前2列?d(X,M)=(X?M)TΣ?1(X?M)

d(X,M)=sqrt{(X?M)TΣ?1(X?M)}d(X,M)=(X?M)TΣ?1(X?M)?

K近邻算法是一类基于实例的学习方法,基于实例的方法顾名思义,所有的分类是来自与实例的,而非某个确定的决策函数,所以我们也不需要对数据进行训练,只需等待待分类的数据来了加进实例就行。

{"result": train["diagnosis_result"], "distance": distance(data, train)}

@param leaf_size: 指定ball_tree或kd_tree的叶节点规模。他影响树的构建和查询速度

normDataSet = zeros(shape(dataSet))

已知有被贴了标签“B”的点:(10 12),(11 15),(12 10)

print("the total error rate is: %f" % (errorCount-float(numTestVecs)))

运筹学实验报告

运 筹 学 实 验 报 告 学院:经济管理学院 专业班级:工商11-2班 姓名:石慧婕 学号:311110010207

实验一线性规划 一实验目的 学习WinQSB软件的基本操作,利用Linear Programming功能求解线性规划问题。掌握线性规划的基本理论与求解方法,重点在于单纯形法的应用以及灵敏度分析方法。 二、实验内容 安装WinQSB软件,了解WinQSB软件在Windows环境下的文件管理操作,熟悉软件界面内容,掌握操作命令。利用Linear Programming功能建立线性模型,输入模型,求解模型,并对求解结果进行简单分析。 三实验步骤 1.将WinQSB文件复制到本地硬盘;在WinQSB文件夹中双击setup.exe。 2.指定安装WinQSB软件的目标目录(默认为C:\ WinQSB)。 3.安装过程需要输入用户名和单位名称(任意输入),安装完毕之后,WinQSB菜单自动生成在系统程序中。 4.熟悉WinQSB软件子菜单内容及其功能,掌握操作命令。 5.求解线性规划问题。启动程序开始→程序→WinQSB→Linear and Integer Programming。 某工厂要用三种原材料C、P、H混合调配出三种不同规格的产品A、B、D。已知产品的规格要求,产品单价,每天能供应的原材料数量及原材料单价分别见下表1和2。该厂应如何安排生产,使利润收入为最大? 表1 产品名称规格要求单价(元/kg) A 原材料C不少于50% 原材料P不超过25% 50 B 原材料C不少于25% 原材料P不超过50% 35 D 不限25 表2 原材料名称每天最多供应量(kg)单价(元/kg)

流体力学复习要点(计算公式)

D D y S x e P gh2 gh1 h2 h1 b L y C C D D y x P hc 第一章 绪论 单位质量力: m F f B m = 密度值: 3 m kg 1000=水ρ, 3 m kg 13600=水银ρ, 3 m kg 29.1=空气ρ 牛顿内摩擦定律:剪切力: dy du μ τ=, 内摩擦力:dy du A T μ= 动力粘度: ρυ μ= 完全气体状态方程:RT P =ρ 压缩系数: dp d 1dp dV 1ρρκ= -=V (N m 2 ) 膨胀系数:T T V V V d d 1d d 1ρρα - == (1/C ?或1/K) 第二章 流体静力学+ 流体平衡微分方程: 01;01;01=??-=??-=??- z p z y p Y x p X ρρρ 液体平衡全微分方程:)(zdz ydy xdx dp ++=ρ 液体静力学基本方程:C =+ +=g p z gh p p 0ρρ或 绝对压强、相对压强与真空度:a abs P P P +=;v a abs P P P P -=-= 压强单位换算:水银柱水柱mm 73610/9800012 ===m m N at 2/101325 1m N atm = 注: h g P P →→ρ ; P N at →→2m /98000乘以 2/98000m N P a = 平面上的静水总压力:(1)图算法 Sb P = 作用点e h y D +=α sin 1 ) () 2(32121h h h h L e ++= ρ 若01 =h ,则压强为三角形分布,3 2L e y D == ρ 注:①图算法适合于矩形平面;②计算静水压力首先绘制压强分布图, α 且用相对压强绘制。 (2)解析法 A gh A p P c c ρ== 作用点A y I y y C xc C D + = 矩形12 3 bL I xc = 圆形 64 4 d I xc π= 曲面上的静水总压力: x c x c x A gh A p P ρ==;gV P z ρ= 总压力z x P P P += 与水平面的夹角 x z P P arct an =θ 潜体和浮体的总压力: 0=x P 排浮gV F P z ρ== 第三章 流体动力学基础 质点加速度的表达式??? ? ? ? ??? ??+??+??+??=??+??+??+??=??+??+??+??=z u u y u u x u u t u a z u u y u u x u u t u a z u u y u u x u u t u a z z z y z x z z y z y y y x y y x z x y x x x x A Q V Q Q Q Q Q G A = === ? 断面平均流速重量流量质量流量体积流量g udA m ρρ 流体的运动微分方程: t z t y t x d du z p z d du y p Y d du x p X = ??-=??-=??- ρρρ1;1;1 不可压缩流体的连续性微分方程 : 0z u y u x u z y x =??+??+?? 恒定元流的连续性方程: dQ A A ==2211d u d u 恒定总流的连续性方程:Q A A ==2211νν 无粘性流体元流伯努利方程:g 2u g p z g 2u g p z 2 2 222 111++=++ρρ 粘性流体元流伯努利方程: w 2 2222111'h g 2u g p z g 2u g p z +++=++ρρ

运筹学中求检验数的求法

第三节求检验数的的求法 由于表上作业法也是一个迭代算法,何时终止迭代,总得有一个判定条件,这个判定条件类似于单纯法中的检验数,只是由于运输问题的特殊性,求检验数的方法与单纯形法有所不同,下面给出求检验数的两种方法。 一、闭回路法 1.定理:运输问题的表上作业法中,任一个非基变量都能和若干个基变量构成唯一的闭回路。 如图示: 顶点(1)(2) 非基变量基变量 (3)(4) 基变量基变量 (6)(5) 基变量基变量 非基变量的检验数就等于闭回路上所有奇数顶点(顶点(1)、(3)、(5))对应的单位运价之和减去所有偶数顶点(顶点(2)(4)、(6))对应的单位运价之和。 下面通过上例给出说明 要计算非基变量x11的检验数,按照定理非基变量x11 与基变量 x13 、x23 、 x21组成唯一的闭回路。闭回路的奇数顶点对应的单位运价之和为3+2,偶数顶点对应的单位运价之和为3+1,所以x11的检验数为5-4=1。 利用闭回路法求检验数可以作出如下的经济解释。 +1 -1 行平衡 3 3 -1 +1 行平衡 1 2 列平衡列平衡 就是把运量给x11 处分配一个单位,看看会对目标函数值带来什么影响(增加还是减少)。由于表上作业法中表的每行上分配的运量之和是一个常数(等于对应产地的产量),所以若给x11(分配前x11=0,

是非基变量)分配了1个单位的运量,将增加1×3个单位的运费;同时为保持产量平衡,对应的x13 处就要减少一个单位的运量,这样将减少1×3个单位的运费;与此同时,由于表上作业法中表的每列上分配的运量之和是一个常数(等于对应销地的销量)所以当x13减少了1个单位的运量时,为保持销量平衡x23将增加1个单位的运量,这样将增加1×2个单位的运费;同理可知对应的x21 处就要减少一个单位的运量,将减少1×1个单位的运费。 综上所述,目标函数值增加了3+2,同时又减少了3+1 。所以目标函数总的变化量为:(3+2) -(3+1)=1。这就是说,每给x11分配一个单位的运量,目标函数(总运费)将增加一个单位。因此在表上作业法中对检验数大于零的地方不再分配运量,若所有非基变量的检验数全大于零,任何形式的运量调整只能使目标函数值增加,所以算法终止,此时的解就是最优解。请大家参考上面的例子仔细想一想,若非基变量的检验数小于零,是否应该给该处分配运量把非基变量调整成基变量?答案是肯定的,为什么?通过上述的闭回路法,可以把所有非基变量的检验数求出来。 从运算上说,都是加减运算,难就难在寻找闭回路,但是只要多练习,还是比较容易的。 二、位势法 用闭回路法求检验数,需要对每一个非基变量(表上画“×”的地方)寻找闭回路,然后再去求检验数,当一个运输问题的产销点很多时,这种方法的计算工作量是很大的,不如位势法简单,下面通过实例简单介绍一下位势法。 简单的说,位势法就是通过与基变量的对应的单位运价把各行、各列对应的位势(可以先设成未知数)求出来,再利用它求出非基变量检验数的一种方法,这种方法的合理性来自于线性规划问题的对偶理论(有兴趣的同学可以参考文献(1)86页的内容)。 在线性规划问题的对偶理论和单纯型法,在基变量对应的检验数为零,所以有下面的方程组u1 + v3 =3 u1 + v4 =10 u2 + v1 =1 u2 + v3 =2 u3 + v2 =4 u3 + v4 =5 由于是7个未知数6个方程,所以必须给某一变量初始值。一般是令u1=0,可以解出其它的位势如表上所示。 根据定理(课本上的定理5)非基变量x ij的检验数

银行贷款的还款法及其计算方法

银行贷款的还款法及其计算方法 2012-02-25 16:35:28| 分类:银行贷款| 标签:贷款房贷计算方法|字号大中小订阅 (https://www.wendangku.net/doc/954513203.html,李谦) 目录 一.还款方法概述 二.等额本息还款法 1.用公式计算法 2.用银行的计算器计算法 3.用计算机计算法 三.等额本金还款法 1.用公式计算法 2.用计算器计算法 四.等额递增(或递减)还款法 五.等比递增(或递减)还款法 六.各种还款方法的比较 (正文) 一.还款方法概述 银行贷款的种类很多,如商业贷款、住房贷款、汽车贷款、助学贷款、出国留学贷款等。对贷款还本付息的计算方法也有许多种,如固定利率计息法、等额本息还款法、等额本金还款法、等差递增或递减还款法、等比递增或递减还款法等等。 1998年10月14日,中国人民银行货币政策司曾以(银货政发(1998)149号文,通知各商业银行,对个人住房贷款还款法作出了规定。该规定指明的还款法有等额本息还款法、等额本金还款法两种。但是,该规定还说“等额本息还款法下还可采取等额累进还款法和等比累进还款法”。 因此,就住房贷款来说,目前有四种还款计算方法。本文就准备介绍这四种还款法的含义和具体计算方法。 二.等额本息还款法 等额本息还款法的最大特点是每月的还款金额是相等的。这个还款金额包括还本和付息。因此叫等额本息还款法。

1.用公式计算法 这种还款法是采用复利进行计算的。即计算中既包括应还的本金及它产生的利息,也包括“利滚利”的成分。每月还款金额的计算公式是 式中:y——每月的还款金额,元; A ——贷款总金额,元; n——贷款的总年数或总月数; α——利率。如果式中的n用年表示,它是年利率;如果式中的n用月表示,它就是月利率; 如果把这个公式改用文字表示就是 这个公式的推导过程将在另一篇文章中作介绍。 例1:王先生从银行贷款20万元,贷款利率为基准利率,即7.05%。期限为 10年。他选择的还款方式是等额本息法。问他每月应该偿还贷款的金额是多少? 答:10年合120月,基准年利率折合为月利率时是7.05%÷12=0.5875%。因此,他每月还款的金额是 2.用银行的计算器计算法 在任何一个商业银行的网站上,都给出了这种还款方式的计算器,供你自己进行计算。下面的计算结果就是作者利用中国银行对上题进行的计算:可以看出,在计算结果中,除了给出每月应该偿还的本息(2327.3元)外,还给出了这个本息数中含有的本金和利息数,以及剩余的未还本金是多少等。

流体力学计算公式

C3.6.2 达西摩擦因子 为了确定λ与Re 的关系,人们作了大量实验和理论研究,下面介绍有代表性的结果。 1.尼古拉兹实验 尼古拉兹(J.Nikuradse,1932)分析了达西的圆管沿程阻力实验数据后,发现壁面粗糙度对λ的影响很大,决定用人工粗糙度方法实现对粗糙度的控制。他用当地黄砂砂粒经筛选后分类均匀粘贴在管内壁上,相对粗糙度ε/d 从1/30—1/1014分6种,测得λ与Re 的关系,得到尼古拉兹图(图C3.6.1)。 2. 常用计算公式 从尼古拉兹图中看到在不同Re 数和ε/d 值的区域,λ有不同的变化规律。 图C3.6.1

(1)层流区 由泊肃叶定律推导的沿程水头损失(C3.4.10)式可得 代入达西公式(C3.6.3)式,可得层流区λ的解析式 上式表明层流区λ与管壁粗糙度无关,写成常用对数形式为 上式在双对数坐标系中是一条直线,与尼古拉兹图吻合。 (2)过渡区 该区是层流向湍流的转捩区(2000ε)时(图C3.6.2)摩擦因子同壁面粗糙度无关,称为湍流光滑管区。 布拉修斯(P.Blasius,1911)运用1/ 7次指数律速度分布式,结合实验数据导出经验公式: 上式称为布拉修斯公式,适用范围为4000

运筹学实验报告1

运筹学实验报告(一) 实验要求:学会在Excel 软件中求解。 实验目的:通过小型线性规划模型的计算机求解方法。 熟练掌握并理解所学方法。 实验内容: 题目: 某昼夜服务的公交线路每天各时间区段内所需司机和乘务人员数如下; 设司机和乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线 路至少配备多少名司机和乘 务人员。列出这个问题的线 性规划模型。 解:设Xj 表示在第j 时间区段开始上班的司机和乘务人员数 班次 时间 所需人数 1 6:00-10:00 60 2 10:00-14:00 70 3 14:00-18:00 60 4 18:00-22:00 50 5 22:00-2:00 20 6 2:00-6:00 30

。 6-10 10-14 14-18 18-22 22-2 2-6 1 X1--- X1 2 X2--- X2 3 X3--- X3 4 X4--- X4 5 X5--- X5 6 X6 X6--- 60 70 60 50 20 30 所需人 数 Min z=x1+x2+x3+x4+x5+x6 St: x1+x6>=60 X1+x2>=70 X2+x3>=60 X3+x4>=50 X4+x5>=20 X5+x6>=30 Xj>=0,xj为整数, j=1,2,3,4,5,6

过程: 工作表[Book1]Sheet1 报告的建立: 2011-9-28 19:45:01 目标单元格(最小值) 单元格名字初值终值 $B$1 min 0 150 可变单元格 单元格名字初值终值 $B$3 x 0 45 $C$3 x 0 25 $D$3 x 0 35 $E$3 x 0 15 $F$3 x 0 15 $G$3 x 0 15 结果:最优解X=(45,25,35,15,15,15)T 目标函数值z=150 小结:1.计算机计算给规划问题的解答带来方便,让解答变得简洁;

流体力学公式总结

工程流体力学公式总结 第二章流体得主要物理性质 ?流体得可压缩性计算、牛顿内摩擦定律得计算、粘度得三种表示方法。1.密度ρ= m/V 2.重度γ= G /V 3.流体得密度与重度有以下得关系:γ= ρg或ρ= γ/ g 4.密度得倒数称为比体积,以υ表示υ= 1/ ρ= V/m 5.流体得相对密度:d = γ流/γ水= ρ流/ρ水 6.热膨胀性 7.压缩性、体积压缩率κ 8.体积模量 9.流体层接触面上得内摩擦力 10.单位面积上得内摩擦力(切应力)(牛顿内摩擦定律) 11.、动力粘度μ: 12.运动粘度ν:ν=μ/ρ 13.恩氏粘度°E:°E = t 1 /t 2 第三章流体静力学 ?重点:流体静压强特性、欧拉平衡微分方程式、等压面方程及其、流体静力学基本方程意义及其计算、压强关系换算、相对静止状态流体得压强计算、流体静压力得计算(压力体)。 1.常见得质量力: 重力ΔW = Δmg、 直线运动惯性力ΔFI =Δm·a 离心惯性力ΔFR =Δm·rω2、 2.质量力为F。:F= m·am= m(fxi+f yj+fzk) am =F/m = f xi+f yj+fzk为单位质量力,在数值上就等于加速度 实例:重力场中得流体只受到地球引力得作用,取z轴铅垂向上,xoy为水平面,则单位质量力在x、y、z轴上得分量为 fx= 0,fy=0 , fz=-mg/m= -g式中负号表示重力加速度g与坐标轴z方向相反 3流体静压强不就是矢量,而就是标量,仅就是坐标得连续函数。即:p=p(x,y,z),由此得静压强得全微分为: 4.欧拉平衡微分方程式 单位质量流体得力平衡方程为:

计算流体力学课后题作业

课后习题 第一章 1.计算流体动力学的基本任务是什么 计算流体动力学是通过计算机数值计算和图像显示,对包含有流体流动和热传导等相关物理现象的系统所做的分析。 2.什么叫控制方程?常用的控制方程有哪几个?各用在什么场合? 流体流动要受物理守恒定律的支配,基本的守恒定律包括:质量守恒定律、动量守恒定律、能量守恒定律。如果流动包含有不同组分的混合或相互作用,系统还要遵守组分守恒定律。如果流动处于湍流状态,系统还要遵守附加的湍流输运方程。控制方程是这些守恒定律的数学描述。 常用的控制方程有质量守恒方程、动量守恒方程、能量守恒方程、组分质量守恒方程。质量守恒方程和动量守恒方程任何流动问题都必须满足,能量守恒定律是包含有热交换的流动系统必须满足的基本定律。组分质量守恒方程,在一个特定的系统中,可能存在质的交换,或者存在多种化学组分,每种组分都需要遵守组分质量守恒定律。 4.研究控制方程通用形式的意义何在?请分析控制方程通用形式中各项的意义。 建立控制方程通用形式是为了便于对各控制方程进行分析,并用同一程序对各控制方程进行求解。

各项依次为瞬态项、对流项、扩散项、源项。 6.CFD商用软件与用户自行设计的CFD程序相比,各有何优势?常用的商用CFD软件有哪些?特点如何? 由于CFD的复杂性及计算机软硬件条件的多样性,用户各自的应用程序往往缺乏通用性。 CFD商用软件的特点是 功能比较全面、适用性强。 具有比较易用的前后处理系统和其他CAD及CFD软件的接口能力,便于用户快速完成造型、网格划分等工作。 具有比较完备的容错机制和操作界面,稳定性高。 可在多种计算机、多种操作系统,包括并行环境下运行。 常用的商用CFD软件有PHOENICS、CFX、SRAR-CD、FIDAP、FLUENT。PHOENICS除了通用CFD软件应该拥有的功能外,PHOENICS软件有自己独特的功能:开放性、CAD接口、运动物体功能、多种模型选择、双重算法选择、多模块选择。 CFX除了可以使用有限体积法外,还采用基于有限元的有限体积法。用于模拟流体流动、传热、多相流、化学反应、燃烧问题。其优势在于处理流动物理现象简单而几何形状复杂的问题。 SRAR-CD基于有限体积法,适用于不可压流体和可压流的计算、热力学的计算及非牛顿流的计算。它具有前处理器、求解器、后处理器三大模块,以良好的可视化用户界面把建模、求解及后处理与全部的物理模型和算法结合在一个软件包中。

计算流体力学常用数值方法简介[1]

计算流体力学常用数值方法简介 李志印 熊小辉 吴家鸣 (华南理工大学交通学院) 关键词 计算流体力学 数值计算 一 前 言 任何流体运动的动力学特征都是由质量守恒、动量守恒和能量守恒定律所确定的,这些基本定律可以由流体流动的控制方程组来描述。利用数值方法通过计算机求解描述流体运动的控制方程,揭示流体运动的物理规律,研究流体运动的时一空物理特征,这样的学科称为计算流体力学。 计算流体力学是一门由多领域交叉而形成的一门应用基础学科,它涉及流体力学理论、计算机技术、偏微分方程的数学理论、数值方法等学科。一般认为计算流体力学是从20世纪60年代中后期逐步发展起来的,大致经历了四个发展阶段:无粘性线性、无粘性非线性、雷诺平均的N-S方程以及完全的N-S方程。随着计算机技术、网络技术、计算方法和后处理技术的迅速发展,利用计算流体力学解决流动问题的能力越来越高,现在许多复杂的流动问题可以通过数值计算手段进行分析并给出相应的结果。 经过40年来的发展,计算流体力学己经成为一种有力的数值实验与设计手段,在许多工业领域如航天航空、汽车、船舶等部门解决了大量的工程设计实际问题,其中在航天航空领域所取得的成绩尤为显著。现在人们已经可以利用计算流体力学方法来设计飞机的外形,确定其气动载荷,从而有效地提高了设计效率,减少了风洞试验次数,大大地降低了设计成本。此外,计算流体力学也己经大量应用于大气、生态环境、车辆工程、船舶工程、传热以及工业中的化学反应等各个领域,显示了计算流体力学强大的生命力。 随着计算机技术的发展和所需要解决的工程问题的复杂性的增加,计算流体力学也己经发展成为以数值手段求解流体力学物理模型、分析其流动机理为主线,包括计算机技术、计算方法、网格技术和可视化后处理技术等多种技术的综合体。目前计算流体力学主要向二个方向发展:一方面是研究流动非定常稳定性以及湍流流动机理,开展高精度、高分辩率的计算方法和并行算法等的流动机理与算法研究;另一方面是将计算流体力学直接应用于模拟各种实际流动,解决工业生产中的各种问题。 二 计算流体力学常用数值方法 流体力学数值方法有很多种,其数学原理各不相同,但有二点是所有方法都具备的,即离散化和代数化。总的来说其基本思想是:将原来连续的求解区域划分成网格或单元子区

计算流体力学过渡到编程的傻瓜入门教程

借宝地写几个小短文,介绍CFD的一些实际的入门知识。主要是因为这里支持Latex,写起来比较便。 CFD,计算流体力学,是一个挺难的学科,涉及流体力学、数值分析和计算机算法,还有计算机图形学的一些知识。尤其是有关偏微分程数值分析的东西,不是那么容易入门。大多数图书,片中数学原理而不重实际动手,因为作者都把读者当做已经掌握基础知识的科班学生了。所以数学基础不那么好的读者往往看得很吃力,看了还不知道怎么实现。本人当年虽说是学航天工程的,但是那时本科教育已经退步,基础的流体力学课被砍得只剩下一维气体动力学了,因此自学CFD的时候也是头晕眼花。不知道怎么实现,也很难找到教学代码——那时候网络还不发达,只在教研室的故纸堆里搜罗到一些完全没有注释,编程风格也不好的冗长代码,硬着头皮分析。后来网上淘到一些代码研读,结合书籍论文才慢慢入门。可以说中间没有老师教,后来赌博士为了混学分上过CFD专门课程,不过那时候我已经都掌握课堂上那些了。 回想自己入门艰辛,不免有一个想法——写点通俗易懂的CFD入门短文给师弟师妹们。本人不打算搞得很系统,而是希望能结合实际,阐明一些最基本的概念和手段,其中一些复杂的道理只是点到为止。目前也没有具体的计划,想到哪里写到哪里,因此可能会很零散。但是我争取让初学CFD 的人能够了解一些基本的东西,看过之后,会知道一个CFD代码怎么炼成的(这“炼”字好像很流行啊)。欢迎大家提出意见,这样我尽可能的可以追加一些修改和解释。

言归正传,第一部分,我打算介绍一个最基本的算例,一维激波管问题。说白了就是一根两端封闭的管子,中间有个隔板,隔板左边和右边的气体状态(密度、速度、压力)不一样,突然把隔板抽去,管子面的气体怎么运动。这是个一维问题,被称作黎曼间断问题,好像是黎曼最初研究双曲微分程的时候提出的一个问题,用一维无粘可压缩Euler程就可以描述了。 这里 这个程就是描述的气体密度、动量和能量随时间的变化()与它们各自的流量(密度流量,动量流量,能量流量)随空间变化()的关系。 在CFD常把这个程写成矢量形式 这里 进一步可以写成散度形式

2015运筹学实验报告

实验报告 课程名称:运筹学 专业:市场营销 班级:11302 任课教师:汪长飚 学号:201305549 (21) 姓名:杨威 实验日期:2015 年 6 月10 日 长江大学管理学院

一、实验性质和教学目的 本实验是管理及经济类本科生运筹学课程的上机操作实验,实验的内容是本科生阶段运筹学Ⅰ的所有内容,主要包括线性规划、整数规划、运输问题、目标规划、动态规划、图与网络、网络计划等。实验目的在于使学生掌握应用计算机工具解决运筹学模型优化求解的方法步骤,熟悉各种运筹学优化软件的使用,特别是Excel 优化功能的使用,为今后在实际工作中解决大型的实际问题优化模型奠定基础。同时,通过熟悉优化软件的操作激发同学的学习兴趣,提高本课程的教学效果。 二、实验软件 软件名称:MS-office Excel电子表格软件 开发者:Microsoft 软件内容:Office Excel 规划求解软件包及相关挂接软件包

实验一应用EXCEL规划求解的加载与参数的设置 一、实验目的与要求 1. 1.掌握EXCEL宏的加载和规划工具的加载 2. 2.了解规划求解参数的设置 二、实验步骤与方法 1.规划求解加载,在“工具”菜单上,单击“加载宏”。 2.规划求解参数。 1)设置目标单元格 在此指定要设置为特定数值或者最大值或最小值的目标单元格。该单元格必须包含公式,公式为规划问题的目标函数,根据不同问题的线性规划而异。 2)等于 在此指定是否希望目标单元格为最大值、最小值或某一特定数值。如果需要指定数值,请在右侧编辑框中输入该值。 3)可变单元格 在此指定可变单元格。求解时其中的数值不断调整,直到满足约束条件并且“设置目标单元格”框中指定的单元格达到目标值。可变单元格必须直接或间接地与目标单元格相关联。可变单元格即为数学模型中的决策变量。 4)推测 单击此按钮,自动推测“设置目标单元格”框中的公式所引用的所有非公式单元格,并在“可变单元格”框中定位这些单元格的引用。一般不选择“推测”,而是将光标置于可变单元格内,再在工作表中选择决策变量所在的单元格区域。 5)约束 在此列出了规划求解的所有约束条件。 (1) 添加:显示“添加约束”对话框。 (2) 更改:显示“更改约束”对话框。 (3) 删除:删除选定的约束条件。 6)求解 对定义好的问题进行求解。 在“可用加载宏”框中,选中“规划求解”旁边的复选框

流体力学计算公式

1、单位质量力:m F f B B = 2、流体的运动粘度:ρ μ=v (μ[动力]粘度,ρ密度) 3、压缩系数:dp d dp dV V ρρκ?=?-=11(κ的单位是N m 2)体积模量为压缩系数的倒数 4、体积膨胀系数:dT d dT dV V v ρρα?-=?=11(v α的单位是C K ?1,1) 5、牛顿内摩擦定律:为液体厚)为运动速度,以应力表示为y u dy du dy du A T (,μτμ== 6、静止液体某点压强:为该点到液面的距离)h gh p z z g p p ()(000ρρ+=-+= 7、静水总压力: )h (为受压面积,为受压面形心淹没深度为静水总压力,A p ghA A p p c ρ== 8、元流伯努利方程;'2221112w h g p z g u g p z ++=++ρρ('w h 为粘性流体元流单位重量流体由过流断面1-1运动至过流断面2-2的机械能损失,z 为某点的位置高度或位置水头,g p ρ为测压管高度或压强水头,g u ρ2是单位流体具有的动能,u gh g p p g u 22'=-=ρ,u gh C g p p g C u 22'=-=ρC 是修正系数,数值接近于1) 9、总流伯努利方程:w h g v g p z g v g p z +++=++222 221221111αραρ(α为修正系数通常取1) 10、文丘里流量计测管道流量:)21)(41()()(42 122211g d d d k h k g p z g p z k Q -=?=+-+=πμρρμ 11、沿程水头损失一般表达式:g v d l h f 22 λ=(l 为管长,d 为管径,v 为断面平均流速,g

运筹学实验3用Excel求解线性规划模型

实验三、用Excel求解线性规划模型 线性规划问题用手工求解工作量很大,而且没有较高的数学基础很难理解其计算过程和方法,但是借助Excel“规划求解”工具,就能轻而易举地求得结果。Excel最多可解200个变量、600个约束条件的问题。下面我们以一实例介绍利用Excel规划求解工具怎样快速解决具体的经济决策问题。 一、实验目的 1、掌握如何建立线性规划模型。 2、掌握用Excel求解线性规划模型的方法。 3、掌握如何借助于Excel对线性规划模型进行灵敏度分析,以判断各种可能的变 化对最优方案产生的影响。 4、读懂Excel求解线性规划问题输出的运算结果报告和敏感性报告。 二、实验内容 1、[工具][规划求解]命令 规划求解加载宏是Excel的一个可选安装模块,在安装Excel时,只有在选择“完全/定制安装”时才可选择装入这个模块。在安装完成进入Excel后还要用[工具][加载宏]命令选中“规划求解”,以后在[工具]菜单下就增加了一条[规划求解]命令。 使用[规划求解]命令的一般步骤为: 第一步:在选取[工具][规划求解]命令后,弹出图1所示“规划求解参数”对话框,其中各选项说明如表1。 图1“规划求解参数”对话框 选项名说明 设置目标单元格选取计算问题的目标函数,并含有计算公式的单元格等于按问题目标进行选择。如利润问题,选取“最大值” 可变单元格决策变量所在各单元格、不含公式,可以有多个区域或单元格约束增加、修改、删除各个约束等式或不等式,一个一个地与图2切换填 入或修改 添加选择后弹出图2所示对话框 更改选择后弹出图3所示对话框 删除删除所选定的约束条件

选项决定采用线性模型还是非线性模型求解 图2 图3 第二步:完成图1所示的一切填入项目后,单击“选项”按钮,在弹出的“规划求解选项”对话框中若是线性模型则选取“采用线性规模”选项按钮,再单击“确定”按钮回到图1。 图4 第三步:在图1中单击“求解”按钮,经计算完成后弹出“规划求解结果”对话框(图5)。 图5

运筹学实验表格计算法

XXXX大學 综合性实验报告 题 目:实验四表格计算法姓名: 学号: 班级: 完成时间: 指导老师:

一、实验目的 1. 掌握表格计算法中表格的绘制 2. 利用表格计算法计算网络图的时间参数 二、实验内容 1.对给出的工程计划进行分析,利用Excel 绘制出表格 2.基于表格计算法算出工程网络图中各作业的参数,确定工程的关键路线和工期 三、实验要求 1. 学生在实验操作过程中自己动手独立完成,1人为1组 2. 完成实验报告:对计算机验证性求解结果的问题分析与结果报告 四、实验仪器、设备 内存128Mb 及以上,操作系统为Windows 2000及以上的电脑,并有安装好的完整Excel 软件。 五、实验效果 根据给定的网络图绘制excel 表格,如下: 第1列:作业名称(用作业前后两结点代号表示) 第2列:作业时间 第3列:最早开始时间(从表格上方向下求 ) 假设当前作业前后结点为i 和 j ,则最早开始时间 第4列:最早完成时间=第3列+第2列 注:工期等于指向最终结点的所有作业的最早完成时间的最大值。 第5列:最迟开始时间(从表格下方向上求) 假设当前作业前后结点为i 和 j ,则最迟开始时间 注:无后续作业时,t LS (i , j )=工期-t (i , j ) (,)max[(,)(,)]1,...,ES ES k k t i j t h i t h i k m =+=(,)min[(,)(,)]1,...,LS LS k t i j t j h t i j k m =-=

第6列:最迟完成时间=第5列+第2列 第7列:总时差=第5列-第3列 第8列:单时差=任一后续作业的第3列-当前作业的第4列 例如,设当前作业前后结点为i 和j,则单时差 r( i , j ) = t ES( j , h ) - t EF( i , j ) = t ES( j , k ) - t EF( i , j ) 注:无后续作业时,r( i , j )=工期-当前作业的第4列 第9列:关键作业(总时差为零的作业) 可得关键路径为:1→2→3→4→5→6→7→9→10 六、实验小结 这次试验中,自己先是在宿舍做完实验再到实验室去做,所以觉得得心应手。这次的实验主要是要(1)理解各行各列的含义;(2)细心的计算数据,其他的都相对比较简单。Excel 表格相比网络图更加清晰直观,容易看的出关键路径,画图比较容易因为画图空间没有事先做好充足的规划导致出来的结果比较难看得出,容易错看,总之,我觉得这章节知识不难,但要细心才能做好。

流体力学的计算公式

流体力学的计算公式 众所周知,锅炉之类的热力设备可以采用水封管作为限压装置。设备工作时,水封管内的水将设备与大气隔绝,使设备保持一定的压力。水封管内水的多少,即水封管内的实际水位的高低与设备汽压大小有关。汽压大,水位就高;汽压小,水位就低。当设备压力升至额定蒸汽压力时,水封管内的水位应该达到最高水位;而在设备压力稍微大于额定蒸汽压力时,水封管内的水应能立即被冲除掉,使设备内的蒸汽能够迅速得到排放。但是,水封管的内径必须足够大;以保证它的排汽能力大于设备的最大蒸发量,从而防止设备发生超压事故。《蒸汽锅炉安全技术监察规程》第132条规定:“对于额定蒸汽压力小于等于0.1MPa的锅炉可以采用静重式安全阀或水封式安全装置。水封装置的水封管内径不应小于25mm”。《小型和常压热水锅炉安全监察规定》第二十八条要求:“水封管的内径应当根据锅炉的额定容量和压力确定,且内径不得小于25毫米”。 但是,水封管的内径究竟应该根据什么样的公式去计算?这里没有具体加以规定。水封管的内径为何不能小于25mm?这里没有加以说明。 1 确定水封管内径的一种错误观点 有人说,可以按安全阀的排放量计算公式去间接确定水封管的内径。笔者认为这是不对的。理由如下: 其一,按流体力学,安全阀的局部阻碍因为其进出口呈直角型式,边壁是突变的,主流与边壁之间形成大尺度旋涡,蒸汽排放时能量损失很大;而水封管的边壁是渐变的,又不出现减速增压现象的部位,故蒸汽排放时的能量损失很小。其二,安全阀的出口之外肯定还有排汽管,它的排放量计算公式应该考虑这一额外的因素;而水封管却只相当于它的排汽管。其三,安全阀在排汽时,汽流还自始至终受到弹簧或者重锤施加的反方向作用力,能量损失非常之大;而水封管在排汽时却不会受到这样的反作用力,无此项能量损失。显然,安全阀排汽与水封管排汽区别太大,不能按安全阀排放量计算公式去确定水封管的内径。 2 用流体力学理论建立水封管内径计算方法 为了正确确定水封管的应有内径,我们有必要按流体力学的理论来分析一下水封管的流动阻力和能量损失。蒸汽流过水封管时的阻力损失ΔP等于水封管进口压力P1与出口压力P2之差。管道的阻力损失 ΔP=Pa(1) 式中λ—管道摩擦系数; d —管道内径,m; ρ—流体的密度,k g/m3; u —流体在管内的流速,m/s; L—平直管段的总长度,m; Σξ—管道中各种局部阻力之和。 管道的摩擦系数λ值取决于流体流动的雷诺数Re 和管壁的相对粗糙度。管壁的相对粗糙度等于管壁的绝对粗糙度(即管壁内凸起高度)K与管内径d之比。雷诺数Re =(2) 式中ν-流体运动粘滞系数,m2/s; 其他符号说明同上。 由于水封管进出口压差通常大于40000Pa,排汽时的流速都大于100m/s ,雷诺数Re 都大于80000000,所以蒸汽的流动状态为紊流流动,而且位于阻力平方区。在此区域内,摩擦阻力系数λ值仅取决于管壁的相对粗糙度,可以用尼古拉兹公式进行计算:λ=(3)

流体力学复习要点(计算公式)

第一章 绪论 单位质量力: m F f B m = 密度值: 3 m kg 1000=水ρ, 3 m kg 13600=水银ρ,3 m kg 29.1=空气 ρ 牛顿内摩擦定律:剪切力: dy du μ τ=, 内摩擦力:dy du A T μ= 动力粘度:ρυμ= 完全气体状态方程:RT P =ρ 压缩系数: dp d 1dp dV 1ρρκ= -=V (N m 2 ) 膨胀系数:T T V V V d d 1d d 1ρρα - == (1/C ?或1/K) 第二章 流体静力学+ 流体平衡微分方程: 01;01;01=??-=??-=??- z p z y p Y x p X ρρρ 液体平衡全微分方程:)(zdz ydy xdx dp ++=ρ 液体静力学基本方程:C =+ +=g p z gh p p 0ρρ或 绝对压强、相对压强与真空度:a abs P P P +=;v a abs P P P P -=-= 压强单位换算:水银柱水柱m m 73610/9800012===m m N at 2/1013251m N atm = 注: h g P P →→ρ ; P N at →→2m /98000乘以 2/98000m N P a = 平面上的静水总压力:(1)图算法 Sb P = 作用点e h y D += 1 ) () 2(32121h h h h L e ++= 3 2L e y D = = (2)解析法 A gh A p P c c ρ== 作用点A y I y y C xc C D + = 矩形 12 3 bL I xc = 圆形 64 4 d I xc π= 曲面上的静水总压力: x c x c x A gh A p P ρ==;gV P z ρ= 总压力 z x P P P += 与水平面的夹角 x z P P arctan =θ 潜体和浮体的总压力: 0=x P 排浮gV F P z ρ== 第三章 流体动力学基础 质点加速度的表达式??? ? ?? ?????+??+??+??=??+??+??+??= ??+??+??+??=z u u y u u x u u t u a z u u y u u x u u t u a z u u y u u x u u t u a z z z y z x z z y z y y y x y y x z x y x x x x A Q V Q Q Q Q Q G A = === ? 断面平均流速重量流量质量流量体积流量g udA m ρρ 流体的运动微分方程: t z t y t x d du z p z d du y p Y d du x p X = ??-=??-=??- ρρρ1;1;1 不可压缩流体的连续性微分方程 : 0z u y u x u z y x =??+??+?? 恒定元流的连续性方程: dQ A A ==2211d u d u 恒定总流的连续性方程:Q A A ==2211νν 无粘性流体元流伯努利方程:g 2u g p z g 2u g p z 2 2 222 111++=++ρρ 粘性流体元流伯努利方程: w 2 2222111'h g 2u g p z g 2u g p z +++=++ρρ

(完整版)运筹学实验报告

运筹学实验报告 班级:数电四班姓名:刘文搏学号: 一、实验目的 运用MATLAB程序设计语言完成单纯性算法求解线性规划问题。 二、实验内容 编写一个MATLAB的函数文件:linp.m用于求解标准形的线性规划问题: min f=c*x subject to :A*x=b ; x>=0; 1、函数基本调用形式:[x,minf,optmatrx,flag]=linp(A,b,c) 2、参数介绍: A:线性规划问题的约束A*x=b且x>=0中变量的系数组成的矩阵,是 一个m*n的矩阵。 c :线性规划问题的目标函数f=c*x中各变量的系数向量,是一个n 维的行 向量。 b :线性规划问题的约束A*x=b且x>=0中的常数向量,是一个m维的列 向量。 x :输出线性规划问题的最优解,当线性规划问题没有可行解或有可 行解无 最优解时x=[]. minf :输出线性规划问题的最优值,当线性规划问题没有可行解时 minf=[], 当线性规划问题有可行解无最优解时minf=-Inf。 flag :线性规划问题的求解结果标志值,当线性规划问题有最优解

时flag=1, 当线性规划问题有可行解无最优解时flag=0,当线性规划问题没有 可行解时flag=-1. cpt:输出最优解对应的单纯性表,当线性规划问题没有可行解或有 可 行解无最优解时cpt=[]. 三、Linp函数 %此函数是使用两阶段算法求解线性规划问题 function [x,minf,flag,cpt]=linp(A,b,c); for i=1:p %判断b是否<=0;将b转换成大于0; if b(i)<0 A(i,:)=-1*A(i,:); b(i)=-1*b(i); end end %返回值:x,第一张单纯形表,基,标志参数 A,c,b %********第一张单纯形表的初始化 [m,n]=size(A);%获得矩阵A的维数 [p,q]=size(b); dcxb=zeros(m+2,m+n+1);%确定第一张单纯形表的大小 dcxb(1,:)=[-c,zeros(1,m+1)];%?给表的第一行赋值 dcxb(2,:)=[zeros(1,n),-1*ones(1,m),0];%?给表的第二行赋值 dcxb([3:m+2],:)=[A,eye(m,m),b];%添A和b到表中

计算流体力学入门 第九章 库特流代码 fortan90版

计算流体力学入门第九章库特流代码 fortan90版 ! -------------------------------------------------- ! Silverfrost FTN95 for Microsoft Visual Studio ! Free Format FTN95 Source File ! -------------------------------------------------- program piple implicitnone real,dimension(21)::u real,dimension(21)::uu real,dimension(21,3)::cf integer::i real::s=0.0 real::err=1 ! judgement of wheather stop or not do i=1,21 u(i)=0 enddo dowhile(err>1e-8) u(1)=0.0 u(21)=1.0 uu(1)=0.0 uu(21)=1.0 cf(:,1)=-0.5 cf(:,2)=2.0 do i=2,20 cf(i,3)=0.5*(u(i+1)+u(i-1)) enddo cf(20,3)=cf(20,3)+0.5 do i=3,20 cf(i,2)=cf(i,2)-(cf(i,1)*cf(i-1,1))/cf(i-1,2) cf(i,3)=cf(i,3)-(cf(i-1,3)*cf(i,1))/cf(i-1,2) enddo uu(20)=cf(20,3)/cf(20,2) do i=19,1,-1 uu(i)=(cf(i,3)+0.5*uu(i+1))/cf(i,2) enddo uu(1)=0 do i=1,21 s=s+abs(uu(i)-u(i)) enddo u=uu err=s s=0.0 print*,err enddo print*,uu read*,i endprogram piple ! -------------------------------------------------- ! Silverfrost FTN95 for Microsoft Visual Studio ! Free Format FTN95 Source File ! -------------------------------------------------- program piple

相关文档
相关文档 最新文档