Skip to content Skip to sidebar Skip to footer

Generating A String With Python Using Loops With Logic Conditions Issues Against Join Function Alternative?

I coded a function in order to generate Lagrange interpolation expressions. So I got: def polinomioLagrange(Xs, Ys, t): for k in range(len(Xs)): if k >0:

Solution 1:

I think you're making this a lot harder than it needs to be. Rather than building strings, simply build symbolic expressions. We can implement l and L directly:

from sympy import Symbol, prod

deflag_l(xx, j):
    x = Symbol("x")
    parts = ((x - x_i) / (xx[j] - x_i) for i, x_i inenumerate(xx) if i != j)
    return prod(parts)

deflag_L(xx, yy):
    returnsum(y*lag_l(xx, j) for j, y inenumerate(yy))

deflag_fn(xx, yy, x):
    return lag_L(xx, yy).subs({'x': x})

after which we can get the basis functions:

>>> lag_l([1,2,3], 0)
(-x + 2)*(-x/2 + 3/2)
>>> lag_l([1,2,3], 1)
(-x + 3)*(x - 1)
>>> lag_l([1,2,3], 2)
(x/2 - 1/2)*(x - 2)

the full interpolating polynomial:

>>> lag_L([1,2,3],[1,4,9])
(-x + 2)*(-x/2 + 3/2) + 4*(-x + 3)*(x - 1) + 9*(x/2 - 1/2)*(x - 2)

and we can call the function (here wrapped as lag_fn):

>>> lag_fn([1,2,3],[1,4,9], 3)
9

.. of course the interpolating polynomial can be simplified a lot:

>>>from sympy import simplify>>>simplify(lag_L([1,2,3],[1,4,9]))
x**2

Post a Comment for "Generating A String With Python Using Loops With Logic Conditions Issues Against Join Function Alternative?"