Программа MATLAB отнимает все больше и больше памяти - PullRequest
0 голосов
/ 18 декабря 2010

Я собираюсь написать программу на MATLAB, которая принимает функцию, устанавливает значение D от 10 до 100 (цикл for), интегрирует функцию с правилом Симпсона (цикл while) и затем отображает ее. Теперь, это хорошо работает для первых 7-8 значений, но затем это занимает больше времени, и в итоге у меня заканчивается память, и я не понимаю причину этого. Это код до сих пор:

global D;
s=200;  
tolerance = 9*10^(-5);  
for D=10:1:100  
    r = Simpson(@f,0,D,s);  
    error = 1;  
    while(error>tolerance)  
        s = 2*s;  
        error = (1/15)*(Simpson(@f,0,D,s)-r);  
        r = Simpson(@f,0,D,s);  
    end  
    clear error;  
    disp(r)  
end  

1 Ответ

2 голосов
/ 23 июня 2011

Комментарий mtrw , вероятно, уже частично отвечает на вопрос: s следует повторно инициализировать внутри цикла for.Отправленный код приводит к необратимому увеличению s каждый раз, когда ошибка слишком велика, поэтому для больших значений D наибольшее значение s будет .

Кроме того, поскольку код переоценивает всю интеграцию вместо повторного использования предыдущей интеграции из [0, D-1], вы тратите много ресурсов, если не хотите явно показать устойчивость к ошибкам вашей функции Simpson- s для большого значения D придется многократно увеличить, чтобы сохранить ту же самую низкую ошибку (поскольку вы интегрируете в больший диапазон, вам нужно суммировать больше точек).

Наконец, ваша реализация Simpson может, конечно, делать забавные вещи, которые никто не может сказать, не видя этого ...

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