MATLAB与VC++混合编程在悬置系统优化平台中的应用*

2012-08-20 05:18雷芳华刘博良
网络安全与数据管理 2012年4期
关键词:固有频率编程模态

雷芳华,孙 宁,刘博良

(桂林电子科技大学 机电工程学院,广西 桂林541004)

在工程计算中,多数工程的实现几乎都要涉及多目标函数的优化,常规的解决办法是运用MATLAB或VC++软件进行编程计算,但目前这些软件都还存在一些不足。一方面MATLAB虽有强大的计算能力和强大的数据处理能力,但是由于程序不能脱离其MATLAB环境运行,限制了程序的通用性和应用开发,不利于后续编程;另一方面Visual C++程序的代码运行效率高,界面设置交互性也比较好,但是由于在函数计算能力方面的不足,很大程度上加大了编程人员对一般数学函数和算法的工作量。通过合适的编译器,结合MATLAB和Visual C++混合编程能有助于界面开发和代码重用,而且算法精确度高,可扩展性强,混合编程连接性较好[1]。

近年来随着动力总成悬置系统设计工程的发展,绝大部分研发人员在系统设计时以系统的固有频率和解耦程度为合理设计目标,运用MATLAB的GUI界面实现优化面板设计,这在一定程度上可以很好地提高运算能力,但却制约了程序升级和改进的可扩展性能力。针对这些工程问题,本文提出了一种基于MATCOM转换法的VC++与MATLAB混合编程。传统的VC++与MATLAB混合编程一般是在VC++环境下调用MATLAB编写的函数,在函数参数传递方面多用MATLAB编写优化算法函数,总是将目标函数的匿名函数作为其参数之一,以此来达到优化目标函数的目的。然而在C++语言中是不能将函数作为参数调用的,关于VC++与MATLAB混编参数调用这方面的文章也相当少,本文提出了一种解决上述参数调用的方法。由于混编后的程序可以脱离MATLAB运行,程序的速度和效率都得到了极大的提升。本文充分发挥MATCOM转换法的优势,将高难度的算法研究与实际应用结合在一起,达到了程序简洁、编程效率提高和算法更易实现的目的。

1 悬置系统优化分析

1.1 悬置系统优化原理分析

一般情况下,都是把动力总成视为刚体,同时把动力总成悬置系统视为有3个移动自由度和3个转动自由度的一个空间6自由度振动系统,对应6个模态,包括前后移动模态、左右移动模态、上下移动模态、横向转动模态、纵向转动模态和左右转动模态,悬置系统模型如图1所示。

在动力总成上建立一个动坐标系G0-XYZ,原点G0位于动力总成质心,系统动力模型通过三个具有三向弹性(阻尼)的元器件支承,刚体的广义坐标为 x、y、z及绕X、Y、Z 轴的转动 θx、θy、θz,记做 q。 在悬置系统中,阻尼能有效地减少系统的振动,由于阻尼对固有频率和解耦程度的影响较小,一般可以忽略不计。可以根据上述动力总成悬置系统力学模型建立6自由度无阻尼自由振动方程:

目前应用比较普遍的模态解耦度评价指标是用模态的能量比值概念来表示的。第j阶振型中第k个自由度的振动能量占该阶运动总能量的百分比可以表示为:

式中 φj为第 j阶振型向量,ek为第 k个元素为 1的 6阶单位列向量。

在一个频率下,一个模态能量占到总能量的98%即表明这个模态能量非常强,在实际工程中,一般情况是难以达到这种解耦度的。一般来说,如果在某个频率下,一个模态的能量占到总能量的85%以上,则这个模态与其他模态的解耦程度被视为满意,对于横向转动模态一般要求要高些,期望达到90%以上[2]。

1.2 基于MATCOM转化法混合编程原理分析

MATCOM是MathWorks公司开发的为MATLAB中的m文件进行高效解释和调试的集成开发环境。MATCOM最主要的功能是能够将m文件按照与C++语法的对应关系翻译为cpp源代码,并通过Visual C++将其编译成可执行程序(exe)或动态链接库(dll),这样既保持了C++的优良算法,又保持了C++的高执行效率。

利用MATCOM实现MATLAB与VC++之间的混合编程,具体实现方法有以下3种可供选择:

(1)利用MATCOM生成独立执行的exe文件。但不能脱离MATLAB的后台支持;

(2)利用MATCOM生成动态链接库(dll)文件;

(3)利用MATCOM的组件VisualMatcom实现在Visual C++6.0环境中直接对m文件进行编译,这种方法与第二种十分相似,但应用起来更为简便[3]。

为了实现MATLAB与VC++之间的混合编程,本文采用第二种方法,以 MATLAB 7.1、MATCOM 4.5、VC++6.0和Windows XP为操作环境,具体转化法如图2所示。

图2 MATCOM转化法示意图

采用第二种MATCOM转化法,结合算例,将MATLAB中计算函数的m文件转化为VC++可识别的文件;接着,通过创建VC++工程,将所需文件加入工程目录中。

2 VC++与MATLAB混合编程的实现

2.1 算例分析

本文将针对某国产自动档车型的振动问题,分析基于遗传算法的动力总成悬置系统多目标刚度优化,优化的目标为9个刚度设计变量,以解耦度最大为最佳优化目标,此平台采用加权系数法对6自由度解耦度进行加权,形成适应度函数如下:

式中 w1,w2,…,w6为权值,且 w1+w2+…+w6=1,digi表示 i方向上最大解耦度(i=1,2,…,6)。

基于遗传算法,优化的目标是使得f适应度值最大,交叉概率和变异概率分别取0.3、0.2,种群染色体个数设置为30,优化代数设置为400,约束条件设置固有频率在6 Hz~18 Hz之间,相邻固有频率最小为1 Hz。为了便于动态分析和实现混合编程,同时给出了悬置系统的基本参数。表1是动力总成质量和惯性参数,表2为悬置系统位置和安装方向角参数。

表1 悬置系统的惯性参数

表2 悬置系统的位置和安装方向角

2.2 实现混合编程

实现方法是运用MATCOM生成动态链接库文件,这种方法在实际工程中使用较多,运用也比较灵活,易于实现MATLAB与VC++之间的函数、参数之间的传递。最好的情况是能直接使用MATCOM编译生成cpp文件,而不是直接使用dll文件[4]。下面以悬置系统优化为例进行说明,步骤如下:

(1)在 MATLAB中生成 m源文件,通过 MATCOM编译器在当前目录文件夹中生成三种4个VC++可识别的文件,然后添加到VC++工程目录下。在实现混合编程之前,根据MATLAB编程规则,在软件中实现编写求解固有频率和解耦度的m程序文件,其程序主要部分如下所示:

其中,m2、X、U、r、J为输入数组,是从 VC++编辑框输入传给jieoudu函数的要进行求解固有频率和解耦度的参数,特别需要注意的是逆矩阵函数和eig函数,如果这两个函数在C++中实现,需要编辑大量的语句才能实现。

(2)创建一个名为 youhuapingtai,基于对话框的 MFC(exe)工程。

(3)将MATCOM编译器生成的4个文件拷贝到建立的工程youhuapingtai目录下。然后将拷贝的4个文件加入到VC工程中:工程→添加工程→文件。

(4)在youhuapingtaiDlg.cpp中进行主要程序编辑,其主要代码如下所示:

在函数 static void initialization()中,传递一个 cyunxingdlg类型的指针变量 ,编写了如下主要随机生成初始数据的子程序:

(5)一般在这种情况下编译会出现下列错误:fatal error C1010:unexpected end of file while looking for precompiled header directive。因此,需要进行下列设置:工程→设置→C/C++,选择precompiled headers选择第一或第二项:自动选择预补偿页眉。执行即可通过编译。

(6)运行程序,输入参数,点击“优化计算”按钮,再点击“显示优化结果”,出现计算结果显示平台。

应用MATCOM转化法改进MATLAB和VC++的混合编程的不足,如对class数据类型部分支持eval、feval等语句不能在C++中实现、图形窗口有些不尽人意等问题,在编程过程中,已经避免了运行出现以上的问题。

软件平台是基于MATCOM转化法的混合编程,在运算时,明显能感到其计算速度和效率的提高。结果中,固有频率和解耦度的输出结果也是相当满意的,在6个固有频率下,各模态的能量解耦度都能占到90%以上。

本文通过悬置系统优化平台无缝结合的实践运用,以及平台的稳定测试,解决了VC++在解决矩阵处理问题上的弊端,简化了编写程序的复杂性,同时也有效地提高了MATLAB在可移植性的底层编程功能和界面开发能力,对复杂算法的系统开发提供了一种强有力的技术支持。基于MATCOM转化法的VC++与MATLAB混合编程,其程序代码在编译后封装于链接库中,因此也有利于保护软件的著作权。

[1]绳晓玲,万书亭.MATLAB与VC混合编程及在振动故障分析中的应用[J].仪器仪表与分析监测,2011(2):25-27.

[2]庞剑,何华.汽车噪声与振动-理论与应用[M].北京:北京理工大学出版社,2006:280-283.

[3]王毅,樊明,何联.基于 Matcom的 MATLAB与 VC++混合编程分析[J].哈尔滨商业大学学报,2007,23(3):311-314.

[4]闻斌,崔建昆.MATLAB与Visual C++的联合应用[J].计算机与现代化,2004(2):14-15.

[5]刘维.精通 MATLAB与 C/C++混合程序设计[M].北京:北京航空航天大学出版社,2008:257-315.

猜你喜欢
固有频率编程模态
基于BERT-VGG16的多模态情感分析模型
多模态超声监测DBD移植肾的临床应用
翅片管固有频率的参数化分析及模拟研究
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
车辆CAE分析中自由模态和约束模态的应用与对比
总温总压测头模态振型变化规律研究
A novel functional electrical stimulation-control system for restoring motor function of post-stroke hemiplegic patients