MATLAB: Cómo llamar rápidamente a una función con funciones parametrizadas por parámetros variables (parametrización de funciones anidadas, parametrización de funciones anónimas)

Función parametrizada

  • Descripción general Este tema le muestra cómo almacenar o acceder a parámetros adicionales pasados ​​a funciones matemáticas Función MATLAB® (como fzero o integral).

  • La función de la función MATLAB calcula expresiones matemáticas basadas en un rango de valores. Estas funciones se denominan funciones de
    función porque son funciones que aceptan identificadores de función (punteros a funciones) como entrada. Cada una de estas funciones requiere que la función objetivo tenga un cierto número de variables de entrada. Por ejemplo, fzero e
    integral aceptan identificadores para funciones que tienen exactamente una variable de entrada.

    Suponga que necesita calcular el punto cero del polinomio cúbico x3 + bx + c cuando los coeficientes byc tienen valores diferentes. Aunque puede crear una función que acepte tres variables de entrada (x, byc), no puede pasar un identificador de función que requiera las tres entradas a cero. Sin embargo, puede utilizar los atributos de funciones anónimas o funciones anidadas para definir otros valores de entrada.

1. Utilice la parametrización de funciones anidadas

Una forma de definir parámetros es usar funciones-funciones anidadas que están completamente contenidas dentro de otra función en el archivo de programa. Para este ejemplo, se creará un archivo llamado findzero.m que contiene la función principal findzero y la función anidada poly:

function y = findzero(b,c,x0)

y = fzero(@poly,x0);

   function y = poly(x)
   y = x^3 + b*x + c;
   end
end

Esta función anidada define un polinomio cúbico con una variable de entrada x. La función principal acepta los parámetros byc como valores de entrada. La razón para anidar poly dentro de findzero es que las funciones anidadas comparten el espacio de trabajo de su función principal. Por lo tanto, la función poly puede acceder a los valores de byc que le pasa a findzero.

Requiere el punto cero del polinomio cuando b = 2 y c = 3.5. Si usa el punto inicial x0 = 0, puede llamar a findzero desde la línea de comando:

x = findzero(2,3.5,0)
x =
   -1.0945

2. Utilice funciones anónimas para la parametrización
Otra forma de acceder a parámetros adicionales es utilizar funciones anónimas. Las funciones anónimas son funciones que se pueden definir en un solo comando sin crear un archivo de programa separado. Estas funciones pueden utilizar cualquier variable disponible en el espacio de trabajo actual.

Por ejemplo, cree un identificador para una función anónima que describa un polinomio cúbico y encuentre el punto cero:

b = 2;
c = 3.5;
cubicpoly = @(x) x^3 + b*x + c;
x = fzero(cubicpoly,0)
x =
   -1.0945

La variable cubicpoly es un identificador de función de una función anónima con una entrada x. La entrada de la función anónima se muestra entre paréntesis e inmediatamente después del signo @ utilizado para crear el identificador de la función. Dado que byc están en el espacio de trabajo cuando crea el cubicpoly, la función anónima no requiere la entrada de estos coeficientes.

No es necesario crear una variable intermedia cubicpoly para funciones anónimas. La definición completa del identificador de función se puede incluir en la llamada a fzero:

b = 2;
c = 3.5;
x = fzero(@(x) x^3 + b*x + c,0)
x =
   -1.0945

También puede utilizar funciones anónimas para llamar a funciones de destino más complejas definidas en el archivo de funciones. Por ejemplo, suponga que hay un archivo llamado cubicpoly.m con las siguientes definiciones de función:

function y = cubicpoly(x,b,c)
y = x^3 + b*x + c;
end

En la línea de comando, defina byc, y luego use una función anónima que llame a cubicpoly para llamar a fzero:

b = 2;
c = 3.5;
x = fzero(@(x) cubicpoly(x,b,c),0)
x =
   -1.0945

Nota

Para cambiar el valor del parámetro, se debe crear una nueva función anónima. P.ej:

b = 10;
c = 25;
x = fzero(@(x) x^3 + b*x + c,0);

Supongo que te gusta

Origin blog.csdn.net/qq_40797015/article/details/108071700
Recomendado
Clasificación