Bir for döngüsünde değişkenler oluşturun
Mathematica'da çok yeniyim, ancak değişkenler oluşturmak için For döngülerini kullanmak benim için çok daha kolay olurdu. Düşünce trenim basitti, ama görünüşe göre işe yaramıyor. Diyelim ki bu değişkenleri tanımladım
ex1 = 1 + 0.5
ex2 = ex1 + 0.5^2/2!
ex3 = ex2 + 0.5^3/3!
ex4 = ex3 + 0.5^4/4!
ex5 = ex4 + 0.5^5/5!
ex6 = ex5 + 0.5^6/6!
Sayısal yöntemler sınıfımdaki bir sonraki adım, mutlak hatayı elde etmekti, bu da örneğin gerçek değeri "ex1" den alacağım deneysel değerden çıkarmak anlamına geliyor. Bu arada, burada yaklaşık olarak tahmin etmeye çalıştığımız şey e ^ 0.5.
Yani ilk yaptığım şey şuydu:
ae1 = (e^0.5 - ex1)
Ve hepsi için o adımı tekrarladım. Bunları değişkenleri tanımladığım ve döngüdeki geçmiş değişkenleri kullandığım bir For döngüsüne dahil etmek istiyorum. Düşünce trenim şuydu:
For[i = 1, i < 7, i++, Print[aei = (e^0.5 - exi)]]
Bu açıkçası işe yaramıyor, ancak böyle bir şey yapmak mümkün mü?
Yanıtlar
Bunu yinelemeli olarak tanımlamaya ne dersiniz?
ex[0] = 1;
ex[n_] := ex[n] = ex[n - 1] + 0.5^n/n!;
İkinci satırdaki ikili atama çok önemlidir. Bu, tüm işlev çağrılarının yalnızca bir kez değerlendirilmesine neden olur. Başlangıçta değerlendirildikten sonra, ex [n] olarak kaydedilecektir.
Table[{k, ex[k]}, {k, 1, 10}] // TableForm
1 1.5 2 1.625 3 1.64583 4 1.64844 5 1.6487 6 1.64872 7 1.64872 8 1.64872 9 1.64872 10 1.64872
Clear["Global`*"]
Özyinelemeyi kullanmak RSolveiçin infinitezero'nun önerisine devam ederek , genel ifadeyi bulmak için kullanın .
ex[n_] = ex[n] /.
RSolve[{ex[0] == 1, ex[n] == ex[n - 1] + (1/2)^n/n!}, ex[n], n][[1]]
(* (Sqrt[E] Gamma[1 + n, 1/2])/Gamma[1 + n] *)
İlk birkaç değer
ex /@ Range[0, 10] *)
(* {1, 3/2, 13/8, 79/48, 211/128, 6331/3840, 75973/46080, 354541/215040, \
17017969/10321920, 306323443/185794560, 2042156287/1238630400}
Yaklaşık olan
% // N
(* {1., 1.5, 1.625, 1.64583, 1.64844, 1.6487, 1.64872, 1.64872, 1.64872, \
1.64872, 1.64872} *)
%[[-1]] // InputForm
(* 1.6487212706873657 *)
Bu dizinin sınırı
Limit[ex[n], n -> Infinity]
(* Sqrt[E] *)
% // N[%, 20] &
(* 1.6487212707001281468 *)
Kullanmanın bir yolu daha FoldList:
FoldList[#1 + 0.5^#2/#2! &, 1 , Range[7]]
(* {1, 1.5, 1.625, 1.64583, 1.64844, 1.6487, 1.64872, 1.64872} *)