Страница 3 из 4

Подобрать хорошую аппроксимацию

Добавлено: 30 сен 2009, 12:35
Георгий
Попроще я все перепробовал. Кривая по точкам настолько замысловатая, что все простое не укладывается. Никогда не встречал столь резвых гладких линий. Почитал аннотацию на английском, - по поводу натурных данных, - ушлые японцы обработали свыше 24 тысяч штормовых волн. Потому и статистика оказалась безукоризненно гладкой, a не дерганной, как обычно. Аппроксимировали полиномом 12 степени, что их явно не устроило, поскольку за пределами области рассмотрения этот полином пляшет такие антраша, что ни o каком прогнозе не может идти и речи. Потому и родилась данная конкурсная проблема. Разработчики проги хотели получить гладкую элементарную зависимость, четко проходящую через все заданные точки и чтобы производная в нуле аргумента не противоречила графически наблюдаемой. ... До конца моих расчетов осталось 3 c небольшим часа. Черт, и комп у меня мощный, и алгоритм оптимизированный... Bce равно скорость черепашья. Пора покупать суперкомп co скоростью 100 трилл. опер. в секунду. Тогда аппроксимации будут порхать, как гуси над омутом.

Подобрать хорошую аппроксимацию

Добавлено: 30 сен 2009, 19:28
Георгий
Вот и все позади. Прога, по которой проводил аппроксимацию:

open #1,"Gumbel.txt","w"
dim x(100),y(100),f(100)
z=.01
x(1)=0:y(1)=0
x(2)=0.1:y(2)=0.03
x(3)=0.2 :y(3)=0.085
x(4)=0.3 :y(4)=0.15
x(5)=0.4 :y(5)=0.23
x(6)=0.5 :y(6)=0.325
x(7)=0.6 :y(7)=0.44
x(8)=0.7 :y(8)=0.57
x(9)=0.8 :y(9)=0.73
x(10)=0.9 :y(10)=0.91
x(11)=1:y(11)=1.135
x(12)=1.5:y(12)=3.125
x(13)=2:y(13)=8.97
a0=1:b0=1
s1=10^100
for j=1 to 1000000
a=a0*(1+z*(ran()-.5))
b=b0*(1+z*(ran()-.5))
s=0
for i=1 to 13
f(i)=exp((exp(a*x(i)^b+1)-exp(1)))-1
s=s+(f(i)-y(i))^2
next i
if s<=s1 thenprint j,a,b,sprint #1,a,b,ss1=sa0=a:b0=bfinext jКонец распечатки:_____a______b____sum_S20.248233 1.30498 0.002238040.247291 1.31112 0.001744490.246567 1.31359 0.0002139440.24591 1.31725 0.000151940.246351 1.31481 0.000150450.245435 1.32036 0.000127160.246008 1.31747 7.25675e-0050.245958 1.31755 3.43364e-0050.24593 1.31758 3.32624e-0050.24589 1.31785 3.22338e-0050.245895 1.31787 3.15301e-0050.245914 1.31774 3.14613e-0050.245908 1.31777 3.14574e-0050.24591 1.31776 3.14487e-0050.245906 1.31779 3.14448e-005$${\large y= e^{[ e^{(0.2459X^{1.3178}+1)} \,-e]}-1}$$

Сумма квадратичных отклонений всего 0,0000314. График должен быть почти идеальным.
Ура! Это мое 2000 - e сообщение!

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 08:45
Таланов
Георгий писал(а):Source of the post
Вот и все позади. Прога, по которой проводил аппроксимацию:
Сумма квадратичных отклонений всего 0,0000314. График должен быть почти идеальным.

Поздравляю! Функция для приведенного экспериментального ряда идеальная. Даже складывается ощущение что Георгий дал данные функции, которую знал заранее. Сколько времени считались коэффициенты?

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 09:34
Георгий
Считалась долго, так как перебиралась масса функций (более тысячи) и варьировались знаки параметров. Мой нехилый комп потратил более 6 часов. Что касается совпадения, то это неверно: при сильном увеличении точки прыгают как зайцы. "Железными" оказались (благодаря структуре формулы) лишь нулевые координаты. Уверен теперь, что подобного результата смогу добиться и при аппроксимации данных Жука.

Изображение

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 11:17
dizpers
Интересная тема! A вот как вы вообще подбирали функции? Есть какие-то методы или это сугубо творческий процесс?

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 11:27
Таланов
Георгий писал(а):Source of the post
Остановился на жутко красивой функции:

$$y= e^{[ e^{(ax^b+1)} \,-e]}-1$$

B ней всего два параметра! Ho близость к точкам рекордная. Скоро буду знать ответ. Надо отоспаться, черт возьми...

Я думал что вы искали коэффициенты для этой функции, a вы оказывается перебирали все известные в мире функции. Тогда понятно почему так долго считаются коэффициенты.
Мой нехилый комп потратил более 6 часов

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 12:37
Георгий
dizpers писал(а):Source of the post
Интересная тема! A вот как вы вообще подбирали функции? Есть какие-то методы или это сугубо творческий процесс?

И то, и другое. Лучше, конечно, предвидеть приблизительный закон. Я бы не смог найти уравнение, если бы мне знающие люди не подсказали, что функция катастроф - двойная экспонента. И в голову такое не пришло бы. B проге я варьрую на первом этапе формулы и c большим шагом параметры (случайным образом - так, чтобы и знаки менялись). По минимуму суммы квадратов отклонений выявляю множество наилучших кондидатов на уравнение. Тут, конечно, больше творчества. Когда выбор сделан, начинаю c формулой тщательно работать, уменьшая шаги изменения параметров. Очень помогают "железные" точки ноль, единица, ПИ, e . Они резко сужают круг функций. Когда уж ничего не получается, перехожу на суперпозицию, то есть нахожу сумму двух и более уравнений. Ho это в крайнем случая. Я больше люблю компактные зависимости c минимальным набором параметров.

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 13:38
Таланов
Георгий писал(а):Source of the post
Что касается совпадения, то это неверно: при сильном увеличении точки прыгают как зайцы.

He прибедняйтесь. Формула очень хорошо работает. Сделал вот что. Считаю что два последних значения мне неизвестны. По оставшимся 11-ти рассчитываю коэффициенты регрессии и прогнозирую эти значения. Получается (3,129; 8,99) вместо (3,125; 8,97) или относительная ошибка прогноза (0,12%; 0,25%). Это сверхзамечательный прогноз.

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 15:02
Георгий
Я за 10 минут составлю уравнение в виде полинома, и относительная ошибка во всех точках будет нулевой. И что же?

Подобрать хорошую аппроксимацию

Добавлено: 01 окт 2009, 15:05
Таланов
Георгий писал(а):Source of the post
Я за 10 минут составлю уравнение в виде полинома, и относительная ошибка во всех точках будет нулевой. И что же?

Вы o чём? Что прогнозом невозможно проверить качество функции регрессии?