Трапециевидное правило Matlab - PullRequest
0 голосов
/ 06 декабря 2011

Я хочу интегрировать "\ int_ {0} ^ {1} (exp (-int_ {0} ^ {y} f (x) dx)) dy" с моим основным алгоритмом трапеции.Я получаю объявление об ошибке, но я должен определить g как функцию.У вас есть идеи, как это сделать?Большое спасибо за любой ответ!

function y = trapapadbl(low1, up1,low2,up2,intstep1,intstep2,f)
g = 0;
step1 = (up1 - low1) / intstep1;
step2 = (up2 - low2) / intstep2;

for j = low1 : step1 : up1
    g = g + feval(f,j);
end
g = @(y)(g - (feval(f, low1) + feval(f, up1))/2) * step1;
for i = low2 : step2 : up2
    y= y + feval(g,i);
end
y= (y - (feval(g, low2) + feval(g, up2))/2) * step2;

1 Ответ

2 голосов
/ 06 декабря 2011
>> trapapadbl(0,1,0.1,0,1,0.1,@sin)

??? Undefined function or variable "y".

Error in ==> trapapadbl at 12
    y= y + feval(g,i);

Не слишком усердно пытаясь понять ваш код (!), Ошибка в том, что y никогда не инициализировался. Вы не можете ничего добавить к y, пока оно не будет иметь значения. Когда я инициализирую y в 0, код запускается, но я получаю 0 в качестве вывода, чего не происходит, когда вы интегрируете sin от 0 до 1. Возможно, я вызываю функцию неправильно, но это что-то высматривать!

Кроме того, ваш код сбивает с толку, потому что вы используете переменную g как двойное число (число) и функцию, даже в одной строке! Та же проблема возникает, когда y является вводом для вашей анонимной функции, но также удваивается позже. Это синтаксически правильно, но немного сложно для чтения. Попробуйте использовать другое имя переменной или включить четкие комментарии (или оба!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...