به وب سایت حباب ها خوشامدید | ما را در شبکه های اجتماعی دنبال کنید:

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

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

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


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

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

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

سورس کد C++ شماره یک :
// CPP program for implementing
// Newton divided difference formula
#include <bits/stdc++.h>
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 <bits/stdc++.h>
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++ رو میتونید از داخل لینک های زیر کسب کنید:

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

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

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


مدیر حباب ها

متین برونسی مدیر و مؤسس حباب ها می باشد ، او علاقه مند به دنیای کامپیوتر و زبان های برنامه نویسی است... از تخصص های او می توان به برنامه نویسی frontend و backend اشاره کرد (full stack developer)... او تجربیات زیادی در زبان های برنامه نویسی مختلف دارد... ، او گاهاً تجربیات خود را در قالب آموزش در وب سایت حباب ها منتشر می کند...

ارسال یک نظر