|
|
  |
Придумал алгоритм интерполяции. Протестируем результаты?, вызов от дилетанта |
|
|
|
Nov 9 2013, 13:21
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Спасибо, взял как есть, сам вделал в скрипт. Признаться, я думал что ранее приведенная мной реализация Фарроу уже оптимизирована по количеству операций и даже не задумывался о том, что ее можно еще упростить. В результате я своим методом выиграл только один сдвиг. CODE clf reset N = 10; x = 1:N; y = rand(1, N); h = 0.01; d = 0; plot(x, y, 'or', 'LineWidth', 2); hold on; grid on; axis on; title(['Локальная интерполяция случайного набора точек', ... ' полиномом Лагранжа 3 степени, 2 алгоритма расчета.']); plot(x(1), y(1), 'b-', x(1), y(1), 'g:'); legend('точки', 'мой алгоритм', 'Фарроу по Anatoliy'); for k = 1:(N-2) % мой алгоритм: 1 умножение, 1 сдвиг, 6 сложений c = d; e = y(k+1) - y(k); d = y(k+2) - y(k+1) - e; b2 = c/2; b3 = (d - c)/6; b1 = e - b2 - b3; if (k == 1) continue; end t = 0:h:1; f = b3.*t.^3 + b2.*t.^2 + b1.*t + y(k); plot(t+x(k), f, 'b-') % Фарроу по _Anatoliy: 1 умножение, 2 сдвига, 6 сложений p = y(k) - y(k+1); q = (y(k+2) - y(k))/2; a3 = ( (y(k+2) - y(k-1))/3 + p )/2; a2 = p + q; a1 = q - a3; t = -1:h:0; f = a3.*t.^3 + a2.*t.^2 + a1.*t + y(k+1); plot(t+1+x(k), f, 'g:') end
|
|
|
|
|
May 17 2014, 10:57
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(_Anatoliy @ Nov 8 2013, 18:16)  Ага,у меня тоже меньше 6-ти сложений не получилось,видимо предел. Оказывается, не предел ) На досуге подумал, получил 5 сложений, 1 умножение и 1 сдвиг. CODE clf reset N = 10; x = 1:N; y = rand(1, N); h = 0.01; g = y(3) - y(2); d = g - y(2) + y(1); plot(x, y, 'or', 'LineWidth', 2); hold on; grid on; axis on; title(['Локальная интерполяция случайного набора точек', ... ' полиномом Лагранжа 3 степени, 2 алгоритма расчета.']); plot(x(1), y(1), 'b-', x(1), y(1), 'g:'); legend('точки', 'мой алгоритм', 'Фарроу по Anatoliy'); for k = 2:(N-2) % мой алгоритм: 1 умножение, 1 сдвиг, 5 сложений c = d; e = g; g = y(k+2) - y(k+1); d = g - e; b2 = c/2; b3 = (d - c)/6; b1 = e - b2 - b3; t = 0:h:1; f = b3.*t.^3 + b2.*t.^2 + b1.*t + y(k); plot(t+x(k), f, 'b-') % Фарроу по _Anatoliy: 1 умножение, 2 сдвига, 6 сложений p = y(k) - y(k+1); q = (y(k+2) - y(k))/2; a3 = ( (y(k+2) - y(k-1))/3 + p )/2; a2 = p + q; a1 = q - a3; t = -1:h:0; f = a3.*t.^3 + a2.*t.^2 + a1.*t + y(k+1); plot(t+1+x(k), f, 'g:') end
|
|
|
|
|
May 18 2014, 12:51
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Цитата(_Ivana @ May 18 2014, 18:11)  Ну как, спорт, например )... Или вы к тому, чтобы я занялся делом, а не выводил пяти...пых обезьян, как герой мультфильма Саус Парк? Мне то какое дело чем вы занимаетесь.Просто я хронический практик, и убеждён что практической выгоды от применения подобных реализаций нет. Цитата(_Ivana @ May 18 2014, 18:11)  И никому не интересны эти результаты? А насчёт результатов не торопитесь,пусть народ посмотрит.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|