📄 curvepolyfit.c
字号:
// curvepolyfit.c 曲线拟合
#include <conio.h>
#include "engine.h"
#include "mutil.h"
#define BUFFERLEN 1024
mxArray *CalculateFcn(mxArray *x,mxArray *y)
{
Engine *ep;
mxArray *equation;
char flag;
char buffer[BUFFERLEN];
int status;
ep=engOpen(NULL); //打开MATLAB计算引擎
if(ep==(Engine*)NULL)
{
fprintf(stderr,"错误:无法打开MATLAB计算引擎! \n");
return(NULL);
}
fprintf(stdout,"隐藏计算引擎,按'Y'键 显示计算引擎,按其它键\n");
flag=getch();
if(flag=='Y'||flag=='y')
{
status=engSetVisible(ep,false);
if(status!=0)
{
fprintf(stderr,"错误: 无法隐藏计算引擎!\n");
return(NULL);
}
}
else
{
status=engSetVisible(ep,true);
}
fprintf(stdout,"进行数据处理计算......\n");
status=engPutVariable(ep,"x",x); //将数据x传输到MATLAB工作空间
if(status!=0)
{
fprintf(stderr,"错误: 无法将数据传输到MATLAB工作空间!\n");
return(NULL);
}
status=engPutVariable(ep,"y",y); //将数据y传输到MATLAB工作空间
if(status!=0)
{
fprintf(stderr,"错误: 无法将数据传输到MATLAB工作空间!\n");
return(NULL);
}
engOutputBuffer(ep,buffer,BUFFERLEN); //设置输出缓存区
status=engEvalString(ep,"k5=polyfit(x,y,3);y5=polyval(k5,x);"); //执行多项式拟合
if(status!=0)
{
fprintf(stderr,"错误: 无法运行MATLAB命令!\n");
fprintf(stderr,"%s\n",buffer);
return(NULL);
}
engEvalString(ep,"subplot(2,1,1),plot(x,y,'b',x,y5,'r');");
engEvalString(ep,"xlabel('x');ylabel('y');title('x VS y');axis tight;");
engEvalString(ep,"legend('Original','Fitted');");
engEvalString(ep,"subplot(2,1,2),bar(x,y-y5,'r');");
engEvalString(ep,"xlabel('x');ylabel('y');title('Residuals');axis tight;");
equation=engGetVariable(ep,"k5"); //获取计算结果
fprintf(stdout,"Done!\n");
fprintf(stdout,"按任意键继续......\n");
getch();
status=engClose(ep); //关闭计算引擎
if(status!=0)
{
fprintf(stderr,"错误: 无法关闭MATLAB计算引擎!\n");
return(NULL);
}
return(equation);
}
//////////主函数///////////
void main()
{
mxArray *xdata,*ydata,*eqn;
//从数据文件curvedata.mat中获取变量x&y
xdata=ReadArray("curvedata.mat","x");
ydata=ReadArray("curvedata.mat","y");
//多项式拟合计算,同时绘图
eqn=CalculateFcn(xdata,ydata);
//将计算结果保存到curvedata.mat中
WriteArray("curvedata.mat","k5",eqn);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -