چندجمله ای درون یاب به روش نیوتون در C++

  /  C Plus Plus   /  چند جمله ای درون یاب به روش نیوتون در C++

چندتا از دانشجویان عزیز این سؤال رو از بنده پرسیدن و این تنها اطلاعاتی بود که بنده تونستم جمع آوری بکنم.

خوده بنده خیلی متوجه این مسئله نشدم ، ( حل چند جمله ای درون یاب به روش نیوتون در C++ )

ولی با تحقیقاتی که انجام دادم تونستم از چندتا وب سایت خارجی یکسری سورس کد بدست بیارم که ظاهراً بازگو کننده این مسئله هست.

سورس کد C++ شماره یک :
// CPP program for implementing 
// Newton divided difference formula 
#include  

using namespace std;
// Function to find the product term 
float proterm(int i, float value, float x[])
{
	float pro = 1; for (int j = 0; j < i; j++)
	{
		pro = pro * (value - x[j]);
	} return pro;
}
// Function for calculating 
// divided difference table
void dividedDiffTable(float x[], float y[][10], int n)
{
	for (int i = 1; i < n; i++)
	{
		for (int j = 0; j < n - i; j++)
		{
			y[j][i] = (y[j][i - 1] - y[j + 1][i - 1]) / (x[j] - x[i + j]);
		}
	}
}
// Function for applying Newton's 
// divided difference formula 
float applyFormula(float value, float x[], float y[][10], int n)
{
	float sum = y[0][0]; for (int i = 1; i < n; i++)
	{
		sum = sum + (proterm(i, value, x) * y[0][i]);
	}
	return sum;
}
// Function for displaying 
// divided difference table 
void printDiffTable(float y[][10], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - i; j++)
		{
			cout << setprecision(4) << y[i][j] << "\t ";
		} cout << "\n";
	}
}
// Driver Function 
int main() {
	// number of inputs given
	int n = 4;
	float value, sum, y[10][10];
	float x[] = { 5, 6, 9, 11 };
	// y[][] is used for divided difference 
	// table where y[][0] is used for input
	y[0][0] = 12; y[1][0] = 13; y[2][0] = 14; y[3][0] = 16;
	// calculating divided difference table 
	dividedDiffTable(x, y, n);
	// displaying divided difference table 
	printDiffTable(y, n);
	// value to be interpolated 
	value = 7;
	// printing the value 
	cout << "\nValue at " << value << " is " << applyFormula(value, x, y, n) << endl;
	return 0;
}

کد بالا رو اجرا کردم که خروجی به این شکل بود :

12 1 -0.1667 0.05
13 0.3333 0.1333
14 1
16

Value at 7 is 13.47

تسلیم نشدیم و به تحقیقات ادامه دادیم که سورس کد های زیر رو هم بدست آوردیم.

با توجه به مطالعات و تحقیقاتی که داشتم ظاهراً این سورس کد ها هم بازگو کننده این مسئله هست.

سورس کد C++ شماره دو :
// CPP Program to interpolate using 
// newton forward interpolation 
#include  
using namespace std;
// calculating u mentioned in the formula 
float u_cal(float u, int n)
{
	float temp = u;
	for (int i = 1; i < n; i++)
		temp = temp * (u - i); return temp;
}
// calculating factorial of given number n 
int fact(int n)
{
	int f = 1;
	for (int i = 2; i <= n; i++) f *= i; return f;
}
int main() {
	// Number of values given 
	int n = 4;
	float x[] = { 45, 50, 55, 60 };
	// y[][] is used for difference table 
	// with y[][0] used for input 
	float y[n][n]; y[0][0] = 0.7071; y[1][0] = 0.7660; y[2][0] = 0.8192; y[3][0] = 0.8660;
	// Calculating the forward difference 
	// table 
	for (int i = 1; i < n; i++)
	{
		for (int j = 0; j < n - i; j++)
			y[j][i] = y[j + 1][i - 1] - y[j][i - 1];
	}
	// Displaying the forward difference table 
	for (int i = 0; i < n; i++)
	{
		cout << setw(4) << x[i] << "\t";
		for (int j = 0; j < n - i; j++)
			cout << setw(4) << y[i][j] << "\t"; cout << endl;
	}
	// Value to interpolate at 
	float value = 52;
	// initializing u and sum 
	float sum = y[0][0];
	float u = (value - x[0]) / (x[1] - x[0]);
	for (int i = 1; i < n; i++)
	{
		sum = sum + (u_cal(u, i) * y[0][i]) / fact(i);
	} cout << "\n Value at " << value << " is " << sum << endl;
	return 0;
}

خروجی سورس کد بالا :

45 0.7071 0.0589 -0.00569999 -0.000699997
50 0.766 0.0532 -0.00639999
55 0.8192 0.0468
60 0.866

Value at 52 is 0.788003

توضیحات بیشتر در رابطه با چند جمله ای درون یاب به روش نیوتون در C++ رو میتونید از داخل لینک های زیر کسب کنید:

لینک آموزشی شماره یک

لینک آموزشی شماره دو

اگر شما در این زمینه اطلاعاتی دارید خوشحال میشم برام کامنت بزارید.

من یک برنامه نویس خستگی ناپذیر هستم که رویا هام رو کد نویسی میکنم...

ارسال یک نظر