这是代码
#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;
}
// 添加禁用硬件加速代码
engEvalString(ep, "matlab.graphics.Renderer.use('software')");
engEvalString(ep, "set(groot,'DefaultFigureRenderer','painters')");
// 创建 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_s("%lf", &_fwd);
printf("请输入正向波的频率:\n");
scanf_s("%lf", &freq_fwd);
printf("请输入正向波的波长:\n");
scanf_s("%lf", &wavelen_fwd);
printf("请输入反向波的振幅:\n");
scanf_s("%lf", &_bwd);
printf("请输入反向波的频率:\n");
scanf_s("%lf", &freq_bwd);
printf("请输入反向波的波长:\n");
scanf_s("%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);
}
mxArray* pArray[3] = { y_fwd, y_bwd, y_res };
for (int k = 0; k < 3; k++)
{
if (pArray[k] != NULL)
{
char command[256];
sprintf(command, "x%d=x',y%d=y(:,%d)',", k, k, k + 1);
engEvalString(ep, command);
engPutVariable(ep, command + 1, pArray[k]);
}
}
engEvalString(ep, "clf");
engEvalString(ep, "subplot(3,1,1);plot(x,y_fwd,'r');title('正向波');axis([0 10 -2 2]);");
engEvalString(ep, "subplot(3,1,2);plot(x,y_bwd,'b');title('反向波');axis([0 10 -2 2]);");
engEvalString(ep, "subplot(3,1,3);plot(x,y_res,'g');title('合成波形');axis([0 10 -4 4]);");
engEvalString(ep, "drawnow;");
// 暂停等待界面加载完成
engEvalString(ep, "uiwait(gcf)");
mxGetPr(y_fwd);
mxGetPr(y_bwd);
mxGetPr(y_res);
mxDestroyArray(y_fwd);
mxDestroyArray(y_bwd);
mxDestroyArray(y_res);
Sleep(1000);
}
// 释放内存并关闭 MATLAB 引擎
mxDestroyArray(t);
mxDestroyArray(l);
mxDestroyArray(x);
engClose(ep);
return EXIT_SUCCESS;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: