Nesne

5.4: Logaritmik Fonksiyonlar


Öğrenme hedefleri

  • Logaritmik formdan üstel forma dönüştürün.
  • Üstelden logaritmik forma dönüştürün.
  • Logaritmaları değerlendirin.
  • Ortak logaritmalar kullanın.
  • Doğal logaritma kullanın.

2010 yılında, Haiti'de büyük bir deprem meydana geldi ve 285.000'den fazla ev yıkıldı veya hasar gördü. Bir yıl sonra, daha güçlü bir deprem Japonya'nın Honshu kentini harap etti ve 332.000'den fazla binayı yıktı veya hasar verdi.Şekil (PageIndex{1}) içinde gösterilenler gibi. Her ikisi de önemli hasara yol açsa da, 2011'deki deprem Haiti'deki depremden 100 kat daha güçlüydü. Nasıl bilebiliriz? Depremlerin büyüklükleri Richter Ölçeği olarak bilinen bir ölçekte ölçülür. Haiti depremi Richter Ölçeğine göre 7.0 olarak kaydedildiJaponya depremi ise 9.0 olarak kaydedildi.

Richter Ölçeği, on tabanlı logaritmik bir ölçektir. Diğer bir deyişle, (8) büyüklüğündeki bir deprem, (4) büyüklüğündeki bir depremin iki katı değildir. Bu

[10^{8−4}=10^4=10,000 umarasız]

kez harika! Bu derste, Richter Ölçeğinin doğasını ve bağlı olduğu on taban fonksiyonunu inceleyeceğiz.

Logaritmik Biçimden Üstel Biçime Dönüştürme

Depremlerin büyüklüğünü analiz etmek veya iki farklı depremin büyüklüklerini karşılaştırmak için logaritmik ve üstel biçim arasında dönüşüm yapabilmemiz gerekir. Örneğin, bir depremden salınan enerji miktarının diğerinden salınan enerji miktarından 500 kat daha fazla olduğunu varsayalım. Büyüklükteki farkı hesaplamak istiyoruz. Bu sorunu temsil eden denklem (10^x=500), burada (x) Richter Ölçeği'ndeki büyüklüklerdeki farkı temsil eder. (x) için nasıl çözeriz?

Henüz üstel denklemleri çözmek için bir yöntem öğrenmedik. Şimdiye kadar tartışılan cebirsel araçların hiçbiri (10^x=500) çözmek için yeterli değil. ({10}^2=100) ve ({10}^3=1000) olduğunu biliyoruz, bu nedenle (x)'nin 2 ile 3 arasında bir değer olması gerektiği açıktır, çünkü (y ={10}^x) artıyor. Çözümü daha iyi tahmin etmek için Şekil (PageIndex{1})'deki gibi bir grafiği inceleyebiliriz.

Bununla birlikte, bir grafikten tahmin yapmak kesin değildir. Cebirsel bir çözüm bulmak için yeni bir fonksiyon tanıtmalıyız. Şekil (PageIndex{2})'deki grafiğin yatay çizgi testini geçtiğini gözlemleyin. Üstel fonksiyon (y=b^x) bire birdir, dolayısıyla onun tersi (x=b^y) da bir fonksiyondur. Tüm ters fonksiyonlarda olduğu gibi, sadece (x) ve (y) yerlerini değiştiririz ve ters fonksiyonu bulmak için (y) için çözeriz. (y)'yi (x)'nin bir fonksiyonu olarak temsil etmek için, (y={log}_b(x)) biçiminde bir logaritmik fonksiyon kullanırız. taban (b) logaritma bir sayının, o sayıyı elde etmek için (b)'yi yükseltmemiz gereken üssüdür.

Logaritmik bir ifadeyi "(b) tabanı (x) olan logaritma (y)'ye eşittir" veya basitleştirilmiş, "log tabanı (b) of (x)" şeklinde okuruz. ) (y)'dir.” Günlükler üsler olduğundan, “(b) (y)'nin kuvvetine yükseltildi (x),” de diyebiliriz. Örneğin, (32)'nin (2) logaritması (5)'dir, çünkü (5), (32)'yi elde etmek için (2)'ye uygulamamız gereken üsdür. (2^5=32) olduğundan ({log}_232=5) yazabiliriz. Bunu “(32)'nin günlük tabanı (2) (5)” şeklinde okuyoruz.

Logaritmik form ile buna karşılık gelen üstel form arasındaki ilişkiyi şu şekilde ifade edebiliriz:

[egin{align} log_b(x)=yLeftrightarrow b^y=x, b> 0, b eq 1 end{align}]

(b) tabanının her zaman pozitif olduğuna dikkat edin.

Logaritma bir fonksiyon olduğu için, en doğru şekilde (log_b(x)), fonksiyon değerlendirmesini belirtmek için parantezler kullanılarak, tıpkı (f(x) ile yaptığımız gibi) şeklinde yazılır. Bununla birlikte, giriş tek bir değişken veya sayı olduğunda, parantezlerin atıldığı ve ifadenin parantezsiz yazıldığı, (log_bx) olarak görülmesi yaygındır. Birçok hesap makinesinin (x) etrafında parantez gerektirdiğini unutmayın.

Logaritmaların gösterimini aşağıdaki gibi gösterebiliriz:

Logaritma işlevi ile üstel işlevi karşılaştırırken, giriş ve çıkışın değiştirildiğine dikkat edin. Bunun anlamı (y=log_b(x)) ve (y=b^x) ters fonksiyonlardır.

LOGARİTMİK FONKSİYONUN TANIMI

Bir pozitif sayının (x) (b) logaritma tabanı aşağıdaki tanımı karşılar.

(x>0), (b>0), (b≠1 için),

[egin{align} y={log}_b(x) ext{ eşittir } b^y=x end{align}]

nerede,

  • ({log}_b(x))'i "(x)'in (b) tabanına sahip logaritma" veya (x)'in "log tabanı (b)" olarak okuruz. "
  • logaritma (y), (x) elde etmek için (b)'nin yükseltilmesi gereken üsdür.

Ayrıca, logaritmik ve üstel fonksiyonlar (x) ve (y) değerlerini değiştirdiğinden, üstel fonksiyonun etki alanı ve aralığı logaritmik fonksiyon için değiştirilir. Bu nedenle,

  • tabanı (b) olan logaritma fonksiyonunun etki alanı ((0,infty)).
  • tabanı (b) olan logaritma fonksiyonunun aralığı ((-infty,infty)).

Soru-Cevap: Negatif bir sayının logaritmasını alabilir miyiz?

Hayır. Üstel bir fonksiyonun tabanı her zaman pozitif olduğundan, o tabanın hiçbir kuvveti asla negatif olamaz. Negatif bir sayının logaritmasını asla alamayız. Ayrıca sıfırın logaritmasını alamayız. Hesap makineleri, karmaşık moddayken negatif bir sayının günlük çıktısını verebilir, ancak negatif bir sayının günlüğü gerçek bir sayı değildir.

Nasıl yapılır: Logaritmik formda bir denklem verildiğinde ({log}_b(x)=y), onu üstel forma dönüştürme

  1. (y={log}_bx) denklemini inceleyin ve (b), (y)ve (x)'i belirleyin.
  2. ({log}_bx=y) öğesini (b^y=x) olarak yeniden yazın.

Örnek (PageIndex{1}): Logaritmik Formdan Üstel Forma Dönüştürme​​

Aşağıdaki logaritmik denklemleri üstel biçimde yazınız.

  1. ({log}_6(sqrt{6})=dfrac{1}{2})
  2. ({log}_3(9)=2)

Çözüm

İlk olarak, (b), (y) ve (x) değerlerini tanımlayın. Ardından denklemi (b^y=x) biçiminde yazın.

  1. ({log}_6(sqrt{6})=dfrac{1}{2})

    Burada, (b=6), (y=dfrac{1}{2})ve (x=sqrt{6}). Bu nedenle, ({log}_6(sqrt{6})=dfrac{1}{2}) denklemi şuna eşdeğerdir:

    (6^{ frac{1}{2}}=sqrt{6})

  2. ({log}_3(9)=2)

    Burada, (b=3), (y=2)ve (x=9). Bu nedenle, ({log}_3(9)=2) denklemi şuna eşdeğerdir:

(3^2=9)

Alıştırma (PageIndex{1})

Aşağıdaki logaritmik denklemleri üstel biçimde yazınız.

  1. ({log}_{10}(1,000,000)=6)
  2. ({log}_5(25)=2)
cevap ver

({log}_{10}(1,000,000)=6), ({10}^6=1,000,000) ile eşdeğerdir

Cevap b

({log}_5(25)=2), (5^2=25) ile eşdeğerdir

Üstelden Logaritmik Forma Dönüştürme

Üslerden logaritmalara dönüştürmek için aynı adımları tersten izliyoruz. Tabanı (b), (x) üssünü ve (y) çıktısını tanımlarız. Sonra (x={log}_b(y)) yazarız.

Örnek (PageIndex{2}): Üstel Formdan Logaritmik Forma Dönüştürme

Aşağıdaki üstel denklemleri logaritmik biçimde yazın.

  1. (2^3=8)
  2. (5^2=25)
  3. ({10}^{−4}=dfrac{1}{10.000})

Çözüm

İlk olarak, (b), (y) ve (x) değerlerini tanımlayın. Ardından denklemi (x={log}_b(y)) biçiminde yazın.

  1. (2^3=8)

    Burada, (b=2), (x=3)ve (y=8). Bu nedenle, (2^3=8) denklemi ({log}_2(8)=3) ile eşdeğerdir.

  2. (5^2=25)

    Burada, (b=5), (x=2)ve (y=25). Bu nedenle, (5^2=25) denklemi ({log}_5(25)=2) ile eşdeğerdir.

  3. ({10}^{−4}=dfrac{1}{10.000})

    Burada, (b=10), (x=−4)ve (y=dfrac{1}{10.000}). Bu nedenle, ({10}^{−4}=dfrac{1}{10.000}) denklemi, ({log}_{10} left (dfrac{1}{10.000}) ile eşdeğerdir sağ )=-4).

Alıştırma (PageIndex{2})

Aşağıdaki üstel denklemleri logaritmik biçimde yazın.

  1. (3^2=9)
  2. (5^3=125)
  3. (2^{−1}=dfrac{1}{2})
cevap ver

(3^2=9), ({log}_3(9)=2) ile eşdeğerdir

Cevap b

(5^3=125), ({log}_5(125)=3) ile eşdeğerdir

cevap c

(2^{−1}=dfrac{1}{2}), ({log}_2 left (dfrac{1}{2} ight )=−1) ile eşdeğerdir

Logaritmaların Değerlendirilmesi

Sayıların karelerini, küplerini ve köklerini bilmek, birçok logaritmayı zihinsel olarak değerlendirmemizi sağlar. Örneğin, ({log}_28) düşünün. "8'i elde etmek için (2) hangi üsse yükseltilmelidir?" diye soruyoruz. (2^3=8) zaten bildiğimiz için, bunu ({log}_28=3) takip eder.

Şimdi ({log}_749) ve ({log}_327)'yi zihinsel olarak çözmeyi düşünün.

  • "(49) almak için (7) hangi üsse yükseltilmelidir?" diye soruyoruz. (7^2=49) biliyoruz. Bu nedenle, ({log}_749=2)
  • "(27)'yi elde etmek için (3) hangi üsse yükseltilmelidir?" diye soruyoruz. (3^3=27) biliyoruz. Bu nedenle, (log_{3}27=3)

Daha karmaşık görünen bazı logaritmalar bile hesap makinesi olmadan değerlendirilebilir. Örneğin, (log_{ce{2/3}} frac{4}{9}) öğesini zihinsel olarak değerlendirelim.

  • "(ce{4/9}) almak için (ce{2/3}) hangi üsse yükseltilmelidir? ” (2^2=4) ve (3^2=9) biliyoruz, bu nedenle [{left(dfrac{2}{3} ight )}^2=dfrac{4} {9}. onumber] Bu nedenle, [{log}_{ce{2/3}} left (dfrac{4}{9} ight )=2. umara yok]

Nasıl yapılır: (y={log}_b(x) formunun bir logaritması verildiğinde, onu zihinsel olarak değerlendirin)

  1. (x) argümanını (b): (b^y=x)'in bir kuvveti olarak yeniden yazın.
  2. "(x)'i elde etmek için (b) hangi üsse yükseltilmelidir?"

Örnek (PageIndex{3}): Logaritmaları Zihinsel Olarak Çözme

(y={log}_4(64)) öğesini hesap makinesi kullanmadan çözün.

Çözüm

İlk önce logaritmayı üstel biçimde yeniden yazıyoruz: (4^y=64). Daha sonra, "(64) almak için (4) hangi üsse yükseltilmelidir?" diye soruyoruz.

Biliyoruz

(4^3=64)

Bu nedenle,

({log}_4(64)=3)

Alıştırma (PageIndex{3})

(y={log}_{121}(11))'i hesap makinesi kullanmadan çözün.

Cevap

({log}_{121}(11)=dfrac{1}{2}) ((sqrt{121}={(121)}^{ frac{1}{2}'ı hatırlayarak) }=11))

Örnek (PageIndex{4}): Bir Karşılıklının Logaritmasını Değerlendirmek

Hesap makinesi kullanmadan (y={log}_3 left (dfrac{1}{27} ight )) değerini değerlendirin.

Çözüm

İlk önce logaritmayı üstel biçimde yeniden yazıyoruz: (3^y=dfrac{1}{27}). Sonra, "(dfrac{1}{27}) almak için (3) hangi üsse yükseltilmelidir?" diye soruyoruz.

(3^3=27)'yi biliyoruz, ancak karşılıklı (dfrac{1}{27}) almak için ne yapmalıyız? (b^{−a}=dfrac{1}{b^a}) olan üslerle çalışırken hatırlayın. Bu bilgiyi yazmak için kullanıyoruz

[egin{align*} 3^{-3}&= dfrac{1}{3^3} &= dfrac{1}{27} end{align*}]

Bu nedenle, ({log}_3 left (dfrac{1}{27} ight )=−3).

Alıştırma (PageIndex{4})

Hesap makinesi kullanmadan (y={log}_2 left (dfrac{1}{32} ight )) değerini değerlendirin.

Cevap

({log}_2 sol (dfrac{1}{32} sağ )=−5)

Ortak Logaritmaları Kullanma

Bazen tabanı olmadan yazılmış bir logaritma görebiliriz. Bu durumda, tabanın (10) olduğunu varsayıyoruz. Başka bir deyişle, (log(x)) ifadesi ({log}_{10}(x)) anlamına gelir. Bir tabana (-10) logaritma diyoruz ortak logaritma. Bölümün başında bahsedilen Richter Ölçeği'ni ölçmek için ortak logaritmalar kullanılır. Yıldızların parlaklığını ve asitlerin ve bazların pH'ını ölçmek için kullanılan ölçekler de ortak logaritmalar kullanır.

ORTAK LOGARİTMA TANIMI

Yaygın bir logaritma, tabanı (10) olan bir logaritmadır. ({log}_{10}(x))'ı basitçe (log(x)) olarak yazarız. Bir pozitif sayının (x) ortak logaritması aşağıdaki tanımı karşılar.

(x>0 için),

[egin{align} y={log}(x) ext{ eşittir } {10}^y=x end{align}]

(log(x))'u "(x)'in (10) tabanlı logaritması" veya "(x)'in günlük tabanı (10)" olarak okuruz.

(y) logaritması, (x) elde etmek için (10)'un yükseltilmesi gereken üsteldir.

Nasıl yapılır: (y=log(x) formunun ortak bir logaritması verildiğinde, onu zihinsel olarak değerlendirin)

  1. (x) argümanını (10): ({10}^y=x)'in bir kuvveti olarak yeniden yazın.
  2. "(x)'i elde etmek için (10) hangi üsse yükseltilmelidir?"

Örnek (PageIndex{5}): Ortak Bir Logaritmanın Değerini Zihinsel Olarak Bulma

Hesap makinesi kullanmadan (y=log(1000)) değerini değerlendirin.

Çözüm

Önce logaritmayı üstel biçimde yeniden yazıyoruz: ({10}^y=1000). Daha sonra, "(1000) almak için (10) hangi üsse yükseltilmelidir?" diye soruyoruz. Biliyoruz

({10}^3=1000)

Bu nedenle, (log(1000)=3).

Alıştırma (PageIndex{5})

Değerlendir (y=log(1,000,000)).

Cevap

(log(1,000,000)=6)

Nasıl yapılır: (y=log(x) biçiminde ortak bir logaritma verildiğinde, bunu bir hesap makinesi kullanarak değerlendirin)

  1. Basın [Günlük].
  2. (x) için verilen değeri girin ve ardından [ ) ].
  3. Basın [GİRİŞ].

Örnek (PageIndex{6}): ​​​Bir Hesap Makinesi Kullanarak Ortak Bir Logaritmanın Değerini Bulma

Bir hesap makinesi kullanarak (y=log(321)) değerini dört ondalık basamakla değerlendirin.

Çözüm

  • Basın [Günlük].
  • 321 girin, bunu takiben [ ) ].
  • Basın [GİRİŞ].

Dört ondalık basamağa yuvarlama, (log(321)≈2.5065).

analiz

({10}^2=100) ve ({10}^3=1000) olduğuna dikkat edin. (321) (100) ile (1000) arasında olduğundan, (log(321)) öğesinin (log(100)) ile (log() arasında olması gerektiğini biliyoruz. 1000)). Bu bize şunları verir:

(100<321<1000)

(2<2.5065<3)

Alıştırma (PageIndex{6})

Bir hesap makinesi kullanarak (y=log(123)) değerini dört ondalık basamakla değerlendirin.

Cevap

(log(123)≈2.0899)

Örnek (PageIndex{7}): Gerçek Dünya Üstel Modelini Yeniden Yazma ve Çözme

Bir depremden salınan enerji miktarı, diğerinden salınan enerji miktarından (500) kat daha fazlaydı. ({10}^x=500) denklemi bu durumu temsil eder, burada (x) Richter Ölçeği'ndeki büyüklüklerdeki farktır. En yakın binde biri için, büyüklüklerdeki fark neydi?

Çözüm

Üstel denklemi logaritmik biçimde yeniden yazarak başlıyoruz.

({10}^x=500)

(log(500)=x) Ortak günlüğün tanımını kullanın.

Sonra bir hesap makinesi kullanarak logaritmayı değerlendiririz:

  • Basın [Günlük].
  • (500) girin, ardından [ ) ].
  • Basın [GİRİŞ].
  • En yakın binde biri için, (log(500)≈2.699).

Büyüklüklerdeki fark yaklaşık (2.699) idi.

Alıştırma (PageIndex{7})

​Bir depremden salınan enerji miktarı, diğerinden salınan enerji miktarından (8500) kat daha fazlaydı. ({10}^x=8500) denklemi bu durumu temsil eder, burada (x) Richter Ölçeği'ndeki büyüklüklerdeki farktır. En yakın binde biri için, büyüklüklerdeki fark neydi?

Cevap

Büyüklüklerdeki fark yaklaşık (3.929) idi.

Doğal Logaritmaları Kullanma

Logaritmalar için en sık kullanılan taban (e)'dir. Temel (e) logaritmaları, kalkülüste ve bazı bilimsel uygulamalarda önemlidir; arandılar doğal logaritmalar. (e) logaritması, ({log}_e(x)), kendi notasyonuna sahiptir,(ln(x)). (ln(x))'nin çoğu değeri yalnızca bir hesap makinesi kullanılarak bulunabilir. En büyük istisna, (1)'in logaritmasının herhangi bir tabanda her zaman (0) olması nedeniyle, (ln1=0) olmasıdır. Diğer doğal logaritmalar için, çoğu bilimsel hesap makinesinde bulunabilen (ln) anahtarını kullanabiliriz. Logaritmaların ters özelliğini kullanarak (e)'nin herhangi bir gücünün doğal logaritmasını da bulabiliriz.

DOĞAL LOGARİTMA TANIMI

Doğal bir logaritma, tabanı (e) olan bir logaritmadır. ({log}_e(x))'yi basitçe (ln(x)) olarak yazarız. Bir pozitif sayının (x) doğal logaritması aşağıdaki tanımı karşılar.

(x>0 için),

(y=ln(x)), (e^y=x) ile eşdeğerdir

(ln(x))'i "(x)'in (e) tabanlı logaritması" veya "(x)'in doğal logaritması" olarak okuruz.

(y) logaritması, (x) almak için (e)'nin yükseltilmesi gereken üsdür.

(y=e^x) ve (y=ln(x)) fonksiyonları ters fonksiyonlar olduğundan, (ln(e^x)=x) için tüm (x) ve (e^{ln (x)}=x) için (x>0).

Nasıl yapılır: (y=ln(x) şeklinde bir doğal logaritma verildiğinde, bir hesap makinesi kullanarak değerlendirin)

  1. Basın [LN].
  2. (x) için verilen değeri girin ve ardından [ ) ].
  3. Basın [GİRİŞ].

Örnek (PageIndex{8}): Bir Hesap Makinesi Kullanarak Doğal Logaritmayı Değerlendirmek

Bir hesap makinesi kullanarak (y=ln(500)) değerini dört ondalık basamağa kadar değerlendirin.

Çözüm

  • Basın [LN].
  • (500) girin, ardından [ ) ].
  • Basın [GİRİŞ].

Dört ondalık basamağa yuvarlama, (ln(500)≈6.2146)

Alıştırma (PageIndex{8})

Değerlendir (ln(−500)).

Cevap

Gerçek sayılar kümesinde negatif bir sayının logaritmasını almak mümkün değildir.

medya

Logaritmalarla ilgili ek talimat ve alıştırma için bu çevrimiçi kaynağa erişin.

  • Logaritmalara Giriş

Anahtar Denklemler

Logaritmik fonksiyonun tanımı(x>0), (b>0), (b≠1), (y={log}_b(x)) için ve ancak ve ancak (b^y=x ise ).
Ortak logaritmanın tanımı(x>0), (y=log(x)) için ancak ve ancak ({10}^y=x) ise.
Doğal logaritmanın tanımı(x>0), (y=ln(x)) için ancak ve ancak (e^y=x) ise.

Anahtar kavramlar

  • Üstel bir işlevin tersi logaritmik bir işlevdir ve logaritmik bir işlevin tersi üstel bir işlevdir.
  • Logaritmik denklemler, logaritma tanımını kullanarak eşdeğer bir üstel biçimde yazılabilir. Bkz. Örnek (PageIndex{1}).
  • Üstel denklemler, logaritma tanımı kullanılarak eşdeğer logaritmik formlarında yazılabilir Bkz. Örnek (PageIndex{2}).
  • (b) tabanına sahip logaritmik fonksiyonlar, (b) kuvvetlerinin önceki bilgileri kullanılarak zihinsel olarak değerlendirilebilir. Örnek (PageIndex{3}) ve Örnek (PageIndex{4}) konusuna bakın.
  • Ortak logaritmalar, önceki (10) kuvvetleri bilgisi kullanılarak zihinsel olarak değerlendirilebilir. Bkz. Örnek (PageIndex{5}).
  • Ortak logaritmalar zihinsel olarak değerlendirilemediğinde bir hesap makinesi kullanılabilir. Bkz. Örnek (PageIndex{6}).
  • Temel (10) ile gerçek dünya üstel problemleri ortak bir logaritma olarak yeniden yazılabilir ve daha sonra bir hesap makinesi kullanılarak değerlendirilebilir. Bkz. Örnek (PageIndex{7}).
  • Doğal logaritmalar bir hesap makinesi kullanılarak değerlendirilebilir Örnek (PageIndex{8}).

Logaritmik Fonksiyonların Grafiklenmesi [5.4] 2. Verilen f(x) = 4(2)*. bir. f'(x) öğesini bulun. Not: İşleviniz tek bir logaritma olmalıdır, bu nedenle gerekirse temel formül değişikliğini kullanın.

help_outline

Görüntü Transkripsiyonukapat

Logaritmik Fonksiyonların Grafiklenmesi [5.4] 2. Verilen f(x) = 4(2)*. bir. f'(x) öğesini bulun. Not: İşleviniz tek bir logaritma olmalıdır, bu nedenle gerekirse temel formül değişikliğini kullanın.


Lua, dinamik olarak yazılan bir dildir. Bu, değişkenlerin türlere sahip olmadığı, yalnızca değerlerin sahip olduğu anlamına gelir. Dilde tür tanımları yoktur. Tüm değerler kendi türlerini taşır.

Lua'daki tüm değerler birinci sınıf değerlerdir. Bu, tüm değerlerin değişkenlerde saklanabileceği, diğer işlevlere argüman olarak iletileceği ve sonuç olarak döndürülebileceği anlamına gelir.

Lua'da sekiz temel tür vardır: sıfır, boole, numara, dize, fonksiyon, Kullanıcı bilgisi, Konu, ve masa. tip sıfır tek bir değeri vardır, sıfırAna özelliği diğer herhangi bir değerden farklı olmak olan , genellikle yararlı bir değerin yokluğunu temsil eder. tip boole iki değeri vardır, yanlış ve doğru. Her ikisi de sıfır ve yanlış bir koşulu yanlış yap, topluca denir yanlış değerler. Başka herhangi bir değer, bir koşulu doğru yapar. Adına rağmen, yanlış alternatif olarak sıklıkla kullanılmaktadır. sıfır, önemli farkla yanlış tablodaki normal bir değer gibi davranırken, sıfır bir tabloda eksik bir anahtarı temsil eder.

tip numara iki alt tür kullanarak hem tam sayıları hem de gerçek (kayan noktalı) sayıları temsil eder: tam sayı ve yüzer. Standart Lua, 64 bit tamsayılar ve çift duyarlıklı (64 bit) kayan noktalar kullanır, ancak Lua'yı 32 bit tam sayılar ve/veya tek duyarlıklı (32 bit) kayan noktalar kullanacak şekilde derleyebilirsiniz. Hem tamsayılar hem de kayan sayılar için 32 bit seçeneği özellikle küçük makineler ve gömülü sistemler için çekicidir. (luaconf.h dosyasındaki LUA_32BITS makrosuna bakın.)

Aksi belirtilmedikçe, tamsayı değerleri işlenirken herhangi bir taşma etrafına sarmak, iki tamamlayıcı aritmetiğin olağan kurallarına göre. (Başka bir deyişle, gerçek sonuç, moduloya eşit olan benzersiz temsil edilebilir tam sayıdır. 2 n matematiksel sonuca, nerede n tamsayı türünün bit sayısıdır.)

Lua'nın her bir alt türün ne zaman kullanılacağına ilişkin açık kuralları vardır, ancak gerektiğinde bunlar arasında otomatik olarak dönüştürme yapar (bkz. &bölüm3.4.3). Bu nedenle, programcı tamsayılar ve kayan noktalar arasındaki farkı çoğunlukla görmezden gelmeyi veya her bir sayının temsili üzerinde tam kontrol sahibi olmayı seçebilir.

tip dize değişmez bayt dizilerini temsil eder. Lua 8 bitlik temizdir: dizeler, gömülü sıfırlar (' ') dahil olmak üzere herhangi bir 8 bitlik değeri içerebilir. Lua ayrıca kodlamadan bağımsızdır, bir dizgenin içeriği hakkında hiçbir varsayımda bulunmaz. Lua'daki herhangi bir dizenin uzunluğu bir Lua tamsayısına sığmalıdır.

Lua, Lua ile yazılmış fonksiyonları ve C ile yazılmış fonksiyonları çağırabilir (ve değiştirebilir) (bakınız &bölüm3.4.10). Her ikisi de tür tarafından temsil edilir fonksiyon.

tip Kullanıcı bilgisi keyfi C verilerinin Lua değişkenlerinde depolanmasına izin vermek için sağlanmıştır. Bir kullanıcı verisi değeri, bir ham bellek bloğunu temsil eder. İki tür kullanıcı verisi vardır: tam kullanıcı verileriLua tarafından yönetilen bir bellek bloğuna sahip bir nesne olan ve hafif kullanıcı verileri, bu sadece bir C işaretçi değeridir. Kullanıcı verilerinin Lua'da atama ve kimlik testi dışında önceden tanımlanmış işlemleri yoktur. Kullanarak metatablolar, programcı tam kullanıcı verisi değerleri için işlemleri tanımlayabilir (bakınız &bölüm2.4). Kullanıcı verileri değerleri, yalnızca C API aracılığıyla Lua'da oluşturulamaz veya değiştirilemez. Bu, ana bilgisayar programının ve C kitaplıklarının sahip olduğu verilerin bütünlüğünü garanti eder.

tip Konu bağımsız yürütme dizilerini temsil eder ve eşyordamları uygulamak için kullanılır (bkz. &bölüm2.6). Lua dizileri, işletim sistemi dizileriyle ilgili değildir. Lua, tüm sistemlerde eşyordamları destekler, hatta iş parçacıklarını yerel olarak desteklemeyenler bile.

tip masa ilişkisel dizileri, yani yalnızca sayıları değil, aynı zamanda herhangi bir Lua değerini de indeks olarak alabilen dizileri uygular. sıfır ve NaN. (Sayı değil 0/0 gibi tanımsız sayısal sonuçları temsil etmek için IEEE 754 standardı tarafından kullanılan özel bir kayan nokta değeridir.) Tablolar heterojen yani, her türden değeri içerebilirler (hariç sıfır). Değerle ilişkili herhangi bir anahtar sıfır tablonun bir parçası olarak kabul edilmez. Tersine, bir tablonun parçası olmayan herhangi bir anahtarın ilişkili bir değeri vardır. sıfır.

Tablolar, Lua'da sıradan dizileri, listeleri, sembol tablolarını, kümeleri, kayıtları, grafikleri, ağaçları vb. temsil etmek için kullanılabilen tek veri yapılandırma mekanizmasıdır. Lua, kayıtları temsil etmek için alan adını bir dizin olarak kullanır. Dil, a["name"] için sözdizimsel şeker olarak a.name sağlayarak bu gösterimi destekler. Lua'da tablo oluşturmanın birkaç uygun yolu vardır (bkz. &bölüm3.4.9).

İndeksler gibi, tablo alanlarının değerleri de herhangi bir tipte olabilir. Özellikle, işlevler birinci sınıf değerler olduğundan, tablo alanları işlevler içerebilir. Böylece tablolar da taşıyabilir yöntemler (bkz. &bölüm3.4.11).

Tabloların indekslenmesi, dildeki ham eşitlik tanımını takip eder. a[i] ve a[j] ifadeleri, ancak ve ancak i ve j ham eşitse (yani, metametotlar olmadan eşitse) aynı tablo öğesini belirtir. Özellikle, integral değerleri olan kayan noktalar, ilgili tam sayılarına eşittir (örneğin, 1.0 == 1 ). Belirsizlikleri önlemek için, bir tamsayıya eşit bir anahtar olarak kullanılan herhangi bir kayan nokta, o tam sayıya dönüştürülür. Örneğin, a[2.0] = true yazarsanız, tabloya eklenen gerçek anahtar 2 tamsayı olacaktır.

Tablolar, işlevler, iş parçacıkları ve (tam) kullanıcı verileri değerleri nesneler: değişkenler aslında içermek bu değerler sadece Referanslar onlara. Atama, parametre geçişi ve işlev dönüşleri, her zaman bu tür değerlere yapılan başvuruları değiştirir, bu işlemler herhangi bir tür kopyalama anlamına gelmez.

Kitaplık işlev türü, belirli bir değerin türünü açıklayan bir dize döndürür (bkz. type ).


Swift 5.4'teki yenilikler neler?

Birden çok değişken parametre, geliştirilmiş örtük üye sözdizimi, sonuç oluşturucular ve daha fazlası!

Swift 5.4, hatalı ifadelerde daha iyi kod tamamlama ve artımlı derleme için büyük hızlanmalar dahil olmak üzere bazı büyük derleme iyileştirmeleri getiriyor. Ancak, aynı zamanda bazı önemli yeni özellikler ve iyileştirmeler de ekliyor, o yüzden onları burada inceleyelim…

SPONSORLUK SwiftUI için yapılmış bir tasarım aracı. Yerleşik SwiftUI tasarım şablonlarıyla bir sonraki tasarım güncellemenize hemen başlayın. Eksiksiz bir geliştirme ortamı kurma ihtiyacını atlayarak zamandan tasarruf edin. 5 dosyaya kadar ücretsiz tasarım yapın veya bir yıl boyunca sınırsız dosya ve daha fazlasını 29,99 $ karşılığında alın.

Geliştirilmiş örtülü üye sözdizimi

SE-0287, Swift'in örtük üye ifadeleri kullanma yeteneğini geliştirir, böylece sadece tek bir statik üyeyi desteklemek yerine, onlardan zincirler oluşturabilirsiniz.

Swift, basit ifadeler için her zaman örtülü üye sözdizimini kullanma yeteneğine sahipti, örneğin SwiftUI'de bazı metinleri renklendirmek istiyorsanız Color.red yerine .red kullanabilirsiniz:

Swift 5.4'ten önce bu, daha karmaşık ifadelerle çalışmıyordu. Örneğin, kırmızı renginizin biraz şeffaf olmasını istiyorsanız şunu yazmanız gerekir:

Swift 5.4'ten itibaren derleyici birden çok zincirleme üyeyi anlayabilir, bu da Renk türünün çıkarılabileceği anlamına gelir:

Fonksiyonlarda çoklu değişken parametreler

SE-0284, bir değişken parametreyi takip eden tüm parametrelerin etiketleri olduğu sürece, işlevlere, alt simgelere ve başlatıcılara birden çok değişken parametre kullanma yeteneği kazandırdı. Swift 5.4'ten önce, bu durumda yalnızca bir değişken parametreniz olabilir.

Dolayısıyla, bu iyileştirme ile, bir futbol maçı sırasında gollerin atıldığı zamanları saklayan değişken bir parametreyi ve ayrıca gol atan oyuncuların isimlerini puanlayan ikinci bir değişken parametreyi kabul eden bir fonksiyon yazabiliriz:

Bu işlevi çağırmak için, ilk değişkenden sonraki tüm parametrelerin etiketlendiğinden emin olarak, her iki değer kümesini de değişken parametreler olarak sağlayın:

Aynı ada sahip bir işlevi çağıran değişkenler oluşturma

Swift 5.4'ten itibaren, aynı ada sahip bir işlevi çağırarak yerel bir değişken oluşturmak mümkündür. Bu kulağa belirsiz gelebilir, ama aslında her zaman karşılaştığımız bir sorun.

Örneğin bu, color(forRow:) yöntemiyle çağrılan ve color adlı yerel bir değişkene atanan bir yapı oluşturur:

Bu tür kullanıma yalnızca Swift 5.4 ve sonraki sürümlerde izin verilir. Swift'in önceki sürümlerinde, yerel renk sabiti ile çağırdığı color(forRow:) yöntemini ayırt edemediği için dairesel bir referans oluştururdu - “Değişken kendi başlangıç ​​değerinde kullanıldı” hatasını görürdünüz. .

Bu genellikle, yöntem çağrısını kastettiğimizi açıklığa kavuşturmak için self.color(forRow: 1989) kullanmamızla veya yerel değeri colorForRow gibi başka bir şeyle adlandırmamızla sonuçlandı.

Neyse ki Swift 5.4 bunu çözüyor ve daha doğal adlandırma kullanmamıza izin veriyor.

Bu değişiklik aynı zamanda özelliklerin ve global değişkenlerin yerel kopyalarını yapmamızı sağlar. Örneğin, kullanıcı adı olarak da adlandırılan bir kullanıcı adı özelliğinin bir kopyasını aşağıdaki gibi alabiliriz:

Bu aynı zamanda global değişkenler için de geçerli olduğundan, aynı kod, yapı yerinde olmasa bile gayet iyi çalışır:

Sonuç oluşturucular

İşlev oluşturucular resmi olmayan bir şekilde Swift 5.1'e geldiler, ancak Swift 5.4'e kadar olan süreçte tartışılmak ve rafine edilmek için Swift Evolution teklif sürecinden resmi olarak SE-0289 olarak geçtiler. Bu sürecin bir parçası olarak, asıl amaçlarını daha iyi yansıtmak için sonuç oluşturucular olarak yeniden adlandırıldılar ve hatta bazı yeni işlevler kazandılar.

İlk olarak, en önemli kısım: sonuç oluşturucular, bizim seçtiğimiz bir diziden geçerek adım adım yeni bir değer yaratmamıza izin veriyor. SwiftUI'nin görünüm oluşturma sisteminin büyük bölümlerine güç sağlarlar, böylece içinde çeşitli görünümlere sahip bir VStack'imiz olduğunda, Swift bunları VStack'in tek bir çocuğu olarak depolanabilmeleri için sessizce dahili bir TupleView türünde gruplandırır. tek bir görünümde bir dizi görünüm.

Sonuç oluşturucular kendi ayrıntılı makalelerini hak ediyor, ancak en azından bunları çalışırken görebilmeniz için size bazı küçük kod örnekleri vermek istiyorum.

İşte tek bir dize döndüren bir işlev:

Bu harika çalışıyor, ama ya bir araya getirmek istediğimiz birkaç dizi olsaydı? Tıpkı SwiftUI gibi, hepsini ayrı ayrı sağlamak ve Swift'in çözmesini isteyebiliriz:

Bu kod kendi başına çalışmaz çünkü Swift artık ne demek istediğimizi anlamıyor. Bununla birlikte, istediğimiz herhangi bir dönüşümü kullanarak birkaç dizgiyi tek bir dizgeye nasıl dönüştüreceğimizi anlayan bir sonuç oluşturucu oluşturabiliriz, bunun gibi:

Bu az miktarda kod olsa da, paketten çıkarılması gereken çok şey var:

  • @resultBuilder niteliği, Swift'e aşağıdaki türün bir sonuç oluşturucu olarak ele alınması gerektiğini söyler. Daha önce bu davranış, bunun genel kullanım için tasarlanmadığını gösteren bir alt çizgiye sahip olan @_functionBuilder kullanılarak gerçekleştiriliyordu.
  • Her sonuç oluşturucu, bir tür veriyi alıp dönüştürmesi gereken buildBlock() adlı en az bir statik yöntem sağlamalıdır. Yukarıdaki örnek, sıfır veya daha fazla dize alır, bunları birleştirir ve tek bir dize olarak geri gönderir.
  • Sonuç, SimpleStringBuilder yapımızın bir sonuç oluşturucu haline gelmesidir, yani @SimpleStringBuilder'ı dize birleştirme güçlerine ihtiyacımız olan her yerde kullanabiliriz.

SimpleStringBuilder.buildBlock()'u doğrudan kullanmamıza engel olacak hiçbir şey yok, şu şekilde:

Ancak, SimpleStringBuilder yapımızla @resultBuilder ek açıklamasını kullandığımız için, bunu aşağıdaki gibi işlevlere de uygulayabiliriz:

Artık her dizenin sonunda virgüllere ihtiyacımız olmadığına dikkat edin – @resultBuilder, SimpleStringBuilder kullanarak makeSentence() içindeki her ifadeyi otomatik olarak tek bir dizeye dönüştürür.

Pratikte, sonuç oluşturucular, oluşturucu türünüze daha fazla yöntem ekleyerek önemli ölçüde daha fazlasını başarabilir. Örneğin, verileri nasıl dönüştürmek istediğimizi açıklayan iki ekstra yöntem ekleyerek SimpleStringBuilder'ımıza if/else desteği ekleyebiliriz. Kodumuzda, dizelerimizi hiç dönüştürmek istemiyoruz, böylece onları hemen geri gönderebiliriz:

Bunun neredeyse hiç iş yapmamış gibi göründüğünü biliyorum, ancak şimdi fonksiyonlarımız koşulları kullanabiliyor:

Benzer şekilde, oluşturucu türümüze bir buildArray() yöntemi ekleyerek döngüler için destek ekleyebiliriz:

Ve şimdi for döngülerini kullanabiliriz:

Neredeyse sihir gibi geliyor çünkü sonuç oluşturma sistemi bizim için neredeyse tüm işi yapıyor ve örneğimiz oldukça basit olsa da, umarım yaratıcıların Swift'e getirdiği olağanüstü güç sonucunun tadına varabilirsiniz.

Swift 5.4'ün sonuç oluşturucu sistemini, depolanmış özelliklere yerleştirilen öznitelikleri destekleyecek şekilde genişlettiğini eklemekte fayda var; bu, yapılar için sonuç oluşturucuyu uygulamak için örtük üye bazında başlatıcıyı otomatik olarak ayarlıyor.

Bu, özellikle bunun gibi sonuç oluşturucuları kullanan özel SwiftUI görünümleri için yararlıdır:

Sonuç oluşturucuların daha gelişmiş, gerçek dünyadan örneklerini çalışırken görmek istiyorsanız GitHub'daki Awesome Function Builders deposuna göz atmalısınız.

Yerel işlevler artık aşırı yüklemeyi destekliyor

SR-10069, yerel bağlamlarda işlevleri aşırı yükleme yeteneği istedi; bu, pratikte, iç içe geçmiş işlevlerin artık aşırı yüklenebileceği anlamına gelir, böylece Swift, kullanılan türlere göre hangisini çalıştıracağını seçer.

Örneğin, basit çerezler yapmak istersek şöyle bir kod yazabiliriz:

Swift 5.4'ten önce, üç add() yöntemi yalnızca makeCookies() içinde yuvalanmadıysa aşırı yüklenebiliyordu, ancak Swift 5.4'ten itibaren bu durumda da işlev aşırı yüklemesi destekleniyor.

Swift 5.4 ayrıca yerel işlevleri bildirilmeden önce çağırmamıza da izin verir, yani gerekirse artık şöyle kod yazabiliriz:

Özellik sarmalayıcıları artık yerel değişkenler için destekleniyor

Özellik sarmalayıcılar ilk olarak Swift 5.1'de özelliklere kolay, yeniden kullanılabilir bir şekilde ekstra işlevsellik eklemenin bir yolu olarak tanıtıldı, ancak Swift 5.4'te davranışları, bunları işlevlerde yerel değişkenler olarak kullanmayı desteklemek için genişletildi.

Örneğin, değerinin asla sıfırın altına düşmemesini sağlayan bir özellik sarmalayıcı oluşturabiliriz:

Ve Swift 5.4'ten itibaren, bu özellik sarmalayıcısını yalnızca bir özelliğe eklemek yerine normal bir işlev içinde kullanabiliriz. Örneğin, oyuncumuzun puan kazanabileceği veya kaybedebileceği bir oyun yazabiliriz, ancak puanı asla 0'ın altına düşmemelidir:

Paketler artık yürütülebilir hedefler bildirebilir

SE-0294, Swift Paket yöneticisini kullanan uygulamalar için yeni bir hedef seçeneği ekleyerek, yürütülebilir bir hedef açıkça bildirmemize olanak tanır.

This is particularly important for folks who want to use SE-0281 (using @main to mark your program’s entry point), because it didn’t play nicely with Swift Package Manager – it would always look for a main.swift file.

With this change, we can now remove main.swift and use @main instead. Not: You must specify // swift-tools-version:5.4 in your Package.swift file in order to get this new functionality.

Trying it yourself

Swift 5.4 is available through Xcode 12.5, which is available from the Mac App Store.

Which features of Swift 5.4 are sen most looking forward to?

SPONSORED A design tool made for SwiftUI. Kick-start your next design update with built-in SwiftUI design templates. Save time by skipping the need to set up a full development environment. Design for free with up to 5 files or get a full year of unlimited files and more for $29.99.

About the author

Paul Hudson is the creator of Hacking with Swift, the most comprehensive series of Swift books in the world. He's also the editor of Swift Developer News, the maintainer of the Swift Knowledge Base, and a speaker at Swift events around the world. If you're curious you can learn more here.


5.4: Logarithmic Functions

The composition of a function with its inverse returns the starting value, x.

This concept will be used to solve equations involving exponentials and logarithms.

Now that we have a basic idea of a logarithmic function, let's take a closer look at its graph.

Let's examine the function:

Değeri b (the 2) is referred to as the baz of the logarithm.

Notice that x must be positive.

Not: In a linear graph, the " rate of change " remains the same across the entire graph.
In a logarithmic graph, the "rate of change" increases (or decreases) across the graph.

For help with logarithms on
your calculator,
click here.

For "other bases" use the following "change of base" conversion:


Or use logBASE( template at MATH &rarr arrow down to A:logBASE(.

The graphs of functions of the form have certain characteristics in common.

• graph crosses the x-axis at (1,0)

• when b > 1, the graph increases

• when 0 < b < 1, the graph decreases

• the domain is all positive real numbers (never zero)

• the range is all real numbers

• graph passes the vertical line test for functions

• graph passes the horizontal line test for functional inverse.

• graph is asymptotic to the y-axis - gets very, very close to the y-axis but, in this case, does not touch it or cross it.

We know that dönüşümler have the ability to move functions by sliding them, reflecting them, stretching them, and shrinking them. Let's see how these changes will affect the logarithmic function:

Parent function:

Translation y = logb(x - h) + k
horizontal by h: vertical by k:


Domain: x > h
Range: x &isin Real numbers

All 3 transformations combined: y = a logb(x - h) + k

By examining the nature of the logarithmic graph, we have seen that the parent function will stay to the right of the x-axis, unless acted upon by a transformation.
• The parent function , y = logb x, will always have an x-intercept of one , occurring at the ordered pair of (1,0).
There is Hayır y-intercept with the parent function since it is asymptotic to the y-axis (approaches the y-axis but does not touch or cross it).

• The transformed parent function of the form y = alogb x, will also always have a x-intercept of 1 , occurring at the ordered pair of (1, 0). Note that the value of bir may be positive or negative.
Like the parent function, this transformation will be asymptotic to the y-axis, and will have Hayır y-tutmak.


• If the transformed parent function includes a vertical or horizontal shift , all bets are off. The horizontal shift will affect the possibility of a y-intercept and the vertical shift will affect the x-tutmak. In this situation, you will need to examine the graph carefully to determine what is happening.

• The end behavior of a transformed parent function is not always consistent, but is dependent upon the nature of the transformation. Consider this example:

For the transformed equation

the horizontal shift of +5 will push the
asymptote line to the left five units.
Thus the end behavior will be:

y-intercept, nerede x = 0, is
y =log 2 (0 + 5) + 4 &asymp 6.321928095.
x-intercept, nerede y = 0, is
approximately -4.94 (from the graph's table) .



Don't confuse log graphs
with square root graphs.
At fist glance, these two graphs appear to be similar. But the square root graph is actually ending, while the log graph is not.


End Behavior of a Function

The end behavior of a polynomial function is the behavior of the graph of f ( x ) as x approaches positive infinity or negative infinity.

The degree and the leading coefficient of a polynomial function determine the end behavior of the graph.

The leading coefficient is significant compared to the other coefficients in the function for the very large or very small numbers. So, the sign of the leading coefficient is sufficient to predict the end behavior of the function.

Leading Coefficient

To predict the end-behavior of a polynomial function, first check whether the function is odd-degree or even-degree function and whether the leading coefficient is positive or negative.

Find the end behavior of the function x 4 − 4 x 3 + 3 x + 25 .

The degree of the function is even and the leading coefficient is positive. So, the end behavior is:

f ( x ) → + ∞ , as x → − ∞ f ( x ) → + ∞ , as x → + ∞

The graph looks as follows:

Download our free learning tools apps and test prep books

Names of standardized tests are owned by the trademark holders and are not affiliated with Varsity Tutors LLC.

4.9/5.0 Satisfaction Rating over the last 100,000 sessions. As of 4/27/18.

Media outlet trademarks are owned by the respective media outlets and are not affiliated with Varsity Tutors.

Award-Winning claim based on CBS Local and Houston Press awards.

Varsity Tutors does not have affiliation with universities mentioned on its website.

Varsity Tutors connects learners with experts. Instructors are independent contractors who tailor their services to each client, using their own style, methods and materials.


Logarithmic Differentiation

The method of differentiating functions by first taking logarithms and then differentiating is called logarithmic differentiation . We use logarithmic differentiation in situations where it is easier to differentiate the logarithm of a function than to differentiate the function itself. This approach allows calculating derivatives of power, rational and some irrational functions in an efficient manner.

Consider this method in more detail. Let (y = fleft( x ight)). Take natural logarithms of both sides:

Next, we differentiate this expression using the chain rule and keeping in mind that (y) is a function of (x.)

It’s seen that the derivative is

The derivative of the logarithmic function is called the logarithmic derivative of the initial function (y = fleft( x ight).)

This differentiation method allows to effectively compute derivatives of power-exponential functions, that is functions of the form

where (uleft( x ight)) and (vleft( x ight)) are differentiable functions of (x.)

In the examples below, find the derivative of the function (yleft( x ight)) using logarithmic differentiation.


5.4: Logarithmic Functions

We know that the sign of the derivative tells us whether a function is increasing or decreasing for example, when $f'(x)>0$, $f(x)$ is increasing. The sign of the second derivative $f''(x)$ tells us whether $f'$ is increasing or decreasing we have seen that if $f'$ is zero and increasing at a point then there is a local minimum at the point, and if $f'$ is zero and decreasing at a point then there is a local maximum at the point. Thus, we extracted information about $f$ from information about $f''$.

We can get information from the sign of $f''$ even when $f'$ is not zero. Suppose that $f''(a)>0$. This means that near $x=a$, $f'$ is increasing. If $f'(a)>0$, this means that $f$ slopes up and is getting steeper if $f'(a) Figure 5.4.1. $f''(a)>0$: $f'(a)$ positive and increasing, $f'(a)$ negative and increasing.

Now suppose that $f''(a) 0$, this means that $f$ slopes up and is getting less steep if $f'(a) Figure 5.4.2. $f''(a) Example 5.4.1 Describe the concavity of $ds f(x)=x^3-x$. $ds f'(x)=3x^2-1$, $f''(x)=6x$. Since $f''(0)=0$, there is potentially an inflection point at zero. Since $f''(x)>0$ when $x>0$ and $f''(x) 0$.

Note that we need to compute and analyze the second derivative to understand concavity, so we may as well try to use the second derivative test for maxima and minima. If for some reason this fails we can then try one of the other tests.


Lesson 4

In this lesson, students work with graphs and tables that represent functions in addition to the equations and descriptions used previously. They learn the conventions of graphing the independent variable (input) on the horizontal axis and the dependent variable (output) on the vertical axis and that each coordinate point represents an input-output pair of the function.

By matching contexts and graphs and reading information about functions from graphs and tables, students become familiar with the different representations and draw connections between them.

Learning Goals

Let’s connect equations and graphs of functions.

Learning Targets

CCSS Standards

Glossary Entries

A dependent variable represents the output of a function.

For example, suppose we need to buy 20 pieces of fruit and decide to buy apples and bananas. If we select the number of apples first, the equation (b=20-a) shows the number of bananas we can buy. The number of bananas is the dependent variable because it depends on the number of apples.

An independent variable represents the input of a function.

For example, suppose we need to buy 20 pieces of fruit and decide to buy some apples and bananas. If we select the number of apples first, the equation (b=20-a) shows the number of bananas we can buy. The number of apples is the independent variable because we can choose any number for it.

A radius is a line segment that goes from the center to the edge of a circle. A radius can go in any direction. Every radius of the circle is the same length. We also use the word radius to mean the length of this segment.

For example, (r) is the radius of this circle with center (O) .

Expand Image

Print Formatted Materials

Teachers with a valid work email address can click here to register or sign in for free access to Cool Down, Teacher Guide, and PowerPoint materials.

Additional Resources

IM 6–8 Math was originally developed by Open Up Resources and authored by Illustrative Mathematics®, and is copyright 2017-2019 by Open Up Resources. It is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0). OUR's 6–8 Math Curriculum is available at https://openupresources.org/math-curriculum/.

Adaptations and updates to IM 6–8 Math are copyright 2019 by Illustrative Mathematics, and are licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

Adaptations to add additional English language learner supports are copyright 2019 by Open Up Resources, and are licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

The second set of English assessments (marked as set "B") are copyright 2019 by Open Up Resources, and are licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

Spanish translation of the "B" assessments are copyright 2020 by Illustrative Mathematics, and are licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

The Illustrative Mathematics name and logo are not subject to the Creative Commons license and may not be used without the prior and express written consent of Illustrative Mathematics.

This site includes public domain images or openly licensed images that are copyrighted by their respective owners. Openly licensed images remain under the terms of their respective licenses. See the image attribution section for more information.


5.4: Logarithmic Functions

The ECMAScript 2017 feature 𠇊sync Functions” was proposed by Brian Terlson.

5.1 Overview #

5.1.1 Variants #

The following variants of async functions exist. Note the keyword async everywhere.

  • Async function declarations: async function foo() <>
  • Async function expressions: const foo = async function () <>
  • Async method definitions: let obj = < async foo() <>>
  • Async arrow functions: const foo = async () => <>

5.1.2 Async functions always return Promises #

Fulfilling the Promise of an async function:

Rejecting the Promise of an async function:

5.1.3 Handling results and errors of asynchronous computations via await #

The operator await (which is only allowed inside async functions) waits for its operand, a Promise, to be settled:

  • If the Promise is fulfilled, the result of await is the fulfillment value.
  • If the Promise is rejected, await throws the rejection value.

Handling a single asynchronous result:

Handling multiple asynchronous results sequentially:

Handling multiple asynchronous results in parallel:

5.2 Understanding async functions #

Before I can explain async functions, I need to explain how Promises and generators can be combined to perform asynchronous operations via synchronous-looking code.

For functions that compute their one-off results asynchronously, Promises, which are part of ES6, have become popular. One example is the client-side fetch API, which is an alternative to XMLHttpRequest for retrieving files. Using it looks as follows:

5.2.1 Writing asynchronous code via generators #

co is a library that uses Promises and generators to enable a coding style that looks more synchronous, but works the same as the style used in the previous example:

Every time the callback (a generator function!) yields a Promise to co, the callback gets suspended. Once the Promise is settled, co resumes the callback: if the Promise was fulfilled, yield returns the fulfillment value, if it was rejected, yield throws the rejection error. Additionally, co promisifies the result returned by the callback (similarly to how then() does it).

5.2.2 Writing asynchronous code via async functions #

Async functions are basically dedicated syntax for what co does:

Internally, async functions work much like generators.

5.2.3 Async functions are started synchronously, settled asynchronously #

This is how async functions are executed:

  1. The result of an async function is always a Promise p . That Promise is created when starting the execution of the async function.
  2. The body is executed. Execution may finish permanently via return or throw . Or it may finish temporarily via await in which case execution will usually continue later on.
  3. The Promise p is returned.

While executing the body of the async function, return x resolves the Promise p with x , while throw err rejects p with err . The notification of a settlement happens asynchronously. In other words: the callbacks of then() and catch() are always executed after the current code is finished.

The following code demonstrates how that works:

You can rely on the following order:

  1. Line (A): the async function is started synchronously. The async function’s Promise is resolved via return .
  2. Line (C): execution continues.
  3. Line (B): Notification of Promise resolution happens asynchronously.

5.2.4 Returned Promises are not wrapped #

Resolving a Promise is a standard operation. return uses it to resolve the Promise p of an async function. That means:

  1. Returning a non-Promise value fulfills p with that value.
  2. Returning a Promise means that p now mirrors the state of that Promise.

Therefore, you can return a Promise and that Promise won’t be wrapped in a Promise:

Intriguingly, returning a rejected Promise leads to the result of the async function being rejected (normally, you𠆝 use throw for that):

That is in line with how Promise resolution works. It enables you to forward both fulfillments and rejections of another asynchronous computation, without an await :

The previous code is roughly similar to – but more efficient than – the following code (which unwraps the Promise of anotherAsyncFunc() only to wrap it again):

5.3 Tips for using await #

5.3.1 Don’t forget await #

One easy mistake to make in async functions is to forget await when making an asynchronous function call:

In this example, value is set to a Promise, which is usually not what you want in async functions.

await can even make sense if an async function doesn’t return anything. Then its Promise is simply used as a signal for telling the caller that it is finished. Örneğin:

The await in line (A) guarantees that step1() is completely finished before the remainder of foo() is executed.

5.3.2 You don’t need await if you 𠇏ire and forget” #

Sometimes, you only want to trigger an asynchronous computation and are not interested in when it is finished. The following code is an example:

Here, we don’t care when individual writes are finished, only that they are executed in the right order (which the API would have to guarantee, but that is encouraged by the execution model of async functions – as we have seen).

The await in the last line of asyncFunc() ensures that the function is only fulfilled after the file was successfully closed.

Given that returned Promises are not wrapped, you can also return instead of await writer.close() :

Both versions have pros and cons, the await version is probably slightly easier to understand.

5.3.3 await is sequential, Promise.all() is parallel #

The following code make two asynchronous function calls, asyncFunc1() and asyncFunc2() .

However, these two function calls are executed sequentially. Executing them in parallel tends to speed things up. You can use Promise.all() to do so:

Instead of awaiting two Promises, we are now awaiting a Promise for an Array with two elements.

5.4 Async functions and callbacks #

One limitation of async functions is that await only affects the directly surrounding async function. Therefore, an async function can’t await in a callback (however, callbacks can be async functions themselves, as we’ll see later on). That makes callback-based utility functions and methods tricky to use. Examples include the Array methods map() and forEach() .

5.4.1 Array.prototype.map() #

Let’s start with the Array method map() . In the following code, we want to download the files pointed to by an Array of URLs and return them in an Array.

This does not work, because await is syntactically illegal inside normal arrow functions. How about using an async arrow function, then?

There are two issues with this code:

  • The result is now an Array of Promises, not an Array of strings.
  • The work performed by the callbacks isn’t finished once map() is finished, because await only pauses the surrounding arrow function and httpGet() is resolved asynchronously. That means you can’t use await to wait until downloadContent() is finished.

We can fix both issues via Promise.all() , which converts an Array of Promises to a Promise for an Array (with the values fulfilled by the Promises):

The callback for map() doesn’t do much with the result of httpGet() , it only forwards it. Therefore, we don’t need an async arrow function here, a normal arrow function will do:

There is one small improvement that we still can make: This async function is slightly inefficient – it first unwraps the result of Promise.all() via await , before wrapping it again via return . Given that return doesn’t wrap Promises, we can return the result of Promise.all() directly:

5.4.2 Array.prototype.forEach() #

Let’s use the Array method forEach() to log the contents of several files pointed to via URLs:

Again, this code will produce a syntax error, because you can’t use await inside normal arrow functions.

Let’s use an async arrow function:

This does work, but there is one caveat: the Promise returned by httpGet() is resolved asynchronously, which means that the callbacks are not finished when forEach() returns. As a consequence, you can’t await the end of logContent() .

If that’s not what you want, you can convert forEach() into a for-of loop:

Now everything is finished after the for-of loop. However, the processing steps happen sequentially: httpGet() is only called a second time after the first call is finished. If you want the processing steps to happen in parallel, you must use Promise.all() :

map() is used to create an Array of Promises. We are not interested in the results they fulfill, we only await until all of them are fulfilled. That means that we are completely done at the end of this async function. We could just as well return Promise.all() , but then the result of the function would be an Array whose elements are all undefined .

5.5 Tips for using async functions #

5.5.1 Know your Promises #

The foundation of async functions is Promises. That’s why understanding the latter is crucial for understanding the former. Especially when connecting old code that isn’t based on Promises with async functions, you often have no choice but to use Promises directly.

For example, this is a “promisified” version of XMLHttpRequest :

The API of XMLHttpRequest is based on callbacks. Promisifying it via an async function would mean that you𠆝 have to fulfill or reject the Promise returned by the function from within callbacks. That’s impossible, because you can only do so via return and throw . And you can’t return the result of a function from within a callback. throw has similar constraints.

Therefore, the common coding style for async functions will be:

  • Use Promises directly to build asynchronous primitives.
  • Use those primitives via async functions.

5.5.2 Immediately Invoked Async Function Expressions #

Sometimes, it𠆝 be nice if you could use await at the top level of a module or script. Alas, it’s only available inside async functions. You therefore have several options. You can either create an async function main() and call it immediately afterwards:

Or you can use an Immediately Invoked Async Function Expression:

Another option is an Immediately Invoked Async Arrow Function:

5.5.3 Unit testing with async functions #

The following code uses the test-framework mocha to unit-test the asynchronous functions asyncFunc1() and asyncFunc2() :

However, this test always succeeds, because mocha doesn’t wait until the assertions in line (B) and line (C) are executed.

You can fix this by returning the result of the Promise chain, because mocha recognizes if a test returns a Promise and then waits until that Promise is settled (unless there is a timeout).

Conveniently, async functions always return Promises, which makes them perfect for this kind of unit test:

There are thus two advantages to using async functions for asynchronous unit tests in mocha: the code is more concise and returning Promises is taken care of, too.

5.5.4 Don’t worry about unhandled rejections #

JavaScript engines are becoming increasingly good at warning about rejections that are not handled. For example, the following code would often fail silently in the past, but most modern JavaScript engines now report an unhandled rejection:


Videoyu izle: Üstel ve logaritmik fonksiyonlar,AYT, ÖABT, (Aralık 2021).