MATLAB: Est-il possible d’avoir un tableau de poignées de fonction

J’essaie de créer un tableau de descripteurs de fonctions afin que, par exemple, je puisse créer une fonction qui ressemble à ceci:
 
[x,y]= RK4system(f ,xspan, y0, N);
 
Au lieu de cela:
 
[x,y]= RK4system(y1prime,y2prime ,xspan, y0, N);
 
Par conséquent, je veux un descripteur de fonction ‘f’ qui contient y1prime et y2prime, où:
 
y1prime = @(x,y1,y2) y2;
y2prime = @(x,y1,y2) -2*x^2*y1 - 3*x*y2;
 
Voici la fonction réelle si vous en avez besoin:
 
function [x,y]= RK4system(y1prime, y2prime ,xspan, y0, N)
x(1) = xspan(1);
xf = xspan(2);
y1(1) = y0(1);
y2(1) = y0(2);
h=xf/N;
for i=1:N
x(i+1) = x(i)+h;
k1y1 = y1prime(x(i),y1(i),y2(i));
k1y2 = y2prime(x(i),y1(i),y2(i));
k2y1 = y1prime(x(i)+h/2, y1(i)+h/2*k1y1, y2(i)+h/2*k1y2);
k2y2 = y2prime(x(i)+h/2, y1(i)+h/2*k1y1, y2(i)+h/2*k1y2);
k3y1 = y1prime(x(i)+h/2, y1(i)+h/2*k2y1, y2(i)+h/2*k2y2);
k3y2 = y2prime(x(i)+h/2, y1(i)+h/2*k2y1, y2(i)+h/2*k2y2);
k4y1 = y1prime(x(i)+h, y1(i)+h*k3y1, y2(i)+h*k3y2);
k4y2 = y2prime(x(i)+h, y1(i)+h*k3y1, y2(i)+h*k3y2);
y1(i+1) = y1(i)+h/6*(k1y1 + 2*k2y1 + 2*k3y1 + k4y1);
y2(i+1) = y2(i)+h/6*(k1y2 + 2*k2y2 + 2*k3y2 + k4y2);
end
x=x';
y1=y1';
y2=y2';
y=[y1 y2];
end
 
Lors de l’appel de la fonction:
 
N = 4;
y1prime = @(x,y1,y2) y2;
y2prime = @(x,y1,y2) -2*x^2*y1 - 3*x*y2;
xspan = [0 0.4];
y0 = [3 1];
[x,y]= RK4system(y1prime,y2prime ,xspan, y0, N);
[x y]
 

Meilleure réponse

  • La réponse courte est non. Cependant, il est possible de stocker des descripteurs de fonction dans un tableau de cellules.
     

    f = cell(2,1);
    f{1} = y1prime;
    f{2} = y2prime;