Обнаружена ошибка округления, требуемый допуск (или значение по умолчанию) не может быть достигнут. Попробуйте использовать большие допуски в SCILAB

Я использую команду интеграции, но scilab показывает мне обнаруженную ошибку округления и говорит мне использовать высокое значение допуска, о котором я понятия не имею.

a=4
b1=1
b2=3
N=6
v=-50
for n=1:N
    h(n,n)=n^2+(v/a)*integrate('1-cos(2*n*%pi*(r/a))','r',b1,b2)
    for m=n+1:N
        h(m,n)=(v/a)*integrate('(cos((m-n)*%pi*(r/a))-cos((m+n)*%pi*(r/a)))','r',b1,b2)
        h(n,m)=h(m,n)
    end
end

[al,bl,R]=spec(h,s);
el=al./bl;
e=R;
[el,k]=gsort(el)
disp(h);
disp(el)

person Anshul Sharma    schedule 07.09.2019    source источник
comment
Прежде чем задать новый вопрос, можете ли вы подтвердить ответ на предыдущий? Тогда я отвечу на этот новый...   -  person Stéphane Mottelet    schedule 09.09.2019
comment
@StéphaneMottelet, у меня была такая же проблема.   -  person Anshul Sharma    schedule 09.09.2019
comment
Вы должны прочитать, протестировать и подтвердить ответ на этот вопрос: > stackoverflow.com/questions/57815134/   -  person Stéphane Mottelet    schedule 09.09.2019
comment
@StéphaneMottelet Извините за это. я сделал это сейчас   -  person Anshul Sharma    schedule 11.09.2019


Ответы (1)


Абсолютный допуск по умолчанию integrate в некоторых случаях может быть слишком строгим. Ниже я изменил его на 1e-13 в последнем аргументе integrate в строке 9 вашего скрипта, который теперь работает нормально (я также добавил определение матрицы s, которую я полагал как матрицу идентичности, как и в вашем предыдущем сообщении):

a=4
b1=1
b2=3
N=6
v=-50
for n=1:N
    h(n,n)=n^2+(v/a)*integrate('1-cos(2*n*%pi*(r/a))','r',b1,b2)
    for m=n+1:N
        h(m,n)=(v/a)*integrate('(cos((m-n)*%pi*(r/a))-cos((m+n)*%pi*(r/a)))','r',b1,b2,1e-13)
        h(n,m)=h(m,n)
    end
end

s=eye(N,N);
[al,bl,R]=spec(h,s);
el=al./bl;
e=R;
[el,k]=gsort(el)
disp(h);
disp(el)
person Stéphane Mottelet    schedule 11.09.2019
comment
Я также понятия не имею, почему этот фактор отошел в сторону, поскольку моя работа заключалась в том, чтобы просто увидеть физику (извините, я не сказал ранее, что это конечная проблема с квадратной ячейкой 1D) и волновую функцию, и наш профессор научил нас нескольким вещам синтаксиса scilab. Итак, я смущен, что это за допуск и почему берется только это значение? - person Anshul Sharma; 12.09.2019
comment
Спасибо теперь работает. Но, пожалуйста, помогите мне, когда добавить фактор, который вы добавили в команду интеграции, а когда нет, и что на самом деле он делает? - person Anshul Sharma; 12.09.2019
comment
Функция integrate использует адаптивную схему интегрирования и регулирует длину шага интегрирования по отношению к оценке погрешности интегрирования. Необязательные параметры rtol и atol (см. страницу справки integrate) позволяют изменить относительный и абсолютный допуск, который сравнивается с этой оценкой. В зависимости от интегрируемой функции значения по умолчанию иногда необходимо увеличивать. - person Stéphane Mottelet; 12.09.2019