《Matlab与化工数值计算-第一讲简介与基本数学运算.ppt》由会员分享,可在线阅读,更多相关《Matlab与化工数值计算-第一讲简介与基本数学运算.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机在化工中的应用第一讲 简介与基本数学运算伍水生伍水生化学工程学院化学工程学院化学工程师的任务过程设计工厂运行工艺开发反应特征过程特性设备特性系统特性数学模型数学模型化学工程专业数学模型类型非线性方程(组)常微分方程(组)偏微分方程(组)非线性模型,难以获得解析解,必须采用数值解法模型的数值解法是应用数学的一个分支,通常称为计算数学(数值分析,数值方法)化学工程常用软件MatlabMathematicaMathcadMapleStaticsticaPRO/II(SimSci)AspenPlusChemCADFlowtranSuperpro DesignerFluentCHEMKIN数学软件
2、:化工模拟软件:本课程的学习目的Matlab数值分析化工数学模型 化工专业知识作为背景,不涉及模型的推导,注重模型求解过程的方法与技巧 学会Matlab的使用,可以利用Matlab求解较为复杂的化工数学模型 对于数值分析的内容不过多涉及,只注意数值计算结果的准确性本课程基本内容 第一讲 Matlab简介与基本数学运算第二讲 非线性方程组求解与迭代法第三讲 矩阵操作与线性方程组求解第四讲 插值、拟合与数值微分、积分第五讲 常微分方程数值解第六讲 偏微分方程数值解Origin 基础知识和绘图学习本课程的注意事项学好本课程的唯一途径是多上机实践 数值计算效率和效果的保证有很多技巧,可以参考数值方法(
3、数值分析)方面的教科书&刘则毅,科学计算技术与Matlab,科学出版社&同济大学计算数学教研室,现代数值数学和计算,同济大学出版社&黄华江,实用化工计算机模拟,化学工业出版社&张志涌,精通Matlab6.5版,北京航空航天大学出版社 对于数值计算的结果,应注意分析结果的意义Matlab简介 MATLAB具有用法简单、灵活、结构性强、延展性好等优点,逐渐成为科技计算、视图交互系统和程序中的首选语言工具。功能强大的数值运算功能 强大的图形处理能力 高级但简单的程序环境丰富的工具箱与模块集 易于扩充 开始的问题计算在1/2英寸不锈钢管中,以2000lb/hr流量输送水,当水的温度为10、20、30、
4、40、50、60、70、80时,压降分别为多少?牛顿流体在不锈钢管中的流动压降可由下式估算:其中,摩擦压降,psi/(100英尺等量管长);M,质量流量,lb/hr;,粘度,cP;,密度,lb/ft3,D,管径,inch。流体密度可由下式描述:,g/ml;对于水,A0.34710;B0.2740;Tc647.13K;n0.28571。流体粘度由下式描述:,cP;对于水,A=-10.2158;B=1.7925E3;C1.7730E-2;D=-1.2631E-05。Matlab窗口介绍命令窗口命令历史变量空间当前路径Matlab的通用命令命令命令说明命令命令说明cd显示或改变工作目录dir显示目录
5、文件type显示文件内容clear清除内存变量clf清除图形窗口pack收集内存碎片,扩大内存空间clc清除命令窗口内容echo命令窗口信息显示开关hold图形保持开关disp显示变量或文字内容path显示搜索目录save保存内存变量到指定文件load加载指定文件变量diary日志文件命令quit退出Matlab!调用DOS命令whos变量查看基本算术运算符 运 算符 号运 算符 号加加+减减-矩矩阵阵乘乘*数数组组相乘相乘.*矩矩阵阵左除左除数数组组左除左除.矩矩阵阵右除右除/数数组组右除右除./幂幂次方次方数数组幂组幂次方次方.Matlab语言的标点标点定义标点定义:向量和矩阵的多种功能.
6、小数点及结构体域的访问;区分行及取消行显示.续行符,区分列及函数参数分隔符注释符,百分号()指定运算过程的次序等!调用dos操作命令矩阵定义赋值标记构成单元数组字符串标示符数值类型分类方法一双精度型 (系统默认类型)单精度型带符号整数无符号整数分类方法二标量向量数组分类方法三实数复数数值的表示以下表达方式均合法:345-990.01 1.3e-3 4.5e331 2 3 1;2;3 1 2;2 113+3i 6-8j计算以下表达式的值:1)1 2 3*3 2 12)1 2 3.*3 2 13)1 2 324)1 2 3.25)1+3*226)(3*2)27)(3*2)2;8)(-8)(1/3)
7、基本数学运算符的使用 20001.8*(10(-10.2158+1.7925e3/283+1.773e-2*283-1.2631e-5*2832)0.2/(20000*0.54.8*(0.3471*0.274(-(1-283/647.13)0.28574)/0.2323)回车可以得到结果ans=287.8245Matlab的计算器功能数学函数(elfun)类型函 数含 义三角函数三角函数sin(x)正弦正弦值值asin(x)反正弦反正弦值值cos(x)余弦余弦值值acos(x)反余弦反余弦值值tan(x)正切正切指数函数指数函数exp(x)指数运算指数运算log(x)自然自然对对数数sqrt(
8、x)求平方根求平方根复数函数复数函数abs(x)求求绝对值绝对值imag(x)取出复数的虚部取出复数的虚部real(x)取出复数的取出复数的实实部部conj(x)复数共复数共轭轭数数论论函数函数round(x)四舍五入四舍五入mod(x,y)求余数求余数lcm(x,y)整数整数x和和y的最小公倍数的最小公倍数gcd(x,y)整数整数x和和y的最大公的最大公约约数数计算以下表达式的值:1)sin(30)2)sind(30)3)exp(1 2 3)4)log10(10 100 1000)5)abs(3+4i)6)abs(-5)基本数学函数的使用format命令命令MATLAB命令含 义范 例for
9、mat short短格式短格式3.1416format short e短格式科学格式短格式科学格式3.1416e+000format long长长格式格式3.14159265358979format long e长长格式科学格式格式科学格式3.141592653589793e+000format rat有理格式有理格式355/113format hex十六十六进进制格式制格式400921fb54442d18format bank银银行格式行格式3.14程序的组成数据输入运算数据输出变量变量数学运算关系运算逻辑运算流程控制图形输出文件输出屏幕输出文件输入键盘输入变量变量的命名方式:变量名由字母、
10、数字和下划线组成;变量名中的英文字母大小写是有区别的;变量名的最大长度是有规定的不同版本的系统规定不同:19个字符、31或63个字符等可调用namelengthmax函数得到系统规定长度变量的使用clear%删除工作区中所有定义过的变量删除工作区中所有定义过的变量whos%查看当前工作区内变量信息,无显示表示没查看当前工作区内变量信息,无显示表示没有定义的变量有定义的变量 xy=1;yx=2;%对变量赋值对变量赋值 xy%查看变量查看变量xy的当前数值的当前数值xy=1 whos Name Size Bytes Class xy 1x1 8 double array yx 1x1 8 doub
11、le arrayGrand total is 2 elements using 16 bytes clear xy yx%删除变量删除变量xy及及yx whos xy%这时变量这时变量xy已经不存在了已经不存在了?Undefined function or variable xy.特殊变量意 义 ans如果用如果用户户未定未定义变义变量名,系量名,系统统用于用于计计算算结结果存果存储储的默的默认变认变量名量名 pi圆圆周率周率(=3.1415926.)inf或或Inf无无穷穷大大值值 eps浮点运算的相浮点运算的相对对精度精度2(-52)realmax最大的正浮点数,最大的正浮点数,2(102
12、4)-1realmin最小的正浮点数,最小的正浮点数,2(-1022)NaN或或nan不定量不定量 i或或j虚数虚数单单位位nargin函数函数输输入参数个数入参数个数nargout函数函数输输出参数个数出参数个数lasterr存放最新的存放最新的错误错误信息信息lastwarn存放最新的警告信息存放最新的警告信息MATLAB系统的特殊变量和常数系统的特殊变量和常数MATLAB数据类型数值(标量,向量,数组)字符串单元数组(cell array)结构体(structure)函数句柄向量的生成1)直接输入向量直接输入向量格式上要求向量元素需要用“”括起来,元素之间可以用空格、逗号或分号分隔。用空
13、格和逗号分隔生成行向量,用分号生成列向量。2)利用冒号生成向量利用冒号生成向量冒号表达式的基本形式为:xx0:step:xn若step1,则此项输入可以忽略。3)linspace函数函数可以使用linspace函数生成线性等分向量:ylinspace(x1,x2)生成(1*100)维行向量,y(1)=x1,y(100)=x2ylinspace(x1,x2,n)生成(1*n)维行向量,y(1)=x1,y(n)=x24)logspace函数函数logspace用于生成对数等分向量,格式如下:ylogspace(x1,x2,n)生成(1*n)维对数等分向量,y(1)=10 x1,y(n)=10 x2
14、;n可以省略,此时其默认值为50。向量的运算1)向量加减与数加减向量的加减与数加减的形式与普通标量加减相同2)向量的点积、叉积与混合积的实现点积:向量的点积由函数dot实现。dot(a,b)返回向量a和b的数量点积,其中a,b必须同维。叉积:叉积由cross函数实现。向量a,b必须为三维向量混合积:可由以下命令实现,dot(a,cross(b,c)3)向量的数乘、数组乘和向量乘例:当a1:1:3;b=2:2:6时,以下命令的运行结果是什么?1)a1=2*a 2)a2=a.*b 3)a3=a*b字符串类型字符串:包含在一对单引号中的字符集合 s=hello,MATLAB%定义字符串变量ss=he
15、llo,MATLAB whos Name Size Bytes Class s 1x13 26 char arrayGrand total is 13 elements using 26 bytes单元数组(Cell Array)单元数组是MATLAB数组的一种特殊数据类型,它用于保存不同类型和/或不同大小的数据。三种直接赋值方式1.单元下标用括号“()”括起来,而单元的内容用“”括起来,如:clear alla(1,1)=1 2;3 4;a(1,2)=0 1;a(2,1)=Hello;a(2,2)=2+3i 2.单元下标用“”括起来,而赋值语句等式右边的单元内容用“”括起来:a1,1=1 2
16、;3 4;a1,2=0 1;a2,1=Hello;%右边只有一个元素时可省略去“”a2,2=2+3i 3.直接使用a=1 2;3 4,0 1,Hello,2+3i 单元数组的操作显示单元数组的命令a%显示单元数组a的信息celldisp(a)%显示单元数组a的完整内容先使用函数cell()创建空的单元数组,然后再赋值:b=cell(2,3)赋值方法同直接赋值方式。对单元数组元素的操作c=a1,2%将单元数组a的1,2元素赋给变量c,注意是“”,而不是“()”。结构体与C语言类似,MATLAB结构体用于存取相关的数据,它由一组称为域(fields)的成员变量(向量)构成,每一个域可以为不同的MA
17、TLAB数据类型。结构数组的定义有两种方法,一种是直接赋值,另一种是使用strct()函数。结构体的赋值student.name=Zhang Jun;student.major=Chemical Engineering;student.subject=英语 ,政治 ,数学 ,化工原理 ,物理化学 ;student.entrance_exam=62 68 72 82 90;student(2).name=Li Xia;student(2).major=Chemical Engineering;student(2).subject=英语 ,政治 ,数学 ,化工原理 ,物理化学 ;student(2
18、).entrance_exam=60 72 68 85 88;struct_array_name=structure(field1,values1,field2,values2,)Student=struct(name,Zhang Jun,major,Chemical Engineering)管道压降的计算T=283:10:353;M=2000;D=0.5;density.A=0.3471;density.B=0.274;density.Tc=647.13;density.n=0.28571;Rho=(density.A.*density.B.(-(1-T./density.Tc).densi
19、ty.n)/0.2323;mu.A=-10.2158;mu.B=1.7925e3;mu.C=1.773e-2;mu.D=-1.2631e-5;mu=10.(mu.A+mu.B./T+mu.C.*T+mu.D.*T.2);deltP=(M1.8)*(mu.0.2)./(20000*D4.8.*Rho)M文件编程1.M文件编程:(M-file program)可用普通文本编辑器编制 MATLAB文件,文件由纯ASC字符组成,确定文件名后加.m扩展名,称为M文件。2.M文件有两种形式:命令(脚本)文件(Script File)和函数文件(Function File)脚本编辑窗口 命令文件命令文件:(
20、Script File)M文件中最简单的一种,是可用于自动重复执行的一组MATLAB命令和函数组合,不需输出输入参数,用M文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生的变量都是全局变量。建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M文件即可。运行命令文件时,只需在命令窗口键入文件名即可。例3-1 分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。程序1:首先建立命令文件并以文件名f2c.m存盘。clear;%清除工作空间中的变量f=input(Input Fahrenheit
21、temperature:);c=5*(f-32)/9然后在MATLAB的命令窗口中输入f2c,将会执行该命令文件,执行情况为:Input Fahrenheit temperature:73c=22.7778函数文件的编写编写一个函数,计算本章开始问题中流体的粘度,函数要求输出粘度的计算值:1.函数声明语句:function vis=viscosity()2.变量的传递1.通过调用函数传递vis=viscosity(A,B,C,D,T)2.通过全局变量传递利用global命令,在主函数和子函数中予以声明3.编写表达式函数的调用1.在调用函数的主函数中,直接采用函数名调用2.通过函数句柄调用程序2
22、:首先建立函数文件f3c.m。function c=f3c(f)c=5*(f-32)/9然后在MATLAB的命令窗口调用该函数文件。clear;y=input(Input Fahrenheit temperature:);x=f3c(y)function Cha1demo4_7global mu TT=283:10:353;M=2000;D=0.5;density.A=0.3471;density.B=0.2740;density.Tc=647.13;density.n=0.28571;Rho=(density.A.*density.B.(-(1-T./density.Tc).density.
23、n)/0.2323mu.A=-10.2158;mu.B=1.7925e3;mu.C=1.773e-2;mu.D=-1.2631e-5;Mu=viscositydeltP=(M1.8)*(Mu.0.2)./(20000*D4.8.*Rho)%-function vis=viscosityglobal mu Tvis=10.(mu.A+mu.B./T+mu.C.*T+mu.D.*T.2);管道压降的计算函数函数句柄创建一个函数句柄,可用于保存函数的所有信息,以便将来对它进行调用。函数句柄可以作为参数传递给其他函数,或与feval函数一起使用,以调用该函数句柄所属的函数。使用函数句柄还可以减少定义函
24、数的文件个数,改善重复操作的性能,保证函数计算的可靠性。funhandle=function_name%function_name为用户指定的函数名 管道压降的计算函数function Cha1demo4_5T=283:10:353;M=2000;D=0.5;density.A=0.3471;density.B=0.274density.Tc=647.13;density.n=0.28571;Rho=(density.A.*density.B.(-(1-T./density.Tc).density.n)/0.2323mu.A=-10.2158;mu.B=1.7925e3;mu.C=1.773e
25、-2;mu.D=-1.2631e-5;Mu=feval(viscosity,mu,T)%Mu=viscosity(mu,T)deltP=(M1.8)*(Mu.0.2)./(20000*D4.8.*Rho)%-function vis=viscosity(mu,T)vis=10.(mu.A+mu.B./T+mu.C.*T+mu.D.*T.2);程序的组成数据输入运算数据输出变量变量数学运算关系运算逻辑运算流程控制图形输出文件输出屏幕输出文件输入键盘输入Script文件或函数文件MATLAB关系运算符关系运算符运 算符 号运 算符 号大于大于小于小于=小于等于小于等于0)L2=A0L3=AL4=A
26、-2&A1L5=A=B&L1运行结果:A=-3 -2 -1 0 1 2 3B=3 2 1 0 -1 -2 -3L1=1 1 1 1 0 0 0L2=0 0 0 1 0 0 0L3=0 0 0 1 0 0 0L4=0 0 1 1 0 0 0L5=0 0 0 1 0 0 0运算优先级:1)括号2)逻辑否3)乘除4)加减5)关系运算6)逻辑运算7)先决与8)先决否高高低低MATLAB关系运算函数关系运算函数isempty数组是否为空isequal两个数组是否相等any数组有非零元素则结果为1all数组元素全非零则结果为1find数组非零元素的下标isscalar是否为标量isvector是否为向量i
27、snan是否为非数isinf是否为无穷isfinite是否为有限for循环结构for i=1:10 x(i)=i;endxfor 循环变量=表达式1(初值):表达式2(步长):表达式3(终值)statements(语句组)end字符串:包含在一对单引号中的字符集合为了得到高效代码,应尽量提高代码的向量化程度,避免使用循环结构为了得到高效代码,在循环指令之前应尽量对数组进行预定义while循环结构while cndition(表达式)statements(执行语句组)endFibonacci数组的元素满足Fibonacci规则:ak+2=ak+ak+1,(k=1,2,.);且a1=a2=1。求该
28、数组中第一个大于10000的元素。a(1)=1;a(2)=1;i=2;while a(i)=10000 a(i),break;endendi可以用break语句强制终止循环的运行switch-case结构switch-case的一般格式:switch test_expr%测试表达式test_expr可以是标量或字符串case value statements 当test_expr值是value时,执行该语句组case value1,value2,statements 当test_expr值是value1或value2或时,执行该语句组otherwise,statementsendswitchc
29、aseotherwise语句的能力与ifelseend语句类似,但对多重选择的情况switch语句使代码更加易读。try-catch结构try-catch的一般格式:try statements 此组语句总被执行。若正确则跳出此结构catchstatements 当上组语句出现执行错误后,该组语句被执行end当两组语句都出错后,Matlab将跳出该结构可以采用lasterr函数查询出错原因 N=4;A=1 2 3;tryA_N=A(N)catchA_N=A(end)endlasterrA_N=3ans=Index exceeds matrix dimensions.1.求解猴子吃桃问题。猴子在
30、第一天摘下若干个桃子,当即吃了一半,又感觉不过瘾,于是就多吃了一个。以后每天如此,到第10天再想吃时,却发现就只剩一个桃子。请编程计算第一天猴子摘的桃子个数。解答:x=1;for i=9:-1:1 x=2*(x+1);end X 2.根据,求:(1)y3时的最大n值;(2)与(1)的n值对应的y值。解答:y=0;n=0;while y3 n=n+1;y=y+1/(2*n-1);endy=y-1/(2*n-1)n=n-13.输入一个百分制成绩,要求输出成绩等级A,B,C,D,E。其中90100分为A,8089分为B,7079分为C,6069分为D,60分以下为E。要求:(1)分别用if语句和sw
31、itch语句实现。(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。解答:(1)x=input(input x(0=x=0&x=100&isnumeric(x)if x60 disp(the score is E);elseif x70 disp(the score is D);elseif x80 disp(the score is C);elseif x90 disp(the score is B);else disp(the score is A);end else disp(input error!);end(2)x=input(input x(0=x=0&x=
32、100&isnumeric(x)switch fix(x/10)case 0,1,2,3,4,5 disp(the score is E);case 6 disp(the score is D);case 7 disp(the score is C);case 8 disp(the score is B);case 9,10 disp(the score is A);end else disp(input error!);end本讲小结1)Matlab的基本数学运算符和运算函数的使用注意区别矩阵和数组的乘、除、乘方运算2)Matlab函数文件的基本形式及其调用3)字符、单元数组、结构体的定义4)Matlab的流程控制语句