⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curvefit.c

📁 在Visual C++环境下
💻 C
字号:
// curvefit.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[1],buffer[BUFFERLEN];
	int status;

	ep=engOpen(NULL);
	if(ep==(Engine*)NULL)
		fprintf(stderr,"ERR:Cannot Open MATLAB Engine! \n");
	fprintf(stdout,"计算引擎MATLAB是可见的......\n");
	fprintf(stdout,"隐藏计算引擎,按任意键继续......\n");
	getch();
	status=engSetVisible(ep,false);
	if(status!=0)
	{
		fprintf(stderr,"错误: 无法隐藏计算引擎!\n");
		return(NULL);
	}

	fprintf(stdout,"进行数据处理计算......\n");
	//将数据传输到MATLAB工作空间
	status=engPutVariable(ep,"x",x);
	if(status!=0)
	{
		fprintf(stderr,"错误: 无法将数据传输到MATLAB工作空间!\n");
		return(NULL);
	}

	status=engPutVariable(ep,"y",y);
	if(status!=0)
	{
		fprintf(stderr,"错误: 无法将数据传输到MATLAB工作空间!\n");
		return(NULL);
	}

	//设置输出缓存区
	engOutputBuffer(ep,buffer,BUFFERLEN);
	//执行多项式拟合
	status=engEvalString(ep,"k5=polyfit(x,y,5);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 + -