Я не могу решить проблему в Scilab, потому что она застревает из-за ошибок округления. Я получаю сообщениеОшибка округления Scilab
!--error 9999
Error: Round-off error detected, the requested tolerance (or default) cannot be achieved. Try using bigger tolerances.
at line 2 of function scalpol called by :
at line 7 of function gram_schmidt_pol called by :
gram_schmidt_pol(a,-1/2,-1/2)
Это процесс Грама Шмидта с интегралом от произведения двух функций и весом, как скалярное произведение между -1 и 1. gram_schmidt_pol
процесса разработан специально для полинома, и scalpol
- скалярный продукт, описанный для полинома.
a
и b
являются параметрами для Weigth, который (1+x)^a*(1-x)^b
Запись является матрица, представляющая собой набор векторов, он хорошо работает с матрицей [[1;2;3],[4;5;6],[7;8;9]]
, но он терпит неудачу с вышеуказанной ошибкой сообщения на матрице eye(2,2)
, в дополнение к этому, мне нужно сделать это на глаз (9,9)!
Я искал «настройку допуска» в меню, есть некоторые в General->Preferences->Xcos->Simulation
, но я считаю, что это не то, что я не хочу, я пробовал низкие настройки (высокая толерантность) в нем, и он hasn ' ничего не меняйте.
Так как я могу решить эту проблему с rounf-off?
Не стесняйтесь сказать мне, что мое сообщение не имеет ясности. Спасибо.
Редактировать: Код функции:
// function that evaluate a polynomial (vector of coefficients) in x
function [y] = pol(p, x)
y = 0
for i=1:length(p)
y = y + p(i)*x^(i-1)
end
endfunction
// weight function evaluated in x, parametrized by a and b
// (poids = weight in french)
function [y] = poids(x, a, b)
y = (1-x)^a*(1+x)^b
endfunction
// scalpol compute scalar product between polynomial p1 and p2
// using integrate, the weight and the pol functions.
function [s] = scalpol(p1, p2, a, b)
s = integrate('poids(x,a, b)*pol(p1,x)*pol(p2,x)', 'x', -1, 1)
endfunction
// norm associated to scalpol
function [y] = normscalpol(f, a, b)
y = sqrt(scalpol(f, f, a, b))
endfunction
// finally the gram schmidt process on a family of polynome
// represented by a matrix
function [o] = gram_schmidt_pol(m, a, b)
[n,p] = size(m)
o(1:n) = m(1:n,1)/(normscalpol(m(1:n,1), a, b))
for k = 2:p
s =0
for i = 1:(k-1)
s = s + (scalpol(o(1:n,i), m(1:n,k), a, b)/scalpol(o(1:n,i),o(1:n,i), a, b) .* o(1:n,i))
end
o(1:n,k) = m(1:n,k) - s
o(1:n,k) = o(1:n,k) ./ normscalpol(o(1:n,k), a, b)
end
endfunction
Да, я редактирую сообщение –