داغ ترین ویدیو بابلز لرن : هک کلاس های مجازی توسط متین برونسی

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

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

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

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

5/5 - (2 امتیاز)
 #نهج_البلاغه_بخوانیم

ارزش هاى والاى اخلاقى

و درود خدا بر او، فرمود: هيچ شرافتى برتر از اسلام، و هيچ عزّتى گرامى تر از تقوا، و هيچ سنگرى نيكوتر از پارسايى، و هيچ شفاعت كننده اى كار سازتر از توبه، و هيچ گنجى بى نياز كننده تر از قناعت، و هيچ مالى در فقر زدايى، از بين برنده تر از رضايت دادن به روزى نيست.

و كسى كه به اندازه كفايت زندگى از دنيا بردارد به آسايش دست يابد، و آسوده خاطر گردد، در حالى كه دنيا پرستى كليد دشوارى، و مركب رنج و گرفتارى است.

و حرص ورزى و خود بزرگ بينى و حسادت، عامل بى پروايى در گناهان است، و بدى، جامع تمام عيب ها است.

حکمت 371 نهج البلاغه

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