Diferențe finite

1. Tema

Determinarea diferenței finite pentru o funcție și noduri de interpolare date.

2. Metoda

Diferența finită pentru funcția f(x) pe nodurile echidistante x1, x2, …, xn (xi=x1+(i-1)h, i=1,2,…,n) este:

diferente finite1

3. Exemplu

Să se determine diferența finită de ordinul 3 pentru funcția f(x)=x3+x+1 și nodurile de interpolare 1,2,3,4 în primul nod.

Rezolvare:

diferente finite2

4. Algoritmul

Algoritmul pentru determinarea diferențelor finite este:

Intrări:

  • n = numărul nodurilor de interpolare
  • k = ordinul diferenței finite
  • x = vectorul cu nodurile de interpolare
  • h = pasul

Ieșiri:

  • df = diferența finită

diferente finite3

5. Implementare

Visual_C++_Icon
Cod Sursa C++
#include "stdafx.h"
#include 
 
using namespace std;
 
#define max 10
float funct(float t)
{
	float f;
	f = exp(-(t*t));
	return f;
}
void main(void)
{
	float df, c, h;
	float x[max + 1];
	int n, k, i, j, l;
	cout << "dati ordinul diferentei finite" << endl;
	cin >> k;
	cout << "dati numarul de noduri" << endl;
	cin >> n;
	cout << "dati pasul" << endl;
	cin >> h;
	cout << "dati primul nod" << endl;
	cin >> x[1];
	for (i = 2; i <= n; i++)
	{
		x[i] = x[1] + (i - 1)*h;
	}
	cout << endl;
 
	if (k % 2 == 0)df = funct(x[1]);
	else df = -funct(x[1]);
	for (j = 1; i <= k; j++)
	{
		c = 1;
		for (l = 1; l <= j; l++)
			c = c*(k - l + 1) / l;
		if ((k - j) % 2 == 0)df = df + c*funct(x[1] + j*h);
		else df = df - c*funct(x[1] + j*h);
	}
	cout << "Diferenta finita de ordinul  " << k << " este " << df << endl;
	system("pause");
}

Rezultat:

diferente finite rezultat

One Comment Add yours

  1. Crina says:

    In sectiunea exemplu este gresit calculul. Rezultatul este 6.
    In cod ai for (j = 1; i <= k; j++). Trebuie for (j = 1; j <= k; j++)

    Like

Leave a comment