2015-08-23 2 views
0

поэтому я пытаюсь создать функцию Рунге Кутта, и это мой код:ОДА Рунге Кутта MATLAB ошибка

function [t,U] = RK(f, n, eta, interv) 
h = (interv(2)-interv(1))/n; 
t = interv(1):h:interv(2); 

v(1) = eta(1); 
w(1) = eta(2); 
for i=1:n 
    k1 = f([v(i),w(i)]); 
    k2 = f([v(i),w(i)]+h*k1/2); %f(t(i)+h/2, u(:,i)+h*k1/2); 
    k3 = f([v(i),w(i)]+h*k2/2); 
    k4 = f([v(i),w(i)]+h*k3); 

    v(i+1) = v(i) + h*(k1(1)+2*k2(1)+2*k3(1)+k4(1))/6; 
    w(i+1) = w(i) + h*(k1(2)+2*k2(2)+2*k3(2)+k4(2))/6; 
end 
U = [v;w]; 
end 

Где U представляет собой матрицу из 2 строк и п + 1 столбцов, здесь проблема когда я пытаюсь выполнить эту функцию, например:

RK(sin, 10, [0,1], [5,15]) 

Я получаю ошибку not enough input arguments, но когда я пытаюсь выполнить код в виде сценария и заменяя п грехом каждая вещь работает, и я получаю матрицу U Can кто-нибудь скажет, что такое решение?

+1

Вы пытаетесь использовать грех как анонимную функцию. У меня нет опыта с этим, но SO усеяно информацией об этом. – Adriaan

+0

спасибо A. Visser Мне нужно было просто добавить @ в RK (@sin, ....) –

+0

Тогда я сделаю ответ. – Adriaan

ответ

2

Вы используете sin в качестве функционального дескриптора. Просто добавьте символ @, и вы настроены.

RK(@sin, 10, [0,1], [5,15])