static public Polynome2D MultiplyXYPolygones(Polynome1D xPolygon, Polynome1D yPolygon) { Polynome2D result = new Polynome2D(); for (int x = 0; x < xPolygon.termCount; x++) { Term1D xTerm = xPolygon.terms[x]; for (int y = 0; y < yPolygon.termCount; y++) { Term1D yTerm = yPolygon.terms[y]; Term2D xyTerm = Term2D.MultiplyXYTerms(xTerm, yTerm); result += xyTerm; } result.AddXTerm(xTerm * yPolygon.constant); } for (int y = 0; y < yPolygon.termCount; y++) { Term1D yTerm = yPolygon.terms[y]; result.AddYTerm(yTerm * xPolygon.constant); } result.m_k = xPolygon.constant * yPolygon.constant; return(result); }
public static Polynome1D operator +(Polynome1D a, Polynome1D b) { Debug.Log("NOT IMPLEMENTED : Polynome1D.Optimize()"); Polynome1D result = new Polynome1D(); result.m_xTerms = new List <Term1D>(a.m_xTerms); result.m_k = a.m_k + b.m_k; foreach (Term1D xTerm in b.m_xTerms) { result.Add(xTerm); } return(result); }
private void CalculateFunction() { m_polynome2D = new Polynome2D(); int xCount = m_xValues.Length; int yCount = m_yValues.Length; // Somme de i = 0 à n de... for (int i = 0; i < xCount; i++) { // Somme de j = 0 à m de... for (int j = 0; j < yCount; j++) { // f(xi,yj) float z = m_zValues[i][j]; // * Li(x) * Lj(y) Polynome1D lix = LagrangePolynome(m_xValues, i); Polynome1D ljy = LagrangePolynome(m_yValues, j); m_polynome2D += z * Polynome2D.MultiplyXYPolygones(lix, ljy); } } }
public static Polynome1D operator *(Polynome1D a, Polynome1D b) { Polynome1D result = new Polynome1D(); foreach (Term1D aTerm in a.m_xTerms) { foreach (Term1D bTerm in b.m_xTerms) { result.Add(aTerm * bTerm); } result.Add(aTerm * b.m_k); } foreach (Term1D bTerm in b.m_xTerms) { result.Add(a.m_k * bTerm); } result.m_k = a.m_k * b.m_k; return(result); }
static public Polynome1D LagrangePolynome(List <float> points, int i) { Polynome1D result = new Polynome1D(1); int n = points.Count; for (int j = 0; j < n; j++) { if (j == i) { continue; } float denom = points[i] - points[j]; Term1D term = new Term1D(1, 1 / denom); List <Term1D> terms = new List <Term1D>(); terms.Add(term); Polynome1D polynome = new Polynome1D(terms, -points[j] / denom); result *= polynome; } return(result); }