已经可以调用MATLAB,但可能代码有问题,MATLAB图像不出来,求能人赐教!
这是对vs的配置


这是C语言代码
#include "engine.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int main()
{
Engine* ep;
mxArray* t = NULL, * l = NULL, * x = NULL, * y_fwd = NULL, * y_bwd = NULL, * y_res = NULL;
double* t_data, * l_data, * x_data;
double amp_fwd, freq_fwd, wavelen_fwd, amp_bwd, freq_bwd, wavelen_bwd;
int i, j, n;
// 连接到 MATLAB 引擎
if (!(ep = engOpen(NULL)))
{
fprintf(stderr, "无法连接到 MATLAB 引擎\n");
return EXIT_FAILURE;
}
// 创建 t 向量
t = mxCreateDoubleMatrix(1, 1001, mxREAL);
t_data = mxGetPr(t);
for (i = 0; i < 1001; i++)
{
t_data[i] = i * 0.1;
}
// 创建 l 向量
l = mxCreateDoubleScalar(10);
l_data = mxGetPr(l);
// 创建 x 向量
x = mxCreateDoubleMatrix(1, 101, mxREAL);
x_data = mxGetPr(x);
for (i = 0; i < 101; i++)
{
x_data[i] = i * (*l_data) / 200;
}
// 获取用户输入参数
printf("请输入正向波的振幅:\n");
scanf("%lf", &_fwd);
printf("请输入正向波的频率:\n");
scanf("%lf", &freq_fwd);
printf("请输入正向波的波长:\n");
scanf("%lf", &wavelen_fwd);
printf("请输入反向波的振幅:\n");
scanf("%lf", &_bwd);
printf("请输入反向波的频率:\n");
scanf("%lf", &freq_bwd);
printf("请输入反向波的波长:\n");
scanf("%lf", &wavelen_bwd);
// 循环每个时间点,计算波形并绘图
for (n = 0; n < 1001; n++)
{
y_fwd = mxCreateDoubleMatrix(1, 101, mxREAL);
y_bwd = mxCreateDoubleMatrix(1, 101, mxREAL);
y_res = mxCreateDoubleMatrix(1, 101, mxREAL);
for (j = 0; j < 101; j++)
{
*(mxGetPr(y_fwd) + j) = amp_fwd * sin(2 * 3.1416 * (t_data[n] * freq_fwd - x_data[j] / wavelen_fwd));
*(mxGetPr(y_bwd) + j) = amp_bwd * sin(2 * 3.1416 * (t_data[n] * freq_bwd + x_data[j] / wavelen_bwd));
*(mxGetPr(y_res) + j) = *(mxGetPr(y_fwd) + j) + *(mxGetPr(y_bwd) + j);
}
engEvalString(ep, "clf");
engEvalString(ep, "plot(x , y_fwd , 'r', x , y_bwd , 'b', x , y_res , 'g')");
engEvalString(ep, "title('波形合成')");
engEvalString(ep, "xlabel('位置')");
engEvalString(ep, "ylabel('振幅')");
engEvalString(ep, "legend('正向波', '反向波', '驻波')");
engEvalString(ep, "axis([0 10 -5 5])");
engEvalString(ep, "M(n) = getframe()");
mxGetPr(y_fwd);
mxGetPr(y_bwd);
mxGetPr(y_res);
mxDestroyArray(y_fwd);
mxDestroyArray(y_bwd);
mxDestroyArray(y_res);
}
// 关闭 MATLAB 引擎
mxDestroyArray(t);
mxDestroyArray(l);
mxDestroyArray(x);
engClose(ep);
return 0;
}
然后出来的是只有坐标轴,而且在不停闪,右上角有个矩形也在闪

