Да, вы можете.
Есть хороший submission on the file exchange, который позволяет вам делать именно это. Он работает, аппроксимируя вашу кривую полиномом Чебычева, а затем нахожу все вещественные корни этого многочлена.
Если вы хотите, вы можете использовать эти оценки для корней в качестве начальных значений для fzero
, но часто (по крайней мере, для гладких и других хорошо выполненных кривых) требования к точности уже могут быть выполнены с использованием приближения Чебычева более высокого порядка ,
Для примера, используя только 18 значений функции (у меня есть немного измененная версия файла, но суть та же):
>> f = @(A) 17.7*sin(A).*cos(A)+87*sin(A).^2-9.65*cos(A)-47*sin(A);
>> R = FindRealRoots(f, -5,5, 17)
R =
-3.709993256346244
-3.345207732130925
-0.201929737187637
0.572382702285053
2.573423209113534
2.937157987217741
>> R2 = R;
>> funcCount = 0;
>> for ii = 1:numel(R)
[R2(ii), ~,~, output] = fzero(f,R2(ii));
funcCount = funcCount + output.funcCount;
end
>> max(abs(R2(:)-R(:)))
ans =
8.564253235401331e-004
>> funcCount
ans =
46
например, есть только 8 частей на десять тысяч улучшения не менее 46 дополнительных оценок функций.
@RobertP .: Ничего, что я знаю ... что несколько странно, так как [Чебышева многочлены не] (http://en.wikipedia.org/wiki/Chebyshev_polynomials) являются лучшим выбором для полиномиальных приближений. Действительно, по крайней мере, для типа функции, с которой вы имеете дело (гладкой, непрерывной и т. Д.), Можно ожидать, что точность будет довольно высокой. Единственный недостаток этого заключается в том, что может быть трудно выбрать «хорошие» значения 'n' (здесь очень удобно использовать встроенную функцию построения графика). –
+1 для предложения полиномов Чебычева я нашел их очень полезными во многих аспектах вычислений. – bla