I biçimi olduğunu veri . ile arasındaki tahminler için bu yazının formüllerini kullanıyorum: John Fox - Doğrusal Olmayan Regresyon ve Doğrusal Olmayan En Küçük Kareler Bu makalede, verilere bakarak tahmin edilmiştir. Bunu yaparsam, sadece üç puanım olsa bile iyi çalışır. Bundan diğer ikisini hesaplayabilirim. Parametrelerimi R'de nls () ve C #'da LevenbergMarquardt ile test ettim. Onların geri döndürdüğü modeller tatmin edicidir. β1β3β1
Sorun için iyi bir tahminci elde etmek için verilere bakmak istemiyorum, benim programı hesaplamak istiyorum. Bir süredir değerlerimin maksimumundan biraz daha yüksek değerler kullandım ( ve \ max * 1.5 arasında bir şey . Bu fonksiyonun çoğunu kapsadığı sürece iyi çalıştı. veri noktaları eğrinin "en üstünde" bir yerdeydi, ama hepsi çekim noktasının "altındaki" alandan geldiğinde, bu tahmin edici kesinlikle olması gerekenden daha düşüktü ve modele sığamazdım. bu kesinlikle maksimum noktadan daha yüksektir (gülünç derecede yüksek değerlerle çarparak) model herhangi bir yararlı şekilde uymaz.
Ölçümler şöyle görünebilir:
x = (40, 50, 60, 70), y = (1000, 950, 400, 200) -> hesaplaması kolay
x = (40, 50, 60, 70), y = (1000, 950, 800, 100) -> hesaplaması kolay
x = (40, 50, 60, 70), y = (500, 200, 100, 50) -> tahmin etmek o kadar kolay değil
Sanırım verilen noktalardaki deltaları hesaplayarak ve fonksiyonun neresinde olduğumu ("alt", "üst", eğimde) bulabilirim ve buna bağlı olarak bir üst sınır hesaplayabilirim. Daha iyi bir çözüm için bir ipucu var mı? Ek bilgi: Eğer yapılamazsa, benim için uygun olabilecek ölçümlerin olabildiğince iyi olması ve bazı ölçümlerin hiç uygun olamayacağını kabul ediyorum.
(C # 'da bir uygulama istememe rağmen buraya gönderdim, sorunun dile bağlı olduğunu düşünmüyorum)
güncelleme (bunun uygulaması):
x sıcaklık değerleri ve karşılık gelen ölçümlerdir. Doğası gereği, daha düşük sıcaklıklarda daha yüksek y değerlerine sahip bir lojistik eğri gibi görünmesi ve tersi de geçerlidir. Erime noktası, model parametrelerinde küçük değişikliklerle çok değişen eğrinin bükülme noktasına eşittir.
güncelleme (bazıları 7 veri noktası ve bilinen bükülme noktası 60 olan veriler):
//first I made up some data without any noise and enough (13) points
double[] x17 = { 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90 };
double[] y17 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 59.642....
//Then I took three different parts of that data
(to simulate how much data I will have in the real world)
double[] x18 = { 30, 35, 40, 45, 50, 55, 60 };
double[] y18 = { 2000, 1920, 1820, 1700, 1500, 1280, 1000 };
//calculated inflection point: 59.263.... is ok!
double[] x19 = { 60, 65, 70, 75, 80, 85, 90 };
double[] y19 = { 1000, 720, 500, 300, 180, 80, 0 };
//calculated inflection point: 53.447.... to small!
double[] x20 = { 45, 50, 55, 60, 65, 70, 75 };
double[] y20 = { 1700, 1500, 1280, 1000, 720, 500, 300 };
//calculated inflection point: 59.868... almost perfect!
Üst sınır tahmini için şu anki yaklaşımım y0 * y0 / y1. Bu şekilde, her zaman maksimuma yakın bir değere sahip olamayacağımı dikkate almayı umuyorum.
update: x ve y değerleri asla negatif olmayacaktır. Bir veri noktası kaybolmadıkça x daima {40, 45, 50, 55, 60, 65, 70} olacaktır.
güncelleme: Takılması kolay olması gereken simüle edilmiş verilerle birçok test yaptım (tam olarak eğri üzerinde olan veri noktalarını seçiyorum = herhangi bir gürültü olmadan) ve birinci veya ikinci veri noktası (burada x = 40 veya x = 45) eksik. Sanırım bu tür ölçümleri atmam gerekecek ve kullanıcı bununla yaşamak zorunda kalacak.