声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2372|回复: 3

[混合编程] 【求助】怎么用VC调用matlab画三维图形

[复制链接]
发表于 2009-4-7 15:03 | 显示全部楼层 |阅读模式

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

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

x
A=zeros(11,11);
bar3(A);
VC怎么调用这个程序
调用后A中的元素可以被赋值 而且是double型的
由于初学试了很多方法 都不太会用
而且经常出错说 不能把double赋值给int
求高手指点

[ 本帖最后由 zhuqinqing 于 2009-4-7 15:46 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-4-8 23:15 | 显示全部楼层
有没有高手知道啊
指点下小弟
发表于 2009-4-10 13:09 | 显示全部楼层
可以吧自己写的程序做成COM组件 然后在C++中调用组件!
例如:书写如下一个m程序
function draw (formula)
pp=figure (1);
ezplot (formula);
grid on;
print (pp,'-dbitmap','C:\draw'); %%把图像保存;(此处是把生成的图像存储成bmp图片!)
close (pp); %%关闭图像;

然后应用的C++编译器编译成COM组件!
发表于 2009-4-10 13:10 | 显示全部楼层
C#2005与MTLAB R2007a接口实践
魏庆森
wqsoooooooooo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
一、引言
MATLAB是一个功能强大、具有良好交互性的科学及工程计算软件,它提供相当丰富的
工具箱,使用户能非常有效地计算或模拟各种科学及工程问题。自从20世纪90年代以来,
MATLAB软件已经成为应用代数、自动控制理论、数理统计、数字信号处理、时间序列分
析和动态系统仿真等课程的基本的教学工具,成为学生必须掌握基本软件之一。
C#是Microsoft的Visual Studio开发环境支持的一种语言,它结合了C++和VB的优点,是
一种“现代”的编程语言,但是它的数学计算能力要落后于MATLAB。
COM组件则是有别于传统的一种新型软件构架。COM技术解决的一个基本问题就是如
何设计一个系统使得不同软件开发商在不同的时间和地点开发的代码能够协同操作及共享
二进制代码。
二、实现原理
MATLAB的COM编译器是MATLAB编译器的一个扩展功能,能够把一个或多个M方程
转换、编译成COM组件。MATLAB的COM编译器是利用MATLAB编译器把MATLAB程序
转换成C/C++代码,在调用外部的C++编译器来编译产生COM组件。
为了实现在C#中调用MATLAB计算程序,实现C#与MATLAB的混合编程,下面我们将
以具体的实例来详细讲解如何实现C#2005与MATLAB R2007a的混合编程。
三、C#2005与MATLAB R2007a接口的具体实现过程
①、C/C++编译器的安装
首先在MATLAB的在命令窗口(Command Window)里面键入:mbuild –setup回车后提
示:“Would you like mbuild to locate installed compilers [y]/n?”, 输入n。因为它是问你是否
要建立本地已安装的编译器(MATLAB自带的编译器),这里要用的是.NET里面的编译器。
然后就是选择编译器,选择Microsoft Visual C++ 2005 就好了(C++ 2005和C# 2005同在.NET
2005平台下)。
现在又会出现如下问题:“The default location for Microsoft Visual C++ 2005 compilers is
C:\Program Files\Microsoft Visual Studio 8, but that directory does not exist on this machine. Use
C:\Program Files\Microsoft Visual Studio 8 anyway [y]/n?” ,如果你的C#安装在了C 盘默认目
录下,键入y(yes)就好。否则就键入n;假如你安装在了D盘,输入n 后提示你为:Please enter
the location of your compiler: [C:\Program Files\Microsoft Visual Studio 8]:这样你就可以在后
面直接输入你的C#的安装路径了如:D:\Program Files\Microsoft Visual Studio 8,最后它又问
你:Are these correct? ([y]/n): 输入y 即可!最后就是生成两个Dll(动态链接库)文件一个
是mwcomutil.dll,一个是mwcommgr.dll。如果你的上述步骤有错误,就不会生成这两个文件。
经过以上步骤就把MATLAB配置好了。
下面我们来书写一个MATLAB程序(程序必须是函数文件)。例如书写一个绘制关于x
和y的多项式曲线的小程序,程序具体如下:
function draw (formula)
pp=figure (1);
ezplot (formula);
grid on;
print (pp,'-dbitmap','C:\draw'); %%把图像保存;
close (pp); %%关闭图像;
②、MATLAB COM组件的生成
在MATLAB命令窗口里面键入:deploytool(这和MATLAB以前的版本不同),回车会出
现如图(1)所示的窗口。根据提示,要新建一个“工程”,单击新建按钮,会出现如图(2)
所示的窗口,因为C#是在.NET下的,就选择MATLAB Builder for .NET和Generic COM
Component,在下面Name项里面输入名称,Location里面选择存储路径。如输入的名称为:
draw,路径为默认。进入下一步,如图(3)点击添加文件按钮(Add Files),找到刚才保存的
MATLAB的.m 文件添加。最后点击执行按钮(Build the Project),MATLAB会自动生成一个
**.dll(draw_1_0.dll)文件(已经自动注册过)。这样COM组件就生成了。

图1 部署窗口图2 新建工程界面
③、书写C#代码
先打开一个新的解决方案Integral。在资源管理器里的引用项里右击添加引用如图(4),
在COM项里面找到刚才所生成的**.dll(draw_1_0.dll)项,确定。然后简单设计一个窗口,
用来提示操作如图(5)。在窗口的Textbox里面输入关于x的多项式,点击“查看图形按钮”
后,在Picturebox里面就会显示所输入的关于x和y的多项式的图像。其中主要代码如下:
private void DrawingImage()
{
string formula = textBox1.Text;
draw.drawclass draw_1 = new draw.drawclass(); //声明新对象;
draw_1.draw(formula); //绘图
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//先要释放Image中的所用资源;
if (pictureBox1.Image != null) { pictureBox1.Image.Dispose(); }
//调用draw方法有生成一个新的图像
this.DrawingImage();
//把生成的图像显示在窗口中的picturebox中;
pictureBox1.Image = System.Drawing.Image.FromFile(@"C:\draw.bmp");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"提示");
}
图3 添加文件
图4 添加引用图5 简单设计的窗口
至此,就完成了C#中调用MATLAB程序的全过程。可在写好的程序里面试验一下,例
如在Textbox里面输入:x^2 + y^3 = 24,点击查看图形按钮就可以看到图形了,如图(6)。
图6 实例
四、总结
上面我们实现了C#2005与MATLAB R2007a的接口问题,这样我们在编程过程中既可以
应用C#强大的编程能力,又可以使用C#调用由MATLAB程序生成的COM组件,大大增强所
编软件的计算能力。但需要注意的是:
1、如果我们所书写的MATLAB程序有返回值,而在C#中调用生成的COM组件时,类
里面的函数是无返回值(void)的,它把MATLAB函数的返回值以输入参数的形式
返回。如:sqrt.Sqrt(1, ref ret,num1); sqrt是类的对象,Sqrt就是函数名,第一个参数
1表示有一个返回值,ref ret表示要返回的值,num1就是要输入的参数。
2、并不是所有的MATLAB函数都能被转换成C/C++代码,所以这些函数的MATLAB
程序也不能被编译成COM组件。如sym,syms。
3、这种MATLAB产生COM组件的方法只适用于MATLAB7.1以后的版本。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-17 08:31 , Processed in 0.056315 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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