Algoritma untuk mengubah angka menjadi persentase secara logaritmik

Saya mencari cara untuk mengubah angka apa pun menjadi persentase dengan cara berikut:

  1. 1.00 is 50%

  2. angka di bawah 1,00 mendekati 0% secara logaritmik

  3. #P3#
    #P4#

Saya yakin ini mudah dilakukan, tetapi saya tidak ingat bagaimana cara melakukannya.


person Brent    schedule 28.11.2009    source sumber
comment
Dengan batas tak terbatas di kedua arah?   -  person Jed Smith    schedule 28.11.2009
comment
Ya - tak terbatas - atau setidaknya sangat besar. Namun perbedaan antara sangat besar dan tak terhingga dapat diabaikan.   -  person Brent    schedule 28.11.2009
comment
beberapa saran di sini: (a) terjemahkan persentase menjadi angka, mis. 50% = 0,5, 100% = 1,0 -- Anda selalu dapat kembali ke persentase dengan mengalikannya dengan 100. (b) seperti yang Stanislav tunjukkan, jika yang Anda maksud adalah asimtotik, bukan logaritma, harap edit pertanyaan Anda sesuai dengan itu. (c) Harap nyatakan rentang input untuk fungsi Anda dengan jelas. Apakah 0 hingga tak terhingga, atau - tak terhingga hingga + tak terhingga? Kami kesulitan memahami apa yang Anda inginkan.   -  person Jason S    schedule 28.11.2009


Jawaban (4)


coba 1 / (1 + e^(1-x))

itu adalah fungsi logistik yang digeser 1 unit

graph

Jika Anda ingin pendekatannya lebih cepat, Anda dapat mengubah e ke sesuatu yang lebih tinggi

Sunting:

untuk mendapatkan f(0) = 0 Anda dapat menggunakan 1 - 2^(-x)

graph

person cobbal    schedule 28.11.2009
comment
Ups -satu poin penting yang saya lewatkan: x › 0. Jadi y harus mendekati 0 karena x menjadi sangat kecil di sisi positifnya. - person Brent; 28.11.2009
comment
Nah, karena kami salah memahami Anda, bisakah Anda menggambar grafik tentang apa yang Anda inginkan dan menambahkannya ke pertanyaan? - person Jed Smith; 28.11.2009
comment
@cobbal: perangkat lunak apa yang Anda gunakan? grafik yang rapi! - person Jason S; 28.11.2009
comment
Grapher.app default yang disertakan dengan Mac OS X - person cobbal; 28.11.2009

Ketika Anda mengatakan secara logaritma, apakah yang Anda maksud adalah asimtotik? Jika demikian, maka "y harus mendekati 0 karena x menjadi sangat kecil di sisi positif" berarti f(0)=0 jika f kontinu. Dalam hal ini x/(x+1) akan berfungsi: http://www.wolframalpha.com/input/?i=x%2F%28x%2B1%29

person Stanislav    schedule 28.11.2009
comment
dengan asumsi perilaku yang diinginkan untuk y=f(x) adalah (a) f(0)=0, (b) f(1)=0.5, dan (c) lim x-›infinity f(x) = 1, saya mencalonkan jawaban ini sebagai jawaban sederhana terbaik. Saya mencoba memikirkan fungsi yang hanya melibatkan penambahan/pengurangan/kalikan/bagi yang akan berfungsi tetapi mengalami kram otak. - person Jason S; 28.11.2009

bagaimana dengan y = f(t) = 1 - exp(-t/tau) ?

Untuk t mendekati 0, y kira-kira t/tau. Untuk t mendekati tak terhingga, y mendekati 1 secara asimtotik.

Sedangkan untuk pendekatan f(1)=0.5, ini dapat digunakan untuk menyelesaikan tau = 1/log(2).

person Jason S    schedule 28.11.2009

Dari penjelasan Anda, saya mendengar grafik x pangkat tiga -- sangat mendasar, dan seharusnya efisien dalam sebagian besar bahasa.

http://jedsmith.org/static/S01813305.png

Ini digambarkan dengan y=(x-1)^3+1 (transformasikan menjadi (1,1) asal). Anda tentu saja dapat membuat hasilnya menjadi persentase hanya dengan menskalakannya sebesar 50.

Anda, pada akhirnya, mencoba untuk mendapatkan solusi efisien untuk memberi Anda persentase perilaku kasar dalam bahasa pemrograman dan bukan Mathematica, bukan?

person Jed Smith    schedule 28.11.2009
comment
Inilah yang saya cari. Terima kasih! - person Brent; 28.11.2009
comment
@Brent: ini tidak masuk akal. harap tulis ulang pertanyaan Anda untuk secara akurat mengatakan apa yang Anda inginkan. Grafik di atas mendekati 1 pada x=1. Anda menyebutkan dalam pertanyaan Anda bahwa Anda ingin y mendekati 1 ketika x mendekati tak terhingga, dan Anda ingin y = 0,5 ketika x = 1. - person Jason S; 28.11.2009
comment
Sebenarnya, kamu benar, aku berbicara terlalu cepat. Ini bukan yang saya cari, karena Y lebih besar dari 100 - person Brent; 28.11.2009
comment
@Jason: Tidak, dia bilang dia ingin persentase. Saya kasih kurvanya, terserah dia mau satuan apa. Rumus yang menghasilkan kurva itu cuma itu, rumus yang menghasilkan kurva. Dia harus menskalakan hasil, memindahkan titik asal, dll -- dan ini semua adalah transformasi aljabar. Masukan tidak harus sama persis dengan keluaran yang diinginkan dalam kasus ini -- dia memprogram (setidaknya saya mengumpulkannya dari algoritma), tidak menyerahkan bukti. Aku memulainya, itu saja. - person Jed Smith; 28.11.2009
comment
@Brent: Apa maksudmu y menjadi lebih besar dari 100? Saya telah memberi Anda kurva, terserah Anda untuk mengukur dan memanipulasi untuk mencapai hasil yang Anda inginkan. Anda belum menyatakan rentang atau batasan Anda dengan cara yang masuk akal, dan kami sedang mengerjakan data yang diberikan kepada kami. Skalakan ekspresi dan jangan mencoba menyalin dan menempelkannya tanpa mengerjakannya. Saya memberi Anda kurva, bukan solusi. - person Jed Smith; 28.11.2009
comment
@Jed: ini tidak masuk akal mengacu pada komentar Brent, bukan jawaban Anda. Tidak bermaksud mengkritik jawaban Anda. - person Jason S; 28.11.2009
comment
@Jason: Saya tidak menyangka begitu, hanya merasa frustrasi karena menurut saya OP tidak yakin dengan apa yang dia lakukan dan kita semua membuang-buang waktu. - person Jed Smith; 28.11.2009