声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1201|回复: 9

[混合编程] COM方法连接VC时是否不能调用神经网络函数

[复制链接]
发表于 2008-3-3 15:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我用的是MATLAB6.5+VC6.0
我用COM连接VC时 是不是不能调用神经网络函数  我在网上看了看 说是不能调用newff  我就改用trainbp 训练 也不行  应该怎么弄 请大家帮忙  是用6.5版本低吗  用别方法的接口 能调用吗

[ 本帖最后由 eight 于 2008-3-3 17:13 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-3-3 23:09 | 显示全部楼层

理论上应该是可以的

我当初用的是C#.net+matlab6.5,trainbp函数训练,是完全没有问题的。

有点不明白你的问题在于哪里,是com组件编译不了?还是在VC中不能调用?

如果是编译不能通过,建议你修改一下编译器,matlab自带的编译器和VC6编译器都试试,应该有一个能够通过。另外就是现在matlab中,把代码全部写入m文件,执行,确认无误后再编译。

如果是在VC中调用不成功,那就要好好研究一下库的调用。当时在C#中做的还算简单,有直接添加的选项。这个要看你C的功底了,一句两句帮不了你啊
 楼主| 发表于 2008-3-4 11:59 | 显示全部楼层
哦 谢谢拉 问一下 你那时也是 用的COM的吗 我做比较简单的 plot 这种到是 能调用 但是换成newff就不行 我又改为 trainbp还是不行  用COM编译时 怎么看是不是MATLAB是不是 通过了呀  不是很明白 我估计和VC应该没什么太大关系
发表于 2008-3-4 12:45 | 显示全部楼层
原帖由 etet-1234 于 2008-3-4 11:59 发表
哦 谢谢拉 问一下 你那时也是 用的COM的吗 我做比较简单的 plot 这种到是 能调用 但是换成newff就不行 我又改为 trainbp还是不行  用COM编译时 怎么看是不是MATLAB是不是 通过了呀  不是很明白 我 ...
你是中文没有学好还是懒惰?标点不打、段落又不分,一堆文字放上来不觉得很难看吗

[ 本帖最后由 eight 于 2008-3-4 12:46 编辑 ]
发表于 2008-3-4 14:24 | 显示全部楼层
是用com做的。

难道你是只调用了一个trainbp函数?你可以这样试试,写一段m文件,里面把需要训练的数据都输入好,然后训练,给出结果。在matlab中直接运行,如成功,则说明m文件这方面没有问题。

然后,将你这段m文件,改成一个函数,你可以先不传参数,编译成com组件。然后用vc调用,看是否成功。如成功,再传参数。

ps:com接口有很多细微的地方,比如,dll文件编译好后要注册,VC的数组和matlab的数组起始值不同(一个是0,一个是1)等等,都需要你自己注意。另外,多用debug工具,看看问题到底出在哪里

评分

1

查看全部评分

 楼主| 发表于 2008-3-4 19:52 | 显示全部楼层
谢谢楼上的.我做的大概是按邓科12的例子做的.这是MATLAB函数
function t1()
a=1:10;
plot(a,sin(a));
这是VC的
CoInitialize(NULL);
It1 *pclass;
    HRESULT hr=CoCreateInstance(CLSID_t1,NULL, CLSCTX_ALL, IID_It1, (void **)&pclass);
hr=pclass->t1();
pclass->Release();
    CoUninitialize();
可以调用.
但是我要调用
function t5()
p=[-3.0 2.0];
t=[0.4 0.8];
[w,b]=initff(p,t,'logsig');
disp_freq=1;
max_epoch=100;
err_goal=0.001;
lr=2;
tp=[disp_freq max_epoch err_goal lr];
[w,b,epochs,tr]=trainbp(w,b,'logsig',p,t,tp);
就不行拉 我不太明白 DLL要注册 我看了点 例子都没注册呀
发表于 2008-3-5 14:01 | 显示全部楼层
TRAINBP: Network error did not reach the error goal.
  Further training may be necessary, or try different
  initial weights and biases.

以上是我在matlab里运行的结果。

建议先检查一下,确定你trainbp函数是否用对了。

如果是vc调用出错,应从matlab代码方面考虑,还有com组件编译器也可以换着试试。

如果是调用不了,那多半是VC方面的问题,尝试注册之类的方发吧。
 楼主| 发表于 2008-3-5 22:19 | 显示全部楼层
function t5()
p=[-3.0 2.0];
t=[0.4 0.8];
[w,b]=initff(p,t,'logsig');
disp_freq=1;
max_epoch=100;
err_goal=0.001;
lr=2;
tp=[disp_freq max_epoch err_goal lr];
[w,b,epochs,tr]=trainbp(w,b,'logsig',p,t,tp);
这段代码没有错误呀. 我运行的结果是
TRAINBP: 30/100 epochs, SSE = 0.000828597.  而且还有误差的图.
还有com组件编译器也可以换着试试   我不太明白. 我就会用MATLAB Builder 使用COM
我原来一直用6.5 今天改为7.0  才发现 他们COM还不一样.  我现在老迷糊了. 呵呵
发表于 2008-3-6 10:25 | 显示全部楼层
我当时做的时候,也用的6.5,满顺利的、matlab里自带了com编译器,如果没有记错的话有两个吧,一个C的,一个C++的,你安装VC后可能还有一个,可以换着试试。我当时就遇到换编译器就调用错误的问题。
 楼主| 发表于 2008-3-6 18:58 | 显示全部楼层
是有一个C的,一个C++的.但是只能用C,用C++的话COM编译就会出现错误.弄不明白. 不行我也C#得了.那时你用C#时 可以用newff()吗
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 15:26 , Processed in 0.069391 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表