1、工程师热爱 Mathcad 在我六年的工科学习生涯中没能接触到 Mathcad 无疑是巨大的遗憾,六年中我都以稿纸、计算器、 Matlab展开我的工科学习、电路设计等等,甚至有时不得已我还得用我为数不多的 C 语言知识写个简单的小程序。 由于工作需求接触开关电源,不得不看些开关电源设计的书籍,在 其中一本获益匪浅的书籍精通开关电源设计中认识了 Mathcad 软件,该书的作者 Sanjaya Maniktala 所有的计算都是采用 Mathcad 进行的,他在他的另一本书籍开关电源故障诊断与排除中也提到“一旦你克服最初的困难制作完成一张经过验证的电子数据表,那么以后的生活就轻松了 (而且更精确
2、了 )。按下一个键,你就能完成重复性的工作,无需每次都重新做计算,错误也不会成比例地增加。” 在我短短三年的工程师工作中,每一次使用 Mathcad 都觉得这句话是 真理,因为我极度厌恶重复性工作,可是我发现 用稿纸做 稍微 复杂 的 计算时,每次改一个参数全都得重新计算一遍,而且有时手算的稿纸会找不到,然后又要重 新推导一遍 。 Sanjaya 还说“也许你偏好使用 Matlab、 Excel 或其他软,我的选择是 MathCAD(因为我只会用这个软件 ),它完全满足我的要求。我发现可以很容易地用它生成一份易读而清晰的报告,或者为我的应用团队准备一份简单的学习指导,甚至以文本的形式发给有需要
3、的客户。 ” 是的,对于工程师而言, Mathcad 所提供的功能不只是足够而是很多,而且它还很好用 ,特别是计算式的键入很方便,事实上我现在就算是计算 1+1 等于几这样的简单的算式,我都是用 Mathcad 进行的,计算器实在是很麻烦,而 Mathcad,打开进 入其工作界面,输入 算式就 OK 了 。 先简单介绍下 Mathcad 的工作界面,我用的是 14 你可以用鼠标左键把所有的工具栏都从上方拖出来,像下面那样, “标准”“格式化”“数学”“自定义字符”“资源”“控件”“调试” ,还有更多的工具栏可以从“视图”菜单下找到哦。 这些工具栏的功能可以参见本帖上传的 用户指南,里面有很全面
4、详细的说明,我主要说一下数学工具栏,其他的工具栏都不会也没关系,数学工具栏一定要了解。 这个文件我也传上来了,其实如果你认真参考这个文件,也就不用看这个帖子了。这部分简 单介绍就结束吧, 具体的大家还是参考用户 指南 ,真的都是中文啊,其实也可以一边使用,再根据需求有所侧重地到指南中去查找相关主题,这样效率更高 。 初级应用 Mathcad 非常简单,打开界面,鼠标在空白区域单击一下出现一个红色十字就可以开始编辑公式了,执行计算了。 一 将 Mathcad 当作计算器一样使用吧 比如你想计算一个半径为 3.3 的圆的面积,那就 在半角下 输入 ctrl+shift+p+I,*,3.32,=,就
5、可以了,你也可以在数学工具栏单击第一个符号,计算器工具栏,从中选择 数字直接键盘键入即可,半角符号下的 .即是小数点,键入符号中间不要插入空格或其他键。 蓝色直角所在的位置即是你当前可编辑的对象,算式被一个实线方框围住表示处于激活状态,可进行编辑,同样,若没有这个方框即处于不可编辑状态,此时你若想编辑该算式,可用鼠标单击该算式,一定要注意蓝色直角所包含的范围,它表示了你键入下一个算符时的操作对象,不理解我意思的童鞋可以自己尝试一下,用空格或者左右箭头操作蓝色直角的位置和范围。 这里的关键是要处于半角时编辑,如果你发现出现了奇怪的符号,那赶紧撤销,切换切换成半角。 还有些快捷键 操作可能需要多多
6、练习,不过即使不知道快捷操作,一样可以从计算器工具栏选择运算符。 下 面是进阶练习 ,假如你的圆半径发生变化,你希望在 Mathcad 中输入改变后的半径就能快速得到面积,这里就要定义一个变量了。比如你定义 R 作为半径变量,定义时输入 R + : +3.3,记得在半角下输入,对的:就表示给变量赋值,然后你会发现 R 符号下有一个绿色波浪符号,单击 R 会提示该表达式定义了一个 Mathcad 内置单元,这个不会影响计算,不过看着绿色波浪线很不爽,所以建议不要以单字母作为变量名,比如我们可以定义 R1=3.3,然后键入 S1 + : +ctrl+shift+p+i+R1+2+= 可以在算式双击
7、,弹出下面的结果格式窗口,设置计算出的结果的格式,设置小数位数或者分数,按照你的要求设置结果格式,一般默认即可。 一个算式编辑完可按 enter, 红色十字 便 切换到下一行,可以继续输入下一个算式进行计算了,当然你也可以用鼠标点击到自己想要编辑算式的位置 ,这里需要提醒的是 Mathcad 里你算式中用到的变量需要放在算式上面定义,若变量在算式下面,会提示该变量未定义。 常用快捷键操作: 乘法 键盘的 * 除法 键盘的 / 赋值 : 计算结果 = 乘此方 平方根 计算器工具栏中还有正弦 余弦 正切 对数等等常用计算,也可以通过键盘输入哦,不过记得加括号,还有正余弦函数均是以弧度为默认单位的,
8、不是度,所以要计算 90的正弦值不能用 sin(90) 必须要用sin(pi/2),更多的函数可以通过 插入 函数 调出函数工具栏来获得, 选中一个函数,下面会对函数功能以及变量类型,返回数据类型,关于使用函数最需要注意的是数据类型,范围,使用前应通过 mathcad 的帮助文件或者百度搞清楚,很多问题迎刃而解,比如论坛上这样的帖子 http:/ mathcad bode 图相位为什么会从 -180 度变到 180 度?减小 360度还是解决不了。这样问题看了总是很忧桑,这就是对函数没了解清楚就使用导致的。 另外,如果要对一个或几个算式做删除、剪贴、复制的操作,保持左键按下拉一个虚线框将带操作
9、算式置于该虚线框内,松开左键,算式周边是一圈虚线框,此时表示该算式可以执行 delete copy cut 等操作,鼠标放在被虚线框围住的算式上时鼠标会变成手状,此时可对算式进行拖拽。 http:/ mathcad bode 图相位为什么会从 -180 度变到 180 度?减小 360 度还是解决不了。 想解释下这个帖子所提出的问题,关于波特图的相频曲线为什么从 -180 度变到 180 度,很多人最初使用 Mathcad 绘制相频曲线时应该都遇到过这个问题。,我一开始也绘制出了那样的相频曲线,好着急。 那个出现 -180 度突变到 180 度因为用的 arg 函数, arg 函数在插入函数工
10、具栏的解释是 “返回复数 z在 -pi 与 pi 之间主值辐角,包括 pi。 ” .这句话都能看懂吧, arg 函数计算出的值在 -pi 到 pi 之间,换成角度也就是 -180 度到 180 度,所以说你觉得相位不从 -180 度变到 180 度,难道还指望相位从 -180 度继续减小到 -360 度么? 那怎么解决呢,那个帖子里其实有大师答复了,那就是用 angle 函数, angle 函数有两个参数,把你需要绘制相频曲线的那个函数的实部和虚部用 Re 和 Im 分别输进去, angle 函数返回值在 02pi 之间,所以还得乘以一个系数 180/pi,然后减去 -360,减 360 是因
11、为传递函数的相频特性曲线好像都在坐标轴下面啊。? 另外再提示一点,绘制相频曲线记得把 x 轴设置成对数坐标啊,双击图形弹出 x-y 图形的格式化选项就可以设置了。 再 扯点向量矩阵之类的内容吧,这个我用得也不多,不过一开始不会用函数,所以我的函数全是用向量实现的,好傻吧,现在那个开关电源的计算 文件里传递函数还是向量呢。 从数学工具栏的第三个图标调出向量矩阵工具栏,如下图所示 工具栏里的图标应该一看就了解了吧,矩阵应该很少用到, 我 用得比较多的还是 值域变量 ”mn”和下标 ”Xn”。 值域变量 的快捷键是键盘上的分号 ”;”, 下标的快捷键是键盘上的中括号 ”(要记住哦,记住会很方便 )。
12、 值域变量 是 Mathcad 中的一个特殊变量,不过真的很好用,值域变量定义一组一个值域内依序且有相同间隔的数字。若值域变量出现在 Mathcad 等式中, Mathcad 将针对值域变量中的每个值进行计算。 (这段解释真的好拗口,因为是抄过来的,大家自己到 Mathcad 试一下去理解吧 )。 然后我要举个例子,而且是个相对比较复杂的例子,也是我 自己 在使用 的一个采用值域变量计算传递函数的例子。 计算 boost 主回路的 Gvd 传递函数: 2 22222( ) 022( 1 ) ( 1 )()()() ( ) ( )( ) ( )1gCgLO LC C L CLvsLLLs sR
13、CV R D R Rvs D R RG v d sD R R C L R R R C R R LCd s D R R ssD R R D R R 当然,我们都知道 s 其实就是频率 f 的函数,所以首先定义 f 为值域变量: (输入 ”f”:”1”,”2”;”100000”, ”,”2”也可以不输入,默认的间隔是 1, ”100000”值则取决于你需要的频域范围,不建议定义过多无意义的点,可能会出现点太多无法绘制无法计算等问题,而且也不利于你观察关键范围的曲线,这就定义了一组从 1Hz 到 100kHz 且按照 1Hz 递增的频率点 ) 然后 以 f 为下标, 定义 s 为关于 f 的向量:
14、(输入 ”S” ” ”f” ”:” ”2” ”*” ”ctrl+shift+p” ”*” ”f” ”*” ”1” “j”,定义了一组基于值域变量 f 各个值的向量 ,那个输入 ”1”j”表示虚数,编辑框离开该等式后,显示为 ”j”,而不是 ”1j”) 然后与定义 Sf 一样定义 Gvdf : 等式中涉及到的 Gvd_dc frhp fesr 等都是需要提前定义的变量,对于一个参数确定的回路而言,这些 变量都是定值。 而等式中 min 就是用 ”.”形成的下标,仅起变量标识作用。 要绘制幅频特性 相频特性曲线,仅有传递函数还不够哦,还得定义下面两个函数: 二 . 用 Mathcad 绘图 还是从
15、数学工具栏,单击第二个图标,调出图表工具栏,如下图所示。 惭愧地说,这里面我真的只用过第一个功能, x-y 绘图 ,似乎觉得一般的工程计算, x-y 绘图完全足够了。单 击图表工具栏第一个图标 x-y 绘图,将会在 Mathcad 工作表红色十字位置处插入一个 x-y 绘图,如下图所示 其四周有个实线框,可用鼠标对该实线框下侧线中间和右侧线中间位置拖拽以实现绘图窗口的大小调整, 鼠标停在实线框变成一个手状时,鼠标的拖拽可调整绘图窗口的位置。在绘图外的地方用鼠标单击,该实 线框消失,绘图处于不可编辑状态,反之在绘图窗口单击实线框出现,绘图处于可编辑状态,可调整大小、 位置,可剪切、幅值、删除等
16、。 需要注意的是要对整个绘图剪切、复制、删除,必须在下图所示的状态下进行,上图所示的状态时无法对 绘图操作的,感觉有点像 找不同的游戏了,你们有没有注意到,两个图的蓝色直角位置是不同的,上图的 蓝色直角位于绘图 x 轴的中间,表示可编辑 x 轴参数,下图的蓝色直角函括了整个绘图,表示可对整个绘图 进行操作,可以在绘图范围内右击鼠标,执行剪切、复制操作,亦可以用键盘快捷键剪切和复制,也可用 Delete 键删除绘图。 关于那个蓝色直角位置怎么控制,大家自己操作看看吧,你自己会掌握的。 然后呢,可以在绘图区域双击鼠标,调出 x-y 绘图的格式化窗口,如下图 就不具体讲格式化窗口所有的功能了,后面还
17、有示例呢! 提一下关于次要 y 轴,就是说是可以有两个 y 轴 的,左侧一个轴,右侧一个轴,绘制 Bode 图就很有用了,一个轴绘制幅频曲线,一个轴绘制相频曲线,下 图就是这样的,对于两个函数共用自变量的情况这样绘图就特别利于观察。 两个 y 轴是彼此独立的, 分别 进行设置,当然你要在上面的格式化窗口内选择“启用次要 Y 轴”的多选框,就可以在绘图框的右侧输入 次要 y 轴的参数了。 例子来了,还是前面提到的式子 这是一个 Boost 拓扑主回路输出电压对控制变量及占空比的传递函数, 下面的几个式子是根据我的初始条件计算出的传递函数各参数值。 根据上面式子计算的参数值,我们现在有了下面这样一
18、个复数域的函数 (其实就是个基于 f 参数的向量哈 ),boost 输出电压对占空比的传递函数是个典型的带右半平面零点高 Q 值的系统。 下面我们就是要绘制这个函数的 bode 图,首先做好相关参数定义工作: 红色方框中的定义是很重要的,而且是可以照葫芦画瓢移植到其他需要绘制 Bode 图的任何文件中,然后输入我们要绘制 Bode 图的那个函数式: 对,就是上面的那个式子,输入到 Mathcad 的空白区域就是这个样子的了,非常直观清楚明了。 紧接着就是插入 x-y 绘图 了,怎么插入还记得吧,前面刚讲过的。插入绘图后,调整到合适的位置和大小,双击打开绘图格式化窗口,选中“启用次要 y 轴”
19、在插入的绘图 x 轴参数输入处输入 ”f”,左侧 y 轴参数输入 ”dB”(“”Gvd”f”)”,右侧 y 轴参数输入 ”Ph”(”Gvd”f”)”(x 轴参数输入处即 x 轴中间位置处那个黑色小方块,鼠标单击一下即可输入参数,其他 y 轴参数输入处以此类推 ),可得到下面的图 感觉很奇怪,对不对,不太像带一个右半平面零点的共轭复根的函数啊,其实是因为 x 轴还没设置成对数坐标,此时就是双击绘图调出绘图格式化窗口,如下图所示进行设置, x 轴选择两个复选框“对数比例”和“网格线”,其他的都是默认的,主要 Y 轴和次要 Y 轴的网格线都选中。 如此设置完,就是下面的图了,有点像了吧。 然后,那个
20、格式化窗口中,切换到跟踪选项卡可以设置线的线条形状、宽度、颜色等等 三 . 用 Mathcad 编程 单击数学工具栏倒数第三个图标,调出编程工具栏 基本操作可以参考 Mathcad 基础教程,我从教程里截了两个图贴在这儿 ,需要注意的是请尽量控制自己不要手动输入 if otherwise for 等操作符,有编程习惯的人应该都很难控制,不过 Mathcad 是无法识别你手动输入的 if 语句的,尽量采用编程工具栏插入操作符,最好单击了 Add Line 之后,在相应的程序行首先插入需要的语句,插入语句后再在相应的占位符 (就是一个黑色小方块 )输入算式、赋值、判断等,就编程而言操作上真的比不了
21、 vs,所以建议是涉及到复杂运算的简单程序用 Mathcad 来做,如果程序相对复杂还是用编程更便利的软件来做,毕竟 Mathcad 的优势在于计算上的便捷,编程功能也不过是为计算算式来服务的。 还是喜欢举例说明啊,现在来举个例子: 一个温度传感器,其输出电压与温度分段线性,如下图所示,然后我希望能够快速根据测得的电压算出其温度,分段线性的话我则必然需要编程来判断每一段。 上图中每一段是以温度起止来分的,而我现在的情况是已知电压,要计算温度,所以首先应该按照上面的分段参数计算每一段的起止电压,当然是用 Mathcad 计算,如下图所示, 计算过程都没有带单位,单位在心中,哈哈,温度就是,而电压
22、是以 mV 来算的。 然后就可以编辑程序了: 输入 “Tx(Vx)” “:”,单击编程工具栏的 ”Add Line”,如下图所示出现两个编程行 用鼠标单击第一行将蓝色直角切到第一行编程行,单击编程工具栏的 ”if”,插入 if 操作符,再将蓝色直角切到第二行,单击编程工具栏的 ”otherwise”,插入 otherwise 操作符 上图中每一个黑色小方块都是一个编辑域,需要输入相应的表达式, if 操作符右侧应输入条件判断语句,if 左侧应输入相应的赋值操作语句, otherwise 即表示不满足与其匹配的 if 条件,执行 otherwise 行的操作,其左侧应输入相应的赋值操作语句,根据需求应输入相关表达式为: Otherwise 操作符没有输入表达式是因为本例中共有七段,即 otherwise 的表达式内还需要嵌入多重 if 语句,将蓝色直角切到 otherwise 左侧,单击编程工具栏的 ”Add Line” 然后与之前一样操作就可以了, otherwise 下的两个程序行分别输入 if 操作符和 otherwise 操作符,输入相应的表达式, otherwise 操作符左侧的表达式则单击 ”Add Line” 后面都是类似,就不一步一步讲了,最后一步的 otherwise 左侧 输入表达式而不是增加新行,如下图所示