Квадратура матлаба в цикле

Я пытаюсь использовать числовые интегральные функции Matlab, например, quad в цикле. Но я также хочу, чтобы Matlab вычислил мой интеграл для нескольких интегральных пределов:

p=1;
q=3;
for k=1:5
    a=0;
    b(k)=k.*10;
     integrand(k)=@(v)(v-a).^(p-1).*(b(k)-v).^(q-1);
p(k)=quad(integrand,a,b(k));
end

Это действительно кажется мне умным :), но у Matlab нет идеи: (Спасибо за любую помощь! мг


person user1018331    schedule 10.11.2011    source источник


Ответы (2)


Я думаю, что основная проблема заключается в том, что вы используете p как параметр, а также для хранения результатов вашей интеграции. Таким образом, внутри цикла p становится вектором, и тогда его нельзя использовать в качестве степени в подынтегральном выражении. Я не уверен, почему, но мне также кажется, что нужно удалить k в качестве индекса для b и integrand. Но этот код, кажется, работает:

p=1;
q=3;
for k=1:5
    a=0;
    b=k.*10;
    integrand=@(v)((v-a).^(p-1).*(b-v).^(q-1));
    result(k)=quad(integrand,a,b);
end
person Sam Roberts    schedule 10.11.2011

Похоже, вы могли бы определить подынтегральное выражение с дополнительным параметром, поэтому

p=1;
q=3;
integrand=@(v,b)(v-a).^(p-1).*(b-v).^(q-1);  
for k=1:5
    a=0; 
    b=k.*10;
    p(k)=quad(integrand,a,b); 
end

но при запуске все равно выдает ошибку:

??? Error using ==> power
Matrix dimensions must agree.

Error in ==> @(v,b)(v-a).^(p-1).*(b-v).^(q-1)

Error in ==> quad at 76
y = f(x, varargin{:});

Хотя не совсем уверен, что вы пытаетесь сделать...

person tdc    schedule 10.11.2011