2010-04-02 3 views
0

Я пишу программу Matlab для правила simpson. Я постоянно получаю сообщение об ошибке для многих выходов, когда программа достигает left_simpson = Simpson(a,c,(e1)/2,level, level_max);. Что не так с настройкой left_simpson на Simpson(a,c,(e1)/2,level, level_max);?Проблема в MATLAB со слишком большим количеством выходов

function Simpson(a,b,e1,level, level_max) 


level = level + 1; 

h = b - a; 

c = (a+b)/2; 

one_simpson = h*(f(a) + 4*f(c) + f(b))/6; 

d = (a+c)/2; 

e = (c+b)/2; 

two_simpson = h*(f(a) + 4*f(d) + 2*f(c) + 4*f(e))/2; 

if level >= level_max 

    disp('h') 

    simpson_result = two_simpson; 

    disp('maximum levels reached') 

    disp(simpson_result); 

    if abs(two_simpson - one_simpson) < 15*e1 

     simpson_result = two_simpson + (two_simpson - one_simpson)/15; 

    else 
     left_simpson = Simpson(a,c,(e1)/2,level, level_max); 

     right_simpson = Simpson(c,b,(e1)/2,level, level_max); 

     simpson_result = left_simpson + right_simpson; 

    end 

end 
+1

Близко связанные: http://stackoverflow.com/questions/2429888/how-do-you-pass-in-a-value-to-a-subfunction-in-matlab-i-am-getting-output- ошибки – mtrw

ответ

5

Ваш оператор функции, первая строка в вашем коде, не объявляет, что возвращает Симпсон. Я не знаю, что делает Matlab с таким заявлением. Я думаю, вы должны переписать Simpson для явного возврата значения или значений. Посмотрите документацию Matlab, как это сделать.

Как только вы заявили о возврате Симпсона, вы, вероятно, сможете избежать проблемы с «слишком большим количеством выходов».

+2

Если функция не объявлена ​​с выходными аргументами, она ничего не выводит (если она не открывает цифры, не печатает в командной строке, не сохраняет данные или не записывает в объект дескриптора) – Jonas

+0

Спасибо за разъяснение @Jonas, я программировал Matlab так долго, что я забыл, если бы знал, что происходит в случаях, когда я никогда не кодирую. –

Смежные вопросы