本帖最后由 空山新雨thw 于 2015-7-10 21:11 编辑
请教一下,在VS2013中怎样调用MATLAB中的surf函数?我已经成功调用了plot3和stem3函数,但是surf和mesh函数一直不成功,请大家帮我看看,谢谢!(可以确定,MATLAB引擎已经启动,但是函数没有调用成功)1.txt、2.txt、3.txt是程序所需的数据文件,程序中的xx,yy,tt以向量的方式分别存储了三个文件中的数据。
我的程序代码如下:
#include
#include
#include
#include
#include
#include "engine.h"
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libeng.lib")
using namespace std;
#define N 13000
int main()
{
FILE *fp1, *fp2, *fp3;
double S[N], C[N], T[N];
double x;
int i = 0, j = 0, k = 0;
Engine *ep; //定义Matlab引擎指针
if (!(ep = engOpen(NULL))) //测试是否启动Matlab引擎成功
{
cout << "Can't start Matlab engine!" << endl;
exit(1);
}
if ((fp1 = fopen("1.txt", "r")) == NULL)
{
printf("1.txt打开失败!");
exit(0);
}
while (fscanf(fp1, "%lf", &x) != EOF)
{
S = x;
i++;
}
if ((fp2 = fopen("2.txt", "r")) == NULL)
{
printf("2.txt打开失败!");
exit(0);
}
while (fscanf(fp2, "%lf", &x) != EOF)
{
C[j] = x;
j++;
}
if ((fp3 = fopen("3.txt", "r")) == NULL)
{
printf("3.txt打开失败!");
exit(0);
}
while (fscanf(fp3, "%lf", &x) != EOF)
{
T[k] = x;
k++;
}
mxArray *xx = mxCreateDoubleMatrix(1, N, mxREAL);
mxArray *yy = mxCreateDoubleMatrix(1, N, mxREAL);//创建1行N列的实双精度矩阵
mxArray *tt = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy(mxGetPr(xx), S, N*sizeof(double)); //将数组S复制到mxarray数组xx中
memcpy(mxGetPr(yy), C, N*sizeof(double)); //将数组C复制到mxarray数组yy中
memcpy(mxGetPr(tt), T, N*sizeof(double));
engPutVariable(ep, "xx", xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx
engPutVariable(ep, "yy", yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy
engPutVariable(ep, "tt", tt);
engEvalString(ep, "[X,Y,Z]=meshgrid(xx,yy,tt),surf(X,Y,Z),view(-37.5,30)");
mxDestroyArray(xx); //销毁mxArray数组xx和yy
mxDestroyArray(yy);
mxDestroyArray(tt);
system("pause");
engClose(ep); //关闭Matlab引擎
}
2015-7-10 21:01 上传
点击文件名下载附件
1.79 KB, 下载次数: 8
源代码
2015-7-10 21:06 上传
点击文件名下载附件
107.9 KB, 下载次数: 7
程序所需的数据文件
2015-7-10 21:06 上传
点击文件名下载附件
107.77 KB, 下载次数: 7
程序所需的数据文件
2015-7-10 21:06 上传
点击文件名下载附件
115.04 KB, 下载次数: 7
程序所需的数据文件