Форум: "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.49 MB
Время: 0.045 c