微波仿真论坛附录COMSOLMultiphysics的MATLAB矢量计算基础18页
COMSOL-Multiphysics仿真步骤

COMSOL Multiphysics仿真步骤1算例介绍一电磁铁模型截面及几何尺寸如图1所示,铁芯为软铁,磁化曲线(B-H)曲线如图2所示,励磁电流密度J=250 A/cm2。
现需分析磁铁内的磁场分布。
图1电磁铁模型截面图(单位cm)图2铁芯磁化曲线2 COMSOL Multiphysics仿真步骤根据磁场计算原理,结合算例特点,在COMSOL Multiphysics中实现仿真。
(1) 设定物理场COMSOL Multiphysics 4.0以上的版本中,在AC/DC模块下自定义有8种应用模式,分别为:静电场(es)、电流(es)、电流-壳(ecs)、磁场(mf)、磁场和电场(mef)、带电粒子追踪(cpt)、电路(cir)、磁场-无电流(mfnc)。
其中,“磁场(mef)”是以磁矢势A作为因变量,可应用于:①已知电流分布的DC线圈;②电流趋于表面的高频AC线圈;③任意时变电流下的电场和磁场分布;根据所要解决的问题的特点——分析磁铁在线圈通电情况下的电磁场分布,选择2维“磁场(mf)”应用模式,稳态求解类型。
(2) 建立几何模型根据图1,在COMSOL Multiphysics中建立等比例的几何模型,如图3所示。
图3几何模型有限元仿真是针对封闭区域,因此在磁铁外添加空气域,包围磁铁。
由于磁铁的磁导率,因此空气域的外轮廓线可以理想地认为与磁场线迹线重合,并设为磁位的参考点,即(21) 式中,L为空气外边界。
(3) 设置分析条件①材料属性本算例中涉及到的材料有空气和磁铁,在软件自带的材料库中选取Air和Soft Iron。
对于磁铁的B-H曲线,在该节点下将已定义的离散B-H曲线表单导入其中即可。
②边界条件由于磁铁的磁导率,因此空气域的外轮廓线可以理想地认为与磁场线迹线重合,并设为磁位的参考点,即(21) 式中,L为空气外边界。
为引入磁铁的B-H曲线,除在材料属性节点下导入B-H表单之外,还需在“磁场(mef)”节点下选择“安培定律”,域为“2”,即磁铁区域,在“磁场 > 本构关系”处将本构关系选择为“H-B曲线”。
COMSOL_Multiphysics(FEMLAB)简介

一、简介
COMSOL Multiphysics(原FEMLAB)是一个专业有限 元数值分析软件包,是对基于偏微分方程的多物理场模 型进行建模和仿真计算的交互式开发环境系统。它为所 有科学和工程领域内物理过程的建模和仿真提供了一种 崭新的技术!
二维应用: •平面应力; •平面应变; •厚板分析; •轴对称; •欧拉梁;
三维分析: •固体; •欧拉梁;
•壳体;
在所有这些分析中,用户可以直接输入材料性质,也可以通过内嵌材料 库方便快捷地调用它们。同时,定义正交各向异性和完全各向异性材料 性质也是相当方便的。材料的性质可以是任意空间、时间或者其它变量 的函数。
结构力学模块的新特征:
¾塑性和非线性材料模型 ¾正交各向异性和完全各向异性材料 ¾粘弹性、粘塑性和类橡胶材料的大变形分析 ¾不同材料的局部坐标系统 ¾考虑模型初始应力和应变的模型 ¾多物理场中塑性求解运算和非线性材料模型
2. 热传模块
COMSOL Multiphysics的热传模块能解决的问题包括传导、辐射和对 流的任意组合。建模界面的种类包括面-面辐射、非等温流动、活性组 织内的热传导、以及薄层和壳中的热传导等。
3. 地球科学模块
COMSOL Multiphysics的地球科学模块包含了大量针对地下水流的简 易模型界面。这些界面允许快速、便捷地使用描述多孔介质流体的 Richards方程、Darcy定律、Darcy定律的Brinkman扩展,以及自由 流体中的Navier-Stokes方程。此外,该模块还处理了多孔介质中的热 量传输和溶质反应,模型库中几乎囊括了从多孔介质中油和气体的流动 到地下水流中的分布。
对于非均匀材料系统的热传导和对流问题可计算有效性质的材料表格作为放射性热源刻画等温线的界面可以添加热量耗散的选项其结果来自于孔内的流速和固体岔路的流体分叉对于开放式系统和多孔介质中流体流动的分析对于不同饱和程度的多孔介质使用已知的分析公式对实验数据进行差值并输入任意表达式以估测非线性的保持力和渗透性对于可流动和不可流动区域介质内流体建模的辅助系数例如化学传输性质的边边输入从计算结果中评估溶质的运动可预定以水动力耗散张量描述流量边界条件在点和边上设定时间控制的约束条件和流量从环境流体分析到石油工程研究领域的案例模型在comsolmultiphysics中问题的函数化包括非限制的多物理场耦合控制方程和定义材料属性的表达式
MATLAB电磁场与微波技术仿真

精彩摘录
《MATLAB电磁场与微波技术仿真》精彩摘录
《MATLAB电磁场与微波技术仿真》这本书是学习电磁场与微波技术仿真的必 备教材,其中包含了许多精彩的摘录,让我们一起来欣赏一下。
书中提到了MATLAB在电磁场与微波技术仿真中的应用。摘录中写道: “MATLAB是一种功能强大的数值计算软件,广泛应用于电磁场与微波技术仿真。 它提供了丰富的函数库和工具箱,可以方便地实现各种复杂的电磁场和微波技术 问题的仿真。”这段摘录强调了MATLAB在电磁场与微波技术仿真中的重要地位, 为读者提供了学习的方向。
MATLAB电磁场与微波技术仿 真
读书笔记
01 思维导图
03 精彩摘录 05 目录分析
目录
02 内容摘要 04 阅读感受 06 作者简介
思维导图
本书关键字分析思维导图
电磁场
微波技术 matlab
详细 介绍
仿真
可以
matlab
仿真
电磁场 读者
分析
微波技术
进行
方面
内容
感兴趣
数据
非常
内容摘要
内容摘要
目录分析
《MATLAB电磁场与微波技术仿真》是一本深入浅出地介绍如何使用MATLAB进 行电磁场与微波技术仿真的书籍。该书不仅涵盖了电磁场与微波技术的基本原理, 而且通过大量的实例和练习,引导读者逐步掌握使用MATLAB进行仿真的技巧。在 本书中,我们将对这本书的目录进行详细分析,以便更好地理解其结构和内容。
阅读感受
《MATLAB电磁场与微波技术仿真》读后感
在科技日新月异的时代,电磁场与微波技术作为现代通信、雷达、导航等领 域的关键技术,其研究与应用价值不言而喻。而MATLAB作为一种功能强大的数学 计算软件,其灵活性和实用性在科学研究领域有着广泛的应用。《MATLAB电磁场 与微波技术仿真》这本书,便为我们提供了一个全新的视角,将两者完美结合, 为读者展现了一个丰富多彩的仿真世界。
基于Comsol Multiphysics电极电位分布的仿真研究

1引言使用计算机模拟物理学问题能帮助学生更深刻的理解物理学,帮助学生在学习中了解和掌握使用计算机做物理学研究的一些基本手段,并学会如何根据具体的物理问题选择相应的研究方法[1]。
Comsol Multiphysics 是一款大型的高级数值仿真软件[2],广泛应用于各个领域的科学研究以及工程计算,模拟科学和工程领域的各种物理过程,Comsol Multiphysics 以高效的计算性能和杰出的多场双向直接耦合分析能力实现了高度精确的数值仿真。
利用Comsol Multiphysics 软件的AC/DC 物理场模块,可以仿真各种形状的电极构成的电流场,能够得到相应的电位分布图像、绘制等位线等,便于学生对静电场以及稳恒电流场的规律进行探究式学习,在实验教学中能起到很好的演示作用,并且根据仿真的结果能对各种电极的实际设计提供参考。
2Comsol Multiphysics 仿真2.1同轴圆柱电极电位分布同轴圆柱电极的电位分布的理论表达式为:U r =U 01n (b /r )1n (b /a )(1)其中a、b 分别为中心电极的半径和外圆环的内半径,U 0为同轴圆柱正负电极的电位差,r 为场点到电极中心轴线的距离。
对于实际测量的电极,其中a=7mm,b=50mm。
水作为导电介质,输入电压U 0=10V。
根据上述实验条件,运行Comsol Multi-physics 5.1软件进行仿真。
在空间维度中选择三维,组件下的几何体选择圆柱体,半径设置为55mm,高度设置为10mm,层1厚度设置为5mm,层2厚度设置为43mm,构建的几何模型如图1所示。
中心圆柱体和外圆环的材料设置为铜,两者之间的材料设置为水。
网格设置序列类型为物理场控制网格,单元尺寸设置为极端细化。
在物理场选项中选择AC/DC的电流(ec )物理场模块。
设置整个外圆环为接地端,整个中心电极为终端,终端类型为电压,电压设置为10V。
研究选项中选择稳态,经过软件计算后电流场的电位分布以颜色图例显示出来,等位线分布如图2所示。
COMSOL与MATLAB联合仿真的实现方法

COMSOL与MATLAB联合仿真的实现方法作者:赵晓磊齐秋菊郭春超来源:《中国新技术新产品》2014年第24期摘要:本文在分析COMSOL与MATLAB这两款软件特点的基础上,研究了COMSOL 与MATLAB联合仿真的方法,通过COMSOL与MATLAB之间的相互调用,实现了MATLAB与COMSOL的数据传递,并结合实例介绍了联合仿真的方案,通过这两款软件的联合仿真,提高了仿真效率。
关键词:联合仿真;COMSOL;MATLAB中图分类号:TP31 文献标识码:ACOMSOL Multiphysics是一款大型的高级数值仿真软件。
广泛应用于各个领域的科学研究以及工程计算,被称为“第一款真正的任意多物理场直接耦合分析软件”。
在模拟科学和工程领域的各种物理过程中,COMSOL以高效的计算性能和杰出的多场双向直接耦合分析能力实现了高度精确的数值仿真。
COMSOL是以有限元法(FEM)为基础,通过求解偏微分方程来实现真实物理现象的仿真。
目前已经在声学、生物科学、化学反应、电磁学、流体动力学、燃料电池、地球科学、热传导、光学等领域得到了广泛的应用。
尽管COMSOL在仿真方面能力强大,但是由于软件没有可以输入程序的功能,使COMSOL对于进行大量重复性工作时,如果全由人工进行,工作量非常大。
而COMSOL其实是起源于MATLAB的Toolbox,最初命名为Toolbox 1.0。
因此这两款软件之间相互兼容,可以联合起来进行仿真。
这样,利用 MATLAB 进行编程,实现COMSOL的建模、计算、后处理等工作。
1 COMSOL与MATLAB 联合仿真的实现方案1.1 COMSOL 与MATLAB 联合仿真环境的连接方式本文采用的软件是Matlab2011b和COMSOL 4.3,系统为Win7,64bit。
安装顺序为先安装MATLAB,然后安装COMSOL到MATLAB的子文件夹下,并勾选link to MATLAB选项。
《COMSOL Multiphysics有限元法多物理场建模与分析》_中文版

COMSOL Multiphysics 有限元法多物理场建模与分析序 言多物理场耦合模型及数值模拟在各领域的研究及应用正在快速地发展。
本书的读者可通过如下方式获得实用的信息,新的期刊、国际多物理场期刊(/)和ComsolMultiphysics 软件包(),同时可以访问中文网站( )以获取更多的中文资料及在线的视频教程,Comsol 软件对于复杂过程的耦合建模能力给用户呈现了广阔的应用空间。
本书整理了我近年来对Comsol Multiphysics 软件的应用体会,同时我也随着软件一起“成长”。
我最早的博士研究生中有一位在1995 年就开始使用Matlab 软件的PDE toolbox,该工具箱也就是ComsolMultiphysics (原Femlab)软件的前身,用于开发多相流电容层析成像重建算法。
我们早在2001 年就购买了Femlab 2.0 软件,她对有限元建模具有卓越的图形用户界面和扩充功能,我们用她来处理电动流和微通道流的混合。
我于2002 年六月首次提供了基于Femlab 2.2 的加强模块,随着一系列的深入技术交流,她最终发展为有限元方法的过程建模和仿真。
自从我们开发了更为有效的模块以及新模块实例,这个模块已经运行过八次,每一模块都引入了新的功能,并且我的研究团队已学会如何使用。
随着2005 年Comsol Multiphysics 3.2 的引进,Femlab 根本的改革牢牢地集中在多物理场模型建立的准确定位。
图形用户界面的操作界面以及给人的感觉已经改变了,所以很多对Femlab 一步一步的描述不再和现代软件版面设计相匹配。
处理例子的最好方法也不再是最初我用Femlab 的方法。
我们的许多模型是对Matlab代码生成的混合GUI 应用,随后是基本Matlab 程序设计步骤。
Comsol Multiphysics 的GUI 中新的内建工具和许多新特征一起给出了足够的功能,那些对Matlab 程序设计不是特别需要的。
Comsol和Matlab

Comsol和Matlab 联合仿真的⽅法
1.联合使⽤Comsol和Matlab的原因:
尽管Comsol在仿真⽅⾯能⼒强⼤,但是由于软件没有可以与ANSYS⼀样输⼊程序的功能,使Comsol对于进⾏⼤量重复性⼯作时,如果全由⼈⼯进⾏,⼯作量⾮常⼤。
⽽COMSOL其实是起源于MATLAB的Toolbox的,最初命名为Toolbox 1.0。
这两款软件,可以联合起来进⾏仿真。
这样,利⽤MATLAB强⼤的计算功能,可以实现通过MATLAB进⾏编程,实现Comsol的建模,计算,后处理等⼯作。
sol与matlab联合仿真的实现:
所⽤软件为Matlab2011b和Comsol 4.2,系统为win7,64bit。
安装顺序为先安装Matlab,然后安装Comsol到Matlab的⼦⽂件夹2011b\bin\win64下,并勾选link to matlab选项,地址为2011b⽂件夹。
安装完毕后,打开Comsol with matlab,会打开matlab界⾯,然后⼿⼯打开Comsol。
这两个软件就通过⼀个共同的服务器联系在⼀起了。
sol 和Matlab相互调⽤的⽅法:
Matlab调⽤Comsol模型⽂件:对于Comsol中已经建好的某个模型,将其保存为Matlab可调⽤的.M格式⽂件,然后在Matlab的⼯作路径⾥找到这个⽂件并打开即可;
Comsol调⽤Matlab模型⽂件:对于Matlab中通过M语⾔已经编好的M模型⽂件,运⾏(Run),在Comsol的File下找到“从服务器导⼊模型”即可。
微波仿真论坛_matlab feko

Matlab 与Feko软件混合目录•概述•模型的建立•EditFeko中控制卡的编辑•Matlab调用Feko 讨论•Matlab对Feko结果文件的处理Matlab调用Feko的几个要点•Matlab调用Feko的几个要点–在Matlab以如下形式调用Fekodos('prefeko OnespiralAnt');dos (‘runfeko OnespiralAnt');其中的OnespiralAnt为Feko工程文件的名称,prefeko和runfeko是Feko关键字符串,分别表示Feko预处理和Feko求解器–在Feko中生成的.pre和.out可以以文本的形式打开,所以在Mablab中可以象处理文本那样来处理这些文件:在Matlab定义一个变量,该变量对应于Feko的.pre文件中某一个变量(如:工作频率、几何模型的尺寸变量、模型旋转角等),这样,就可以用Matlab控制Feko中的这个变量,每改变一次该变量的值就可以重新生成一个新的.pre文件,然后调用runFeko运行新生成的.pre文件;同样,可以应用Matlab像处理文本一样来处理Feko的结果文件.out,来对仿真结果进行处理。
–Matlab生成的.m文件需要和Feko的工程文件、.pre文件及输出文件存放在同一文件夹中。
举例(单螺旋天线)•问题描述–以单螺旋为例来说明如何用Matlab控制Feko•可以在CadFeko中进行建模;•也可以在EditFeko中进行建模;(有些问题用EditFeko处理会非常方便)–Matlab可以控制Feko脚本文件.pre中的某个或某几个变量,在该例子中是控制螺旋天线的旋转角度#alpha–Matlab控制Feko的结果文件(.out),(要想很好的处理结果文件,必须对其格式非常清楚)读取内部的源阻抗数值目录•概述•模型的建立•EditFeko中控制卡的编辑•Matlab调用Feko 讨论•Matlab对Feko结果文件的处理螺旋天线的建立(CadFeko)•建立Feko工程文件“OneSpiralAnt”•双击Variables添加以下变量:freq=3.0e+10n=6.5, lambda=c0/freqD=lambda/pi,s=0.225*lambda,seg_len=lambda/15seg_rad=lambda/200tri_len=lambda/20.0a=0.75*lambda•点击图标添加螺旋曲线helix•点击图标把helix模型分成两部分选择小的一部分更名为:feed模型建立•点击图标创建地板ground网格剖分•选中所有模型点击图标进行模型合并,并把新生成的模型更名为spiral •把馈源位置的线元更名为feed•点击菜单“Mesh\create mesh”或按住键盘Ctrl+M进行网格剖分目录•概述•模型的建立•EditFeko中控制卡的编辑•Matlab调用Feko 讨论•Matlab对Feko结果文件的处理EditFeko处理•按住Alt+2进行预处理,并保存工程文件•按住Alt+1调出EditFeko•在IN卡下边添加FM卡•在FM卡下边添加“#alpha=0”•然后添加TG卡** TG卡用来控制模型的平移与旋转,在该项目中,我们是把该基本模型沿y轴旋转#alpha角度,初始值是0度•修正FR卡•添加A1卡•添加FF卡•所有的控制卡添加完毕后保存该文件Spiral.feed目录•概述•模型的建立•EditFeko中控制卡的编辑•Matlab调用Feko 讨论•Matlab对Feko结果文件的处理Matlab部分处理•点击Matlab程序中的M-file editor或先进入Matlab主程序,在主程序中点击菜单“File\New\M file”进行.m文件的制作部分(可以命名为OneSpiralAnt.m)•第一步添加如下命令clear all; %清除工作间的变量和函数•第二步添加循环(该循环的目的是为了得到不同的旋转角alpha,循环变量用i表示,i的变化范围是从1到5,步长为1,alpha表示为10*i)for i=1:1:5第一部分:初始化变量部分;第二部分:文件的读写部分;第三部分:生成新的脚本文件;第四部分:Matlab中调用Feko;end % 结束for循环•第一部分:变量的初始化special_str_1='prefeko ';special_str_2='runfeko ';project_name=' OneSpiralAnt_';prestr='#alpha='; % Initialise a variable for special string注释:变量special_str_1、special_str_2和project_name是为了最终装配最终的字符串形式“runfeko OneSpiralAnt_1.pre”而设定的,因为在循环中,我们是以OneSpiralAnt_1.pre、OneSpiralAnt_2.pre…OneSpiralAnt_5.pre的形式来存储脚本文件的,而且每循环生成一个.pre脚本文件,我们会运行一次Feko软件,这样处理就相对比较灵活了prestr变量是一个关键字符,用于存储模型的旋转角度•第二部分:文件的读写部分fid_r=fopen(‘OneSpiralAnt.pre’,‘r’); % Define a file reading point (定义读文件指针)fid_w=fopen(‘OneSpiralAnt.tmp’,‘w’); %Define a file writting point (定义写文件指针)while ~feof(fid_r) % while not the end of the file (如果不是文件的结尾就继续循环)line_r=fgetl(fid_r); % get each line value (遍历每一行的值)g=strfind(line_r,‘#alpha=’); % whether this line need be modified(是否是需要修改的那一行)if g>0 %如果是需要修改的那一行,则在if…end区间修改这一行的值newvalue=num2str(10*(i-1));line_r=strcat(prestr,newvalue); % modify this line's value, line_r=‘#alpha=10’or 20…end% 通过fprintf语句把line_r的值写入fid_w指向的文件OneSpiralAnt.tmp中fprintf(fid_w,'%s\n',line_r); % write each line to the file 'OneSpiralAnt.tmp' end %end while (结束读写脚本文件循环)fclose(fid_r); % close file reading point (关闭读文件指针)fclose(fid_w); % close file writting point (关闭写文件指针)•第三部分:生成新的脚本文件% get and save each .pre file in the form of OneSpiralAnt_1.pre,OneSpiralAnt_2.pre...% 我们需要生成的文件的名称分别为OneSpiralAnt_1.pre,OneSpiralAnt_2.pre,OneSpiralAnt_3.pre, % OneSpiralAnt_4.pre以及OneSpiralAnt_5.pre% new_file_name分别为OneSpiralAnt_1.pre, OneSpiralAnt_2.pre, OneSpiralAnt_3.pre…new_file_name=strcat('OneSpiralAnt_',num2str(i));new_file_name=strcat(new_file_name,'.pre');% 把文件OneSpiralAnt.tmp中的内容拷贝到new_file_name中,即生成上边提到的5个.pre文件中copyfile('OneSpiralAnt.tmp',new_file_name);•第四部分:Matlab调用Feko% Assemble the “prefeko OneSpiralAnt_i.pre”stringsspecial_str_1=strcat(special_str_1,project_name);special_str_1=strcat(special_str_1,num2str(i));special_str_1=strcat(special_str_1,'.pre');% Assemble the “runfeko OneSpiralAnt_i.pre”stringsspecial_str_2=strcat(special_str_2,project_name);special_str_2=strcat(special_str_2,num2str(i));special_str_2=strcat(special_str_2,'.pre');%invoke feko functions (通过dos函数调用prefeko、funfeko)dos(special_str_1); % dos(‘prefeko OneSpiralAnt_1.pre')dos(special_str_2); % dos('runfeko OneSpiralAnt_1.pre')%;完整的Matlab代码结果文件分析•打开Matlab 主程序,调出OneSpiralAnt.m 文件,然后点击菜单Debug\Run 或直接按F5开始运行,运行完毕后,•我们就得到了5个后缀为.pre 的脚本文件,5个PostFeko 文件(后缀为.bof,.fek )以及5个后缀为.out 的结果文件,它们分别对应不同的角度alpha ,分别打开*_1.fek, *._2.fek, *_3.fek,*_4.fek 和*_5.fek 可以看到模型随角度的变化alpha=0alpha=10alpha=20alpha=30alpha=40EditFeko文件中alpha 角度的变化alpha=0alpha=40 alpha=10alpha=20alpha=30目录•概述•模型的建立•EditFeko中控制卡的编辑•Matlab调用Feko 讨论•Matlab对Feko结果文件的处理•借用前边的项目文件OneSpiralAnt.cfx,OneSpiralAnt.cfm和OneSpiralAnt.pre。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附录 COMSOL Multiphysics 的MATLAB 矢量计算基础W. B. J. ZIMMERMAN 1,J. M. REES 21Department of Chemical and Process Engineering, University of Sheffield,Newcastle Street, Sheffield S1 3JD United Kingdom2Department of Applied Mathematics, University of Sheffield, Hicks Building, Sheffield矢量计算支撑了偏微分方程和它们的数值近似求解。
为了很好的使用有限元方法,建模人员应该掌握矢量计算基础知识。
本科毕业的工程师可能学过矢量计算的数学课程,但是由于没有碰到过矢量计算的实际应用,这时在工程建模中使用矢量计算就受到限制。
本附录介绍了所有COMSOL MULTIPHYSICS WITH MATLAB 中用到的矢量计算基础知识。
所以也可以将该附录当作是COMSOL MULTIPHYSICS WITH MATLAB 多变量微分计算的入门读本。
当我们写该附录时曾经争论过是否将这部分内容直接加入到第一章(数值分析基础)中,因为导数的数值近似是偏微分方程求解的基础,而偏微分方程是COMSOL MULTIPHYSICS 的基本运算单元。
确实,在学习波谱法求解偏微分方程时,基本理论就是“导数理论”——如何使用波变换方法来近似导数。
所以通过对比发现,有限元方法的基础就是数值微分。
所以争论就不存在了,第一章主要是关于COMSOL MULTIPHYSICS 直接计算的基本问题的。
但是不管多有用,近似导数仍然只是建模的一个中间步骤,不是目标本身。
我们这里只考虑用于矢量计算的MATLAB 基础,本附录的重点在于特征值分析和逻辑表达式。
这些在整本书中都有体现。
应当注意到我们这里介绍的每个功能都可以在COMSOL Script 中实现。
本书中唯一不能在COMSOL Script 中实现的Matlab 命令就是fminsearch 。
1.矢量回顾1.1 矢量表达FEMLAB 可以处理标量、矢量和矩阵数据,这里简单介绍一下矢量的表达(作为MATLAB 矩阵数据类型的一个特例)。
标量可以作为一个单独的数,但是矢量是具有大小和方向的。
在如图1所示的右手坐标系系统中,向量a 用以下形式表达:123123(,,)a a a a a a =++=a i j k a (1)这里i ,j 和k 是坐标方向的单位矢量,1a ,2a ,3a 是向量a 在各轴方向上的分量。
它们是a 对各单位矢量i ,j 和k 的投影。
对于坐标系中的P 点(x ,y ,z ),矢量P 对于初始坐标系统O 的位置为:(,,)x y z x y z =++=r i j k(2)MATLAB 用分量的形式描述列矢量或行矢量:>> a = [1; 2; 3]; % column vector>> a = [1 2 3]; % row vector在行向量中,空白(任意连续空格)作为分界符。
列向量用分号或者回车符分界:>> a = [12 3];1.2 内积,矩阵乘法,单位矢量和矢积典型的内积(或点积)定义为:31122331cos i i i a b a b a b a b a b θ=⋅==++=∑a b(3)这里θ是矢量a 和b 的夹角。
为了在MATALB 中达到相同的目的,我们使用*运算符:>> a = [1; 2; 3]; >> b = [-3 2 -1]; >> b*a ans = -2这是一个行向量(1×3矩阵)乘以列向量(3×1矩阵)的特殊情况。
因为前者的列数和后者的行数相等,这两个矩阵是相容的,可以根据矩阵乘法通用法则计算。
()1nij jk ik j AB A B ==∑(4)如果A 是m ×n 矩阵,B 是n ×l 矩阵,则AB 是m ×l 矩阵。
如果共用的维数不同,那么矩阵不相容,不能定义乘法运算。
MATLAB 也可以将标量乘法作为特殊矩阵乘法来计算,但是必须考虑矩阵的相容性。
例如>> a*b ans =-3 2 -1 -6 4 -2 -9 6 -3出现了什么情况?很简单,a 是3×1矩阵,乘以1×3矩阵b ,得到的ab 是3×3矩阵。
()111nij jk i k ik j ab a b a b ===∑(5)对于向量,矩阵(ab )ik 称为a 和b 的并积或并矢。
这是矩阵外积的特殊情况,这里标量乘积也算内积。
在MATLAB 中通过转置运算符“’”可以实现两个行向量或两个列向量的内积,它是一个一元运算符,容易被误解为英语中的缩写符号。
ans =-2 but>> a*b’ans =-3 2 -1-6 4 -2-9 6 -3仍然产生并矢。
必须自己考虑矩阵的相容性。
如果a和b是行向量,那么'b*a 或a*'b将产生内积还是外积?出于这个原因,MATLAB提供了一个特殊的dot 函数来取消这种相容性的差别。
>> help dotDOT Vector dot product.C = DOT(A,B) returns the scalar product of the vectors A and B.A andB must be vectors of the same length. When A and B are bothcolumn vectors, DOT(A,B) is the same as A’*B.DOT(A,B), for N-D arrays A and B, returns the scalar productalong the first non-singleton dimension of A and B. A and B musthave the same size.DOT(A,B,DIM) returns the scalar product of A and B in thedimension DIM.See also CROSS.Example.>> dot(a,b)ans =-2>> dot([1; 2; 3],[-3 2 -1])ans =-2使用dot函数使得行/列向量的组合不受影响。
向量值向量的值或模可以通过下式计算:1/221njja=⎛⎫== ⎪⎝⎭∑a(6) MATLAB通过下式计算向量的模。
ans =3.7417or with the built-in command norm>> norm(a,2)ans =3.7417这里sqrt( )是预置的平方根函数。
单位向量单位向量是模为1的向量。
单位向量可以通过归一化处理得到,即:ˆ=aaa(7)例如,>> ahat=a/norm(a,2) ahat =0.2673 0.5345 0.8018以上除法是标量除法,是矢量的每个元素除以标量。
COMSOL Multiphysics 通常根据预置的几何单位向量来描述边界。
nx ,ny ,nz 通常作为边界上指向外部的单位矢量。
较少使用tx 和ty 作为边界曲线的切线矢量。
通常二维表面有两个正交切线方向,所以有无穷多个切向矢量。
叉积叉积定义如下:31ˆˆsin ijk j k i i na b e θε=⨯==∑a b a b (8)这里ijk ε是置换张量,当指数ijk 为123的正置换时取+1,当是123的负置换时取-1,其它情况均为零。
ˆn是包含a 和b 的平面内的单位标准向量。
ˆi e 是第i 个坐标方向的单位向量。
MATLAB 提供了一个特殊的函数来计算叉积。
>> help crossCROSS Vector cross product.C = CROSS(A,B) returns the cross product of the vectors A and B. That is, C = A x B. A and B must be 3 element vectors.C = CROSS(A,B) returns the cross product of A and B along the first dimension of length 3.C = CROSS(A,B,DIM), where A and B are N-D arrays, returns the cross product of vectors in the dimension DIM of A and B. A and B must have the same size, and both SIZE(A,DIM) and SIZE(B,DIM) must be 3. See also DOT. For example, >> cross(a,b) ans =-8 -8 8 >> cross(b,a) ans =88-8我们看到叉积中的因子阶数决定了叉积的正负号,等效于改变了单位标准向量ˆn的方向。
1.3 数组:简单数组,元包数组和结构体数组处理本质上就是从FEMLAB中提取数据。
为方便起见,FEMLAB对于多物理场采用fem结构体组织模型,对于扩展多物理场采用xfem结构体组织模型。
从结构体和元包数组中提取有用信息是访问FEMLAB模型(和结果)的一个非常有用的方法。
简单数组数组有维数(m×n×l…)。
矩阵是二维数组。
每个维数都有长度。
所以size( )和length( )是两个非常有用的命令。
>> a = [ 1 2 3 4; 5 6 7 8];>> size(a)ans =2 4数组的尺寸本身就是一个行向量,它的长度等于数组的维数。
>> length(a(1,:))ans =4第二个自变量的冒号(:)表示包括第二维的整个范围,在本例中表示元素1到4。
>> length(a(:,3))ans =2>> a(1,2:4)ans =2 3 4实际上冒号相当于低维数的子数组。
a(1,:)是第一行;a(:,3)是a的第三列。
a(1,2:4)给出了第1行2到4列元素组成的子数组。
对于更高维数情况,提取出的子数组更加复杂,例如:>>b=ones(2,2,2)b(:,:,1) =1 11 1b(:,:,2) =1 11 1>> b(1,:)ans =1 1 1 1前两种情况下子数组是矩阵,第三种情况下最终两个维数聚集成一个简单的行向量。