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

📄 curvepolyfit.c

📁 在Visual C++环境下
💻 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 + -