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:
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:
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ă
5. Implementare
#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:
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++)
LikeLike