Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Аппроксимация экспериментальных данных.   Найти похожие ветки 

 
Fenik   (2005-02-23 17:22) [0]

Нужно по данным эксперимента построить кривую. Заранее известно, как примерно она должна выглядеть: определенное число точек перегиба, точек минимума и максимума. Аналитического выражения находить не нужно, а надо лишь построить красивую кривую, максимально приближенную к экспериментальной ломаной.

Буду благодарен за ссылку или совет по теме.

---------
PS. Это, конечно, относится больше к математике, чем к графике. Но прошу модераторов не перемещать вопрос в "Потрепаться", там он быстро затеряется.


 
MBo ©   (2005-02-24 06:45) [1]

Если известен закон, формула, которой должны соответствовать эксп. данные, то их обычно приближают, подгоняя параметры этой функции - например - метод наименьших квадратов, Левенберга-Марквардта.
Если неизвестен - часто строят плавную кривую, например, с помощью сплайнов (если данные зашумленные - сглаживающих)


 
Fenik   (2005-02-24 19:13) [2]

> MBo ©  (24.02.05 06:45) [1]

Закон не известен. Значит надо копать информацию по сплайнам..
Может быть посоветуете что почитать в сети?
Спасибо.


 
MBo ©   (2005-02-25 07:01) [3]

>Может быть посоветуете что почитать в сети?
Честно говоря, приличной информации по сплайнам в сети немного, а про сглаживающие практически ноль.
Поиск по "кубический сплайн"
Есть общие книги по численным методам - Самарский, Бахвалов, и т.д. В них обычно этой теме с десяток страниц отводится, но от практического применения это весьма далеко.

На английском - www.nr.com, книжка Numerical Recipes in C

Из бумажной литературы -
Алберг, Нильсен, Уолш
Стечкин Субботин

реализация (на Фортране) -
БЧА НИВЦ МГУ
www.netlib.org

алгоритм сглаживающих сплайнов из БЧА у меня есть реализованный на паскале, если понадобится


 
Инструктор   (2005-02-25 07:09) [4]

Реализация кубических - у меня есть. Тоже - если что...


 
1008 ©   (2005-02-25 13:54) [5]

В Шрюфере были разные виды аппроксимации. Только я его видел живьём и по-украински. Если сильно надо могу поискать, что у меня осталось.


 
Fenik   (2005-02-25 17:54) [6]

> MBo ©  (25.02.05 07:01) [3]
> алгоритм сглаживающих сплайнов из БЧА у меня есть реализованный на паскале, если понадобится


> Инструктор  (25.02.05 07:09) [4]
> Реализация кубических - у меня есть. Тоже - если что...


Вышлите, пожалуйста, на fenik@nm.ru


 
Fenik   (2005-02-25 17:58) [7]

> 1008 ©  (25.02.05 13:54) [5]
> В Шрюфере были разные виды аппроксимации. Только я его видел живьём и по-украински. Если сильно надо могу поискать, что у меня осталось.


Как я понял, то, что мне нужно, - не аппроксимация. До неё я еще не дошел :)) Надо сначала нарисовать..
Да и очень четкое описание того, как аппроксимировать в моем случае, к счастью имеется.


 
MBo ©   (2005-02-25 18:08) [8]

>Да и очень четкое описание того, как аппроксимировать в моем случае, к счастью имеется
Пришли данные посмотреть(в любом удобочитаемом формате - хоть текстовом, хоть бинарном с пояснением). И это четкое описание тоже не помешает.


 
Fenik   (2005-02-25 23:52) [9]

Отправил.


 
Fenik   (2005-02-25 23:53) [10]

1 Mb :)


 
Eraser ©   (2005-02-26 00:17) [11]

Вот пример, правда на QBasic"e ))

"‚ аЁ ­в 21
CLS
OPTION BASE 1
CONST N = 8
CONST k = 30
DIM x(N)
DIM y(N)
DIM s(12)
"‡ ¤ с¬ x Ё y
DATA 1,2,3,4,5,6,7,8
READ x(1), x(2), x(3), x(4), x(5), x(6), x(7), x(8)
DATA 1.6, 2.2 , 2.1, 2.6, 2.5, 3.1, 3.2, 3.7
READ y(1), y(2), y(3), y(4), y(5), y(6), y(7), y(8)
FOR i = 1 TO N
s(1) = s(1) + x(i) ^ 4
s(2) = s(2) + x(i) ^ 2 * EXP(-x(i))
s(3) = s(3) + y(i) * x(i) ^ 2
s(4) = s(4) + EXP(-x(i)) * x(i) ^ 2
s(5) = s(5) + EXP(-2 * x(i))
s(6) = s(6) + EXP(-x(i)) * y(i)
"
s(7) = s(7) + x(i) ^ 2
s(8) = s(8) + x(i)
s(9) = s(9) + x(i) * y(i)
s(10) = s(10) + x(i)
s(11) = N
s(12) = s(12) + y(i)
NEXT i
"
d = s(1) * s(5) - s(2) * s(4)
da = s(3) * s(5) - s(2) * s(6)
db = s(1) * s(6) - s(2) * s(3)
a1 = da / d
b1 = db / d
d = s(7) * s(11) - s(8) * s(10)
da = s(9) * s(11) - s(8) * s(12)
db = s(7) * s(12) - s(8) * s(9)
a2 = da / d
b2 = db / d
"
s1 = 0
s2 = 0
FOR i = 1 TO 8
s2 = s2 + (a2 * x(i) + b2 - y(i)) ^ 2
NEXT i

FOR i = 1 TO 8
s1 = s1 + (a1 * x(i) ^ 2 + b1 * EXP(-x(i)) - y(i)) ^ 2
NEXT i
mes$ = "‘।­ҐЄў ¤а вЁзҐбЄ®Ґ ®вЄ«®­Ґ­ЁҐ а ў­®: "
PRINT "Џ а ¬Ґвал ¤«п га ў­Ґ­Ёп ॣаҐббЁЁ y=ax^2+be^-x:"
PRINT "a = "; a1, "b = "; b1
PRINT mes$; s1
PRINT ""
PRINT "Џ а ¬Ґвал ¤«п га ў­Ґ­Ёп ॣаҐббЁЁ y=ax+b:"
PRINT "a = "; a2, "b = "; b2
PRINT mes$; s2
PRINT ""
PRINT "’ Ў«Ёж  §­ зҐ­Ё© Ї®«г祭­ле дг­ЄжЁ©:"
PRINT "X", "’ Ў«Ёз­®Ґ", "y=ax^2+be^-x", "y=ax+b"
FOR i = 1 TO 8
y1 = a1 * x(i) ^ 2 + b1 * EXP(-x(i))
y2 = a2 * x(i) + b2
PRINT x(i), y(i), y1, y2
NEXT i
PRINT "„«п Їа®б¬®ва  Ја дЁЄ®ў дг­ЄжЁ© ­ ¦¬ЁвҐ enter"
COLOR 15
INPUT z$
CLS
SCREEN 12
LINE (5, 5)-(5, 150)
LINE (5, 150)-(300, 150)
LINE (5, 5)-(3, 15)
LINE (5, 5)-(7, 15)
LINE (300, 150)-(290, 148)
LINE (300, 150)-(290, 152)
ox = 5
oy = 150
FOR i = 1 TO 7
"PRINT x(i),
"PRINT y(i),
y = y(i)
COLOR 14
LINE (ox + k * x(i), oy - k * y(i))-(ox + k * x(i + 1), oy - k * y(i + 1))
y = a1 * x(i) ^ 2 + b1 * EXP(-x(i))
yn = a1 * x(i + 1) ^ 2 + b1 * EXP(-x(i + 1))
COLOR 10
LINE (ox + k * x(i), oy - k * y)-(ox + k * x(i + 1), oy - k * yn)
"PRINT y,
y = a2 * x(i) + b2
yn = a2 * x(i + 1) + b2
COLOR 12
LINE (ox + k * x(i), oy - k * y)-(ox + k * x(i + 1), oy - k * yn)
"PRINT y
NEXT i
COLOR 14
LOCATE 12, 1
PRINT "’ Ў«Ёз­ п дг­ЄжЁп"
COLOR 10
PRINT "y=ax^2+be^-x"
COLOR 12
PRINT "y=ax+b"
COLOR 15
END


 
Fenik   (2005-02-26 00:31) [12]

> Eraser ©  (26.02.05 00:17) [11]
> PRINT "Џ а ¬Ґвал ¤«п га ўҐЁп ॣаҐббЁЁ y=ax^2+be^-x:"
> PRINT "a = "; a1, "b = "; b1
..
> PRINT "Џ а ¬Ґвал ¤«п га ўҐЁп ॣаҐббЁЁ y=ax+b:"
..
> PRINT "X", "’ Ў«Ёз®Ґ", "y=ax^2+be^-x", "y=ax+b"


Как я понял, это именно аппроксимация, т.е. поиск коэффициентов известной функции и построение графика уже по уравнению.
Мне же нужно построить кривую по точкам, а не по уравнению - это, я предполагаю, уже из области стат. обработки. Поиск погрешностей и т.п.


 
MBo ©   (2005-02-26 08:44) [13]

>Fenik  
Посмотрел.
Сплайны тебе не подойдут, поскольку действительно нужно известную функцию подогнать, а не просто гладкую кривую нарисовать. Их можно использовать для сглаживания, если данные зашумлены, но методы подгонки и без этого должны справиться.

В том, что ты прислал, уже есть описание моделирования.
Возможно, кроме этого придется штудировать литературу по численным методам.


 
Fenik   (2005-02-26 16:51) [14]

> MBo ©  (26.02.05 08:44) [13]

Но ведь там сначала строится экспериментальная кривая по точкам, а затем определяются коэффициенты функции и строится аналитическая кривая (пунктиром которая) по полученному уравнению. Неужели, нельзя тоже самое сделать программно, также получить две кривые? Или я чего-то не понимаю?


 
MBo ©   (2005-02-27 14:36) [15]

Да, задача подгонки в этом и состоит - даны экспериментальные данные и априори известен вид функции, которой они должны соответствовать. При подгонке (моделировании) ищутся коэффициенты в записи функции. Для твоего случая, возможно, сначала стоит грубо подогнать полиномом примерно 5-6 степени по МНК (если степень выше, решение обычно неустойчиво), для того, чтобы понять, сколько перегибов. Исходя из этого, судя по теории, определяется количество экспоненциальных слагаемых в формуле Sum (Ai*Exp(g*Bi))+чего-то там еще, и далее производится подгонка Ai и Bi


 
Fenik   (2005-02-27 14:57) [16]

> MBo ©  (27.02.05 14:36) [15]

Спасибо! Буду думать. :)



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.039 c
3-1115353374
muaddib
2005-05-06 08:22
2005.06.14
работа со связанными таблицами в ADO


1-1116855526
Viktop
2005-05-23 17:38
2005.06.14
Процедура для каждого элемента TreeView


1-1116949818
Karlson
2005-05-24 19:50
2005.06.14
Как Hintу в Comboboxе присвоить текущее активное значение?


14-1117161434
-[ HAWK ]-
2005-05-27 06:37
2005.06.14
Исходник взломщика для игр


1-1117384354
GEEK
2005-05-29 20:32
2005.06.14
Finalize(); выдает ошибку...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский