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

📄 intrpolat.cpp

📁 数值分析 查值 迭代 我把一些方法分别做成了库文件
💻 CPP
字号:
#include "Intrpolat.h"
#include "iostream.h"
//存在一些问题  比如 不是按顺序,只有一个节点等
double lagrange(int n,double *x,double *y,double cx)
{
	int i,j;
	double fore,back;
	double *l=new double[n];
//假设x中的值已经按由小到大排列

	if(cx>x[n-1]||cx<x[0])
	{
		cout<<"请输入界于边界之间的值\n";
	    return 0;
	}

	for(i=0;i<n;i++)
	{
		fore=back=1;
		 for(j=0;j<i;j++)
		 {
			 fore*=(cx-x[j])/(x[i]-x[j]);

		 }
		 for(j=i+1;j<n;j++)
		 {
			 back*=(cx-x[j])/(x[i]-x[j]);
		 }
		 l[i]=fore*back;
	}



	double result=0;
	for(i=0;i<n;i++)
	{
	result+=l[i]*y[i];
	}
	return result;
}





//=============================================
double linear(int n,double *x,double *y,double cx)
{

	int k;
	int i;
//假设x中的值已经按由小到大排列
	if(cx>x[n-1]||cx<x[0])
	{
		cout<<"请输入界于边界之间的值\n";
	    return 0;
	}

	double result;
	if(cx==x[0])
	{
		return result=y[0];
	}
	if(cx==x[n-1])
	{
		return result=y[n-1];
	}

	for(i=0;i<n;i++)
	{
		if(cx<=x[i])
		{	
			k=i-1;
			break;
		}
	}
	
	result=((cx-x[k+1])/(x[k]-x[k+1]))*y[k]+((cx-x[k])/(x[k+1]-x[k]))*y[k+1];

	return result;

}





double newton(int n,double *x,double *y,double cx)
{
	int i;
	double ** a;
	a=new double *[n];
	for(i=0;i<n;i++)
	{
		a[i]=new double [n-i];
	}
	for(i=0;i<n;i++)
	{
		a[0][i]=y[i];
	}

	int j;
	for(i=1;i<n;i++)
	{
		for(j=0;j<n-i;j++)
		{
			a[i][j]=(a[i-1][j]-a[i-1][j+1])/(x[j]-x[i+j]);
		}
	}

	double result=0;
	double temp;
	for(i=0;i<n;i++)
	{
		if(i==0)
		{	
			temp=1;
		}
		else
		{
			temp*=(cx-x[i-1]);
		}
		result+=(a[i][0]*temp);
		
	}
	return result;


}

⌨️ 快捷键说明

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