tamamlayıcı ile piton içine takılması parametresi (ya da başka bir faydalı dili)

oy
0

Temelde x bir fonksiyonu olarak f (x) bir bilgi, veri kümesi vardır ve kendisini x. Ben aşağıda ifade olarak verilir f (x) biçiminde üzerinde çalışıyorum o sorunun teoriden biliyorum:

Denk.

Esasen, ben parametreleri a ve b bulmak veri kümesini kullanmak istiyorum. Benim sorundur: Bunu nasıl yapabilirim? Ne kütüphane kullanmalıyım? Python kullanarak bir cevap istiyorum. Ama R veya Julia yanı Tamam olur.

Bugüne kadar yapmış her şeyi, ben bir işlevselliği denilen okudum eğri uyum scipy kütüphanesinden ama uzun benim x değişkeni entegrasyon limitinin birinde yer alır gibi kod yapacağını hangi oluşturan bazı sorun yaşıyorum .

problemin ile çalışmanın daha iyi yollar için, ben de şu kaynaklara sahip:

Bir numune seti ben arıyorum parametrelerini biliyor kendisi için. Bu set için bir 2 ve b = 1 (c = 3) = biliyoruz. Ben bu parametreleri biliyorum ilgili bazı soruları doğmadan Ve: Ben onları bulmak ve bir referansı olabilir nasıl araştırmak için örnek kullanmak sadece yukarıdaki denklemin entegrasyonundan bu parametreleri kullanarak bu örnek kümesini yarattı çünkü onlar biliyorum.

Ben de bu set var ben tek bilgi bu c = 4 olduğu ve a ve b bulmak istiyorum.

Ben işaret etmek istiyorum da şöyle:

i) şu anda ben yazma şey benim sorunu çözmek için nasıl bir ipucu yok çünkü burada yayınlamak için hiçbir kodu var. Ama düzenlemek için mutlu ve herhangi bir cevap veya size çocuklar beni sağlayabileceği yardımı okuduktan sonra soruyu günceller.

ii) Ben ve b bilmeyen bir çözüm için ilk arıyorum. Ama durumda çok zor olduğunu ben bu pek a veya b bilindiği varsayalım bazı çözüm görmek mutlu olurdu.

Oluştur 13/01/2020 saat 23:59
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Bu üç değişken, bağımsız değildir a, b, c,. Biz regresyon iki diğerleri sayesinde hesaplamak istiyorsanız Bunlardan biri verilmelidir. Verilen c ile bir için çözme b basittir:

Burada görüntü açıklama girin

Sayısal taşı örneği, aşağıda daha kolay kontrol yapmak amacıyla, küçük bir veri (n = 10) ile yapılır.

Burada görüntü açıklama girin

Not regresyon tam olarak veri dağılmış olduğunda y (x) için aynı değildir, wich fonksiyonu t (y) için olduğu (sonuç bir dağılım ise aynıdır).

y (x) için regresyonuna olması mutlaka gerekli ise, doğrusal olmayan bir regresyon gereklidir. Bu, a, b için iyi enought ilk tahmin başlayarak yinelemeli bir süreci içerir. Yukarıdaki taşı, çok iyi bir başlangıç ​​değerleri verir.

EK OLARAK :

Bu arada Andrea yerinde bir yanıt gönderdi. Yukarıda notta belirttiği gibi bu doğrusal olmayan regresyon yerine doğrusal olduğu için onun yöntemi ile ders montaj iyidir.

Bununla birlikte, farklı değerler dispite; göre, (a = 1.881 b = 1.617), (a = 2.346, b = -0,361) aşağıda çizilmiş ilgili eğriler diğer uzak biri değildir:

Mavi eğrisi: doğrusal bir regresyonundan (yöntem ile elde edilmiş)

Yeşil eğrisi: lineer olmayan regresyon ile ilgili (Andrea)

Burada görüntü açıklama girin

Cevap 14/01/2020 saat 15:25
kaynak kullanıcı

oy
0

Ben doğrudan integrali çözemezsiniz zaman bile kullanabilirsiniz saf sayısal yaklaşım, kullanırsınız. Burada sadece uydurma bir snipper var aparametre:

import numpy as np
from scipy.optimize import curve_fit
import pandas as pd
import matplotlib.pyplot as plt

def integrand(x, a):
    b = 1
    c = 3
    return 1/(a*np.sqrt(b*(1+x)**3 + c*(1+x)**4))

def integral(x, a):
    dx = 0.001
    xx = np.arange(0, x, dx)
    arr = integrand(xx, a)
    return np.trapz(arr, dx=dx, axis=-1)

vec_integral = np.vectorize(integral)

df = pd.read_csv('data-with-known-coef-a2-b1-c3.csv')
x = df.domin.values
y = df.resultados2.values
out_mean, out_var = curve_fit(vec_integral, x, y, p0=[2])

plt.plot(x, y)
plt.plot(x, vec_integral(x, out_mean[0]))
plt.title(f'a = {out_mean[0]:.3f} +- {np.sqrt(out_var[0][0]):.3f}')
plt.show()

vec_integral = np.vectorize(integral)

Burada görüntü açıklama girin

Tabii ki, değerini düşürebilir dxistenen hassasiyet elde etmek. Sadece uydurma için olsa asen köknar çalıştığınızda, byanı, fit (çünkü bence düzgün yakınsama etmez ave bgüçlü korelasyon vardır). Burada ne olsun:

def integrand(x, a, b):
    c = 3
    return 1/(a*np.sqrt(np.abs(b*(1+x)**3 + c*(1+x)**4)))

def integral(x, a, b):
    dx = 0.001
    xx = np.arange(0, x, dx)
    arr = integrand(xx, a, b)
    return np.trapz(arr, dx=dx, axis=-1)

vec_integral = np.vectorize(integral)

out_mean, out_var = sp.optimize.curve_fit(vec_integral, x, y, p0=[2,3])
plt.title(f'a = {out_mean[0]:.3f} +- {np.sqrt(out_var[0][0]):.3f}\nb = {out_mean[1]:.3f} +- {np.sqrt(out_var[1][1]):.3f}')

plt.plot(x, y, alpha=0.4)
plt.plot(x, vec_integral(x, out_mean[0], out_mean[1]), color='green', label='fitted solution')
plt.plot(x, vec_integral(x, 2, 1),'--', color='red', label='theoretical solution')
plt.legend()
plt.show()

Burada görüntü açıklama girin

Eğer, elde bile görebileceğiniz gibi ave bparametreler geçme oluşturmak "iyi değil" vardır, arsa çok benzer.

Cevap 14/01/2020 saat 16:24
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more