|
|
|
Интерполяция кривых?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! См. Приложение Есть 10 экспериментальных точек зависимости А(мощность двигателя) от B (коэффициент производительности) - красные точки - для 10 значений пороговых оборотов двигателя (С) - 10 кривых. Интерполировать 10 точек и построить кривую - примерно понятно как. Вроде бы подойдет полиномиальная интерполяция. В результате получу 10 уравнений кривых. А как "синтерполировать" эти 10 кривых, чтоб получать значение величины А в зависимости от В не только для пороговых величин С (9400, 9600, 9800...), но и для промежуточных (9405.6, 9789.3,...). Подскажите, пожалуйста, название такой задачи и названия возможных путей решений. С численными методами давно уже не сталкивался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:01 |
|
||
|
Интерполяция кривых?
|
|||
|---|---|---|---|
|
#18+
KamskyPaul, По-хорошему, нужна математическая модель. То есть, предположение о том, что B=F p (A,C), где p есть вектор параметров, инвариантных по A и C. Тогда минимизируя функции F p (A,C i )-B эмп (A,C i ), мы получаем общую зависимость F. Если ничего нет, сойдёт предположение F p (A,C)=∑P j (C)A j , P j (C)=∑p ij C i . Таким образом, после получения полигонов для C n , мы имеем по десять точек для каждого полигона P j (C) и можем вывести уже его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:37 |
|
||
|
Интерполяция кривых?
|
|||
|---|---|---|---|
|
#18+
KamskyPaul, Допустим ты получил: f(x, 9400) = A1 * x^2 + B1 * x + C1 f(x, 9500) = A2 * x^2 + B2 * x + C2 f(x, 9600) = A3 * x^2 + B3 * x + C3 f(x, 9700) = A4 * x^2 + B4 * x + C4 f(x, 9800) = A5 * x^2 + B5 * x + C5 Попробуй вывести графики из точек A1..A5, B1..B5, C1..C5 Если получаются довольно гладкие ломанные, то можешь банально для 9450 A вычислить как что-то между A1 и A2. Линейно например, т.е. (A1 + A2) / 2. Но если коэффициенты располагаются не "гладко" или точность не устраивает, тогда тебе надо искать не интерполяционный полином одной перменной f(x), а интерполяционную поверхность двух переменных f(x, z), где z - это пороговая величина. Собственно, расположи свои графики на рисунке не один выше другого, а в 3D, отложив по третьей оси 9400 ... 9800 - вот тебе и поверхность (пока что, только из 10х10 точек,которые и надо интерполировать "простынкой"). Простейший вариант, описанный в начале - это билинейная интерполяция: http://ru.wikipedia.org/wiki/Билинейная_интерполяция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:49 |
|
||
|
Интерполяция кривых?
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon, Точнее не билинейная, а в одном направлении - полиномом какой-то там степени, а в другом - линейная )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:51 |
|
||
|
Интерполяция кривых?
|
|||
|---|---|---|---|
|
#18+
Можно брать "полоски" 3х2 точек и покрывать их функцией a1 x^2 + a2 xy + a3 y^2 + a4 x + a5 y + a6 = 0. В какую сторону брать 3, а в какую - 2, надо поэкспериментировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2011, 14:56 |
|
||
|
Интерполяция кривых?
|
|||
|---|---|---|---|
|
#18+
Т.к. эта задача была "на один раз", нашел замечательный сайт http://zunzun.com/ , вбил туда свои известные точки, получил в ответ функцию на С++ ( Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2011, 09:32 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1342772]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
182ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 467ms |

| 0 / 0 |
