Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.072 c
14-1117031425
Kolan
2005-05-25 18:30
2005.06.14
Книги по проектированию.


14-1117002747
syte_ser78
2005-05-25 10:32
2005.06.14
Прикольный исходник на паскале нашол :)


14-1116748532
Kerk
2005-05-22 11:55
2005.06.14
С днем рожденья! 22 мая


3-1115298176
Alexandr
2005-05-05 17:02
2005.06.14
DbgridEh+FIBPlus


3-1115721196
Mr.F
2005-05-10 14:33
2005.06.14
Построение 7 уровнего дерева из таблицы