Попытка сделать анонимную функцию внутри анонимной функции в MATLAB - PullRequest
1 голос
/ 30 октября 2011

Привет, это может быть очень интересный вопрос, но я застрял, и я пытаюсь сделать это некоторое время, пожалуйста, помогите мне.

Я пытаюсь сделать что-то вроде этого:

a=0.5;
ODE= @(x,y) ((-2*(a^2)*x*y)/(x^2+y^2)^2)/(1-((a^2)*(x^2-y^2)/(x^2+y^2)^2));


%The classical RK4 solution as a function
k1 = ODE(x,y);
k2 = ODE(x+0.5*dx,y+k1*0.5*dx);
k3 = ODE(x+0.5*dx,y+k2*0.5*dx);
k4 = ODE(x+dx,y+k3*dx);
rk4= @(x,y,dx) y + 1/6*(k1 + 2*(k2+k3) + k4)*dx;

Итак, сначала я определяю ODE как анонимную функцию, затем пытаюсь определить k из ODE и, наконец, RK4 из k.

Но это не работает. Любое предложение, что делать?

1 Ответ

2 голосов
/ 30 октября 2011

Ваши k1 до k4 не определяются или не используются в качестве функций.Когда вы объявляете k1 = ODE(x,y), он пытается оценить функцию ODE с векторами x и y, которые не определены.Что вы, вероятно, хотите сказать, это:

k1 = @(x,y,dx) (ODE(x,y));
k2 = @(x,y,dx) (ODE(x+0.5*dx,y+k1(x,y,dx)*0.5*dx));
k3 = @(x,y,dx) (ODE(x+0.5*dx,y+k2(x,y,dx)*0.5*dx));
k4 = @(x,y,dx) (ODE(x+dx,y+k3(x,y,dx)*dx));
rk4= @(x,y,dx) (y + 1/6*(k1(x,y,dx) + \
                2*(k2(x,y,dx)+k3(x,y,dx)) + \
                k4(x,y,dx))*dx);
...