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

📄 approachfunc.h

📁 采用拉格朗日和泰勒展开的方法对SinX进行数值的函数拟合。本代码用VC++ .net进行显示
💻 H
字号:
#pragma once
namespace ApproachFunc
{
		
	enum Method{Taylor,Lagrange,Original};
	using namespace System;
	class AF
	{
	public:

		static double AF::AF_func(double x ,Method m,int nOrder)
		{


			switch(m)
			{
			case Taylor:
				{
				int nFrame=5;
				int nA=x*nFrame/(2*Math::PI);
				double pi=Math::PI;
				double dA=(nA*2*Math::PI/nFrame);
				double sum=Math::Sin(dA);
				for(int i=1;i<nOrder;i++)
				{
					double p=1;
					for(int j=1;j<i+1;j++)p=p*j;
					double main;
					switch(i%4)
					{
					case 1:
						main=Math::Cos(dA)*Math::Pow(x-dA,i)/p;
						break;
					case 2:
						main=-Math::Sin(dA)*Math::Pow(x-dA,i)/p;
						break;
					case 3:
						main=-Math::Cos(dA)*Math::Pow(x-dA,i)/p;
						break;
					case 0:
						main=Math::Sin(dA)*Math::Pow(x-dA,i)/p;
						break;
					}
					sum=sum+main;
				}
				
				return sum;
				}
			case Lagrange:
				{
					//double dOrder=nOrder;
					double sum=0;
				for(double i=0;i<nOrder;i++)
				{
					double multiply=Math::Sin((2*Math::PI)/nOrder *i);
					for(double j=0;j<nOrder;j++)
					{
						if(j!=i)
						{
							double temp1=(x-(2*Math::PI)/nOrder *j);
							double temp2=((2*Math::PI)/nOrder *(i-j));
							multiply=multiply*temp1/temp2;
						}
					}
					sum=sum+multiply;
				}
				return sum;
				}
			case Original:
			default: 
				return Math::Sin(x);
			}
		}
	};
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -