Cómo extraer los coeficientes de un polinomio de un controlador de función que calcula un polinomio en Matlab sin usar variables simbólicas

Es útil saber el grado del polinomio [matemático] n [/ matemático], o al menos un límite superior.

Si no lo sabe, puede intentar determinar el grado calculando diferencias sucesivas del valor de [matemáticas] f [/ matemáticas] en puntos igualmente espaciados, y luego examinando diferencias de diferencias, diferencias de diferencias de diferencias, etc. hasta que siempre obtenga cero, momento en el cual el número de pasos que tenía que seguir hasta llegar a cero es el grado. Debe verificar algunos más para estar razonablemente seguro, y esto es solo heurístico: si conoce los puntos que se evaluarán, es posible construir un polinomio para engañar a este método de encontrar [matemáticas] n [/ matemáticas].

Supongamos que sabemos [matemáticas] n [/ matemáticas] y procedamos:

[matemáticas] \ displaystyle f (x) = \ sum_ {i = 0} ^ {n} a_i x ^ i [/ matemáticas]

[matemáticas] f (0) = a_0 [/ matemáticas]

Ese es uno.

Para recuperar todos los coeficientes, debe evaluar el polinomio en un total de [matemática] n + 1 [/ matemática] puntos, [matemática] v_k = f (p_k) [/ matemática], para [matemática] k = 0 [ / matemáticas] a [matemáticas] n [/ matemáticas]. [Math] p_k [/ math] puede elegirse arbitrariamente, por ejemplo, [math] p_k = k [/ math]. Dado que conoce los poderes de [math] p_k [/ math], cada punto [math] p_k [/ math] le da una ecuación lineal en [math] a_i: [/ math]

[matemáticas] \ displaystyle v_k = \ sum_ {i = 0} ^ {n} a_i p_k ^ i [/ matemáticas]

Cuando tenga [matemática] n + 1 [/ matemática] de estos, puede resolver el sistema lineal. No voy a escribir la ecuación matricial para el sistema lineal completo, pero es bastante sencillo.

Aunque esta no es la aplicación habitual, en realidad hay una forma bien conocida de hacerlo, la Transformada discreta de Fourier. Una forma de pensar en el DFT es la evaluación de un polinomio [matemático] f [/ matemático] en [matemático] N [/ matemático] puntos discretos igualmente espaciados en el círculo unitario, es decir, en el [matemático] N [/ matemático ] Las raíces de la unidad:

[matemáticas] F (k) = f (e ^ {\ frac {2 \ pi ki} {N}}) [/ matemáticas]

Si puede evaluar [matemáticas] f [/ matemáticas] en puntos complejos, puede generar los puntos [matemáticas] N = n + 1 [/ matemáticas] de [matemáticas] F (k) [/ matemáticas], el DFT. Entonces, el DFT inverso, esencialmente el mismo que el DFT, puede usarse para generar los coeficientes polinomiales. Incluso hay un algoritmo rápido, el FFT, pero no es tan útil en esta aplicación porque no puedes usarlo para las evaluaciones iniciales del polinomio.

Sería mucho más fácil responder a su pregunta si pudiera editarla para incluir un ejemplo de trabajo mínimo. Además, esta pregunta parece más adecuada para Stack Overflow. Sin embargo, supongo que está utilizando identificadores de función porque otra función está llamando a polyfit. Puede asignar la salida del identificador de función a una variable, y esto funcionará al igual que llamar a la función:

fcnhandle = @polyfit;

B = fcnhandle (x1, x2);