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

  /  سی پلاس پلاس   /  چند جمله ای درون یاب به روش نیوتون در 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++ رو میتونید از داخل لینک های زیر کسب کنید:

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

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

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

برای دسترسی به آموزش های بیشتر و ویدیو های من ، کلمه کلیدی متین برونسی را داخل گوگل سرچ کنید.

ارسال یک نظر