以添加voicebox为例(语音处理工具箱),首先下载工具箱,解压
把解压后的工具箱放到matlab的toolbox文件夹
打开matlab,点击file-set path,选择工具箱,这样就能在matlab使用该工具箱了
检验是否成功安装该工具箱,在命令行写入 help enframe
如果下面给出 enframe函数的帮助信息,则恭喜你,成功了
今天费了好大的劲终于将SVM_SteveGunn添加至我的matlab工具箱内,并且已能成功运行,现在把在添加以及运行中出现的各种问题罗列如下,并一一解决:
1、将下载的svm工具箱添加至matlab安装目录下
1、单独下载的工具箱
2、把新的工具箱拷贝到某个目录(我的是D:\soft\matlab2011b\toolbox)。
注意:你要是添加的很多个m文件,那就把这些m文件直接拷到再下一层你想要的工具箱的文件夹里
例如,我要添加的是支持向量机工具箱,在刚才的文件夹下我已经有svm(支持向量机工具箱)文件夹了,但有的m文件还没有,我就把新的m文件统统拷到D:\soft\matlab2011b\toolbox \svm目录下了。如果你连某工具箱(你打算添加的)的文件夹都没有,那就把文件夹和文件一起拷到D:\soft\matlab2011b\toolbox 下。
先把工具箱保存到MATLAB安装目录的根目录下面,然后运行matlab---->file---->set path---->add folder 然后把你的工具箱文件夹添加进去就可以了
3、在matlab的菜单file下面的set path把它( D:\soft\matlab2011b\toolbox \svm )加上。
4、 把路径加进去后在file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下。
记得一定要更新!我就是没更新,所以添加了路径,一运行还是不行。后来更新了才行。
2、在对svm工具箱进行使用时,发现了'qp.dll 不是有效的 Win32 应用程序 '
问题描述:
mex在不同windows OS下编译的结果,所以我们需要重新编译一下qp.dll
解决方案:
steve gunn 的包下面有一个optimiser 文件夹,把current Diretory目录改为optimiser目录,例如E:\matlabProgram\SVM_SteveGunn\Optimiser,然后运行命令
>>mex -v qp.c pr_loqo.c
命令运行完毕后,你会发现原先的qp.dll变为qp.dll.old,还出现了qp.mexw32,我们把该文件改为qp.dll 复制到工具箱文件夹下。原先的工具箱文件qp.dll可以先改一下名字...
3、我在运行第二步时发现了‘D:\SOFT\MATLAB~3\BIN\MEX.PL: Error: Compile of 'qp.c' failed. Error using mex (line 206)
Unable to complete successfully.
这个是因为编译器设置的问题,这里需要重新选择设置编译器,设置编译器的方法:
mex -setup(mex和-setup之间要有空格),然后我选择的VS2010,然后再继续运行步骤2就成功了。
TreeView控件应用实例:将TreeView绑定到Biblio.mdb数据库应用示例:DataTree.vbp本章的代码示例是从应用示例DataTree.vbpwhichislistedintheSamplesdirectory中得到的。可将数据库中的数据绑定到TreeView控件。下面的示例将TreeView控件绑定到Biblio数据库,该数据库可以在VisualBasicCD中找到。该应用实例将Publishers表作为树节点的第一层。如果一个出版商对应于一个或多个书名,则这些书名将作为该出版商的子节点加入树中。图2.42与数据绑定的TreeVew控件下面的代码用到了如下对象:DataAccessObjectLibrary(3.5)名为“frmDataTree”的Form对象名为“tvwDB”的TreeView控件名为“cmdLoad”的CommandButton控件将Biblio.mdb数据库绑定到TreeView控件在工程中添加对数据访问对象(DAO3.0)的引用。为Database和Node对象创建模块级的变量。在FormLoad事件中,用OpenDatabase语句将Database对象变量设置为Biblio数据库。用Nodes集合的Add方法创建顶层的节点对象。在CommandButton的Click事件中,创建两个Recordset变量,并将它们设置为Publishers和Titles表。用“DoUntil”语句为表中的每个出版商创建一个Node对象。对每个出版商,在Titles记录集中检查匹配的PubID字段;为每个匹配项添加一个子节点。在工程中添加对数据访问对象(DAO3.5)的引用要将数据库绑定到TreeView控件,必须先添加对当前版本的数据访问对象(DAO)的引用。为Database对象和Node对象创建模块级的变量由于需要在一个会话中多次访问Biblio.mdb数据库,如果创建一个模块级的Database对象,保持一个打开数据库,将有助于提高效率。此后,不需要打开数据库即可访问它。在窗体的声明部分,键入如下内容:PrivatemDbBiblioAsDatabase如果希望该数据库还可被其它模块使用,可以用Public语句,并重命名该变量,以表明它是全局的,例如gDbBiblio。在创建Node对象时,在Set语句中(如下所示)使用Node类型的变量。DimTempNodeAsNodeSetTempNode=tvwDB.Nodes.Add()虽然可以在添加Node对象时创建变量,更有效的方式是声明一个模块级的Node对象变量,并用它创建所有的Node对象。在上述声明部分再键入:PrivatemNodeAsNode用OpenDatabase语句将Database对象变量设置为Biblio数据库Form对象的Load事件中可以初始化Database变量。代码如下:SetmDbBiblio=DBEngine.OpenDatabase("BIBLIO.MDB")在成功地初始化Database对象变量后,就可以在该模块的代码中的任何位置自由地访问它了。FormLoad事件:用Nodes集合的Add方法创建顶层的Node对象至此,Database对象变量已经被初始化为Biblio数据库,现在可以创建树中的第一个节点,并将打开的数据库的名称赋予它。首先必须用Node集合的Add方法创建第一个Node对象。还要使用Set语句将其赋给mNode对象变量,如下所示:SetmNode=tvwDB.Nodes.Add()'创建第一个节点。mNode.Text=mDbBiblio.Name注意,在上面的代码中,在创建Node的同时用Set语句将其赋给了mNode对象变量。由于mNode变量现在包含了新创建的Node对象,可以对该Node对象的属性进行赋值。在上述情况下,Database的名称(即Database对象的Name属性)已经被赋给了新节点的Text属性。CommandButtonClick事件:创建两个Recordset变量,并将它们分别设置为Publishers和Titles表本应用实例假定存在名为“cmdLoad”的按钮,并且当用户单击它时,置入Biblio数据库中的两个表到TreeView控件中。为此,必须首先在该按钮的Click事件中声明两个DAO对象变量。第一个变量rsPublishers用来包含Publishers表。第二个变量rsTitles用来包含Titles表。下面的代码声明了这两个变量,并用OpenRecordSet方法将表赋给变量:DimrsPublishersAsRecordsetDimrsTitlesAsRecordsetSetrsPublishers=mDbBiblio._OpenRecordset("Publishers",dbOpenDynaset)SetrsTitles=mDbBiblio._OpenRecordset("titles",dbOpenDynaset)用DoUntil语句为表中的每个出版商创建一个Node对象现在有两个打开的记录集,可以遍历每个记录集,创建Node对象,并为该对象的Text属性赋予合适的值。首先,必须遍历Publishers表,并为该表中的每个出版商创建一个Node对象。下列简化了的代码可以用一句话概括为,“逐个处理每个记录,直到记录集的末尾:创建Node变量,并将Title字段的值赋给其Text属性,移到下一记录并重复”:DoUntilrsPublishers.EOFSetmNode=tvwDB.Nodes.Add(1,tvwChild)mNode.Text=rsPublishers!NamersPublishers.MoveNextLoop注意,在上面的Add方法中用了两个参数。第一个参数(1)是我们希望添加入节点的Node的Index属性。也就是说,希望所有的出版商节点成为第一个(根)节点(在Form的Load事件中创建的)的子节点。第二个参数使用了常数(tvwChild),该常数指定新的Node将成为编号为“1”的Node的子节点。对每个出版商,在Titles记录集中检查匹配的PubID字段;为每个匹配项添加一个子节点上面的代码将Publishers表的内容作为第一层填入TreeView中。然而,我们还希望能够进入更深一层,为每个出版商节点增加子节点。每个子节点代表该出版商印刷的一本书。为了做到这一点,如果有了对新创建的出版商节点(mNode)的引用,只要遍历Titles记录集,并检查每条记录的PubID字段即可。如果该字段与Publishers记录集中的PubID字段相匹配,则该书是由当前的出版商出版的。但是,在能够为mNode添加节点之前,还必须先将mNode的Index属性赋给一个变量(intIndex),如下所示:intIndex=mNode.Index然后就可以在Add方法中使用该变量了,Add方法需要用来加入子节点的Node对象的Index属性:SetmNode=tvwDB.Nodes.Add(intIndex,tvwChild)如下简化的代码可被表述为“直到Recordset的结尾:创建子Node对象,并将Title字段的值赋给它的Text属性;移动到下一记录并重复上述 *** 作”:DoUntilrsTitles.EOFIfrsPublishers!PubID=rsTitles!PubIDThenSetmNode=tvwDB.Nodes.Add(intIndex,tvwChild)mNode.Text=rsTitles!Title'Text属性。EndIfLoop完成代码上面的代码显示了用两个相关的表填成一个表的基本策略。全部代码如下:'必须设置对DAO3.5的引用。'在声明部分,声明模块级的对象变量:PrivatemDbBiblioAsDatabasePrivatemNodeAsNodePrivateSubForm_Load()'在Form_Load事件中,设置对象变量,'并创建TreeView控件的第一个Node对象。SetmDbBiblio=DBEngine.Workspaces(0)._OpenDatabase("BIBLIO.MDB")tvwDB.Sorted=TrueSetmNode=tvwDB.Nodes.Add()mNode.Text="Publishers"mNode.Tag=mDbBiblio.Name'设置Tag属性。mNode.Image="closed"'设置Image'属性EndSubPrivateSubcmdLoad_Click()'声明DAO对象变量,'并将记录集赋予它们。DimrsPublishersAsRecordsetDimrsTitlesAsRecordsetSetrsPublishers=mDbBiblio._OpenRecordset("Publishers",dbOpenDynaset)SetrsTitles=mDbBiblio._OpenRecordset("titles",dbOpenDynaset)'移到第一条记录。rsPublishers.MoveFirstDimintIndexAsInteger'用于索引的变量。'直到最后一条记录(EOF):添加一个Node对象,'并用Name字段作为新'Node对象的文本。DoUntilrsPublishers.EOFSetmNode=tvwDB.Nodes.Add(1,tvwChild)mNode.Text=rsPublishers!NamemNode.Tag="Publisher"'Tag标识该表。'为Key赋予唯一的IDmNode.Key=CInt(rsPublishers!PubID)&"ID"'将变量intIndex设置为新创建Node的Index属性。'用该变量将子Node对象加入当前Node。intIndex=mNode.Index'对这条记录,在Title表中查找与Titles记录集'中出现相同PubID的记录。如果找到这样的记录,'则在TreeView控件中加入Node对象,并将用所'找到记录的Title、ISBN和Author字段为新'Node对象的属性赋值。DoUntilrsTitles.EOFIfrsPublishers!PubID=rsTitles!PubIDThenSetmNode=tvwDB.Nodes._Add(intIndex,tvwChild)mNode.Text=rsTitles!Title'文本。mNode.Key=rsTitles!ISBN'唯一的ID。mNode.Tag="Authors"'表名。mNode.Image="leaf"'图象。EndIfrsTitles.MoveNext'Titles中的下一条记录。Loop'将rsTitles重新设置为Titles的第一条记录。rsTitles.MoveFirst'移动到下一条Publisher记录。rsPublishers.MoveNextLoopEndSub增加代码使用SQL语句创建较小的“Titles”记录集,可以对这个示例加以改进。下面的代码创建只包含相同PubID值的记录的记录集:SetrsTitles=mDbBiblio.OpenRecordset_("select*fromTitlesWherePubID="&_rsPublishers!PubID)然后该代码就只需对较小的记录集进行循环,因而效率比较高。修改后的代码如下:PrivateSubcmdLoad_Click()DimrsPublishersAsRecordsetDimrsTitlesAsRecordsetSetrsPublishers=mDbBiblio._OpenRecordset("Publishers",dbOpenDynaset)DimintIndexDoUntilrsPublishers.EOFSetmNode=tvwDB.Nodes.Add(1,tvwChild)mNode.Text=rsPublishers!NamemNode.Tag="Publisher"'标识表。mNode.Key=rsPublishers!PubID&"ID"mNode.Image="closed"intIndex=mNode.Index'对这条记录,使用查询创建Title表的记录集,'查询条件是所有包含相同PubID的记录。对结果记录集中'的每一条记录,在TreeView控件中加入一个Node对象,'并用记录的Title、ISBN和Author字段为新'Node对象的属性赋值。SetrsTitles=mDbBiblio.OpenRecordset_("select*fromTitlesWherePubID="&_rsPublishers!PubID)DoUntilrsTitles.EOFSetmNode=tvwDB.Nodes._Add(intIndex,tvwChild)mNode.Text=rsTitles!TITLE'文本。mNode.Key=rsTitles!ISBN'唯一的ID。mNode.Tag="Authors"'表名。mNode.Image="smlBook"'图象。'移动到rsTitles中的下一个记录。rsTitles.MoveNextLoop'移动到下一个Publishers记录。rsPublishers.MoveNextLoopEndSub欢迎分享,转载请注明来源:内存溢出
评论列表(0条)