24 Kasım 2007 Cumartesi
Apt-get sorunu çözülmüştür=))
Sarhoş kafayla yine ortalığı dağıtıyorum:P birkaç gündür sudo apt-get install hede dediğim halde kurulumları yapamıyor ancak paket yöneticisiyle işleri hallediyordum.
badis@badis-laptop:~$ sudo apt-get install slime
[sudo] password for badis:
E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
bu tarz bir çıktı alıyordum. kolları sıvadım içkinin verdiği cesaretle gksu nautilus güçleriyel donanıp /var/lib/dpdk dizinine geldim lockta hiçbirşey yazmıyordu sadece lock diye boş bir dosyaydı. hemen çöpe attım ve denedim. müthiş bir hazdı. evet teşekkür ederim linus amca=)
22 Kasım 2007 Perşembe
18 Kasım 2007 Pazar
Vim'le janjanlı kod yazma hedesi
öhüm 4 günde 9 vizeye girdim kafamda hasar oluştu galiba yaklaşık 100 formül ve 400'e yakın kavramı 15-20 saat gibi kısa bir sürede ezberleyip son derece yüksek seviyede matematik maymunluklarıyla uygulamasını aşkı meşk eyleyip sınavları kendimce başarılı olarak atlatabilmenin haklı ve salak gururunu yaşıyorum sayın olmayan okuyucularım. extremeye baktım paso ubuntu sexy den geliyorlar benim bilmediğim ubuntu adında bi porno yıldızı felan mı var merak etmeye başladım:P
ve gelelüüm günün menüsüne:
vim unix tabanlı sistemlerin sanırım hepsinde olan günün birinde lazım olursa diye Robin Burk'ün UNIX kitabında koca bir bölümünü ona ayırdığı belgeler.org da çok güzel bir giriş klavuzu bulabileceğiniz emacs ile kapıştığı rivayet edilen emacsı beceremeyen ben insanının lanet olsun emacsına da şu çok zeki rmssine de diyip seçtiği gpl lisansına sahip güzel bir editördür.
hemen sitesinden araklıyalım:
What Is Vim?
Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems.
Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE. It's not just for programmers, though. Vim is perfect for all kinds of text editing, from composing email to editing configuration files.
What Vim Is Not?
Vim isn't an editor designed to hold its users' hands. It is a tool, the use of which must be learned.
Vim isn't a word processor. Although it can display text with various forms of highlighting and formatting, it isn't there to provide WYSIWYG editing of typeset documents. (It is great for editing TeX, though.)
kaynak: http://www.vim.org/about.php
sitesinden indirip kullanabilirsiniz. linux dağıtımı kullanıyorsanız zaten hazır olarak gelicektir.
bu vim hedesinin içinde :syntax on dedik mi her yer renkleniyor işte syntaxa göre renklendirme yapılıyor.
eğer kodu yazarken boşlukları kendisi versin derseniz
:set cindent
:set sw=4
burda girinti sayısını 4e ayarladık. ama eğer bunları her defasında yapçam mı ben derseniz ubuntudakiler için anlatayım diğer linux kullanıcılarında da buna benzerdir. etcnin içinde vim, vimin içinde de vimrc diye bir dosya var bunda değişiklik yapmamız gerekiyor. ancak root değilken gücümüz bu dosyayı değiştirmeye yetmiyor.
uçbiride :~$ gksu nautilus diyip GÖLGÖLERİN GÜCÜ ADINA GÜÇ BENDE ARTIK ROOHAAAAN diye bağırıp etc/vim/vimrc ye on penguen tıklama gücüyle ulaşıyoruz. oranın sonuna
autocmd BufRead,BufNewFile *.py syntax on
autocmd BufRead,BufNewFile *.py set ai
autocmd BufRead,BufNewFile *.cpp syntax on
autocmd BufRead,BufNewFile *.cpp set ai
autocmd BufRead,BufNewFile *.c syntax on
autocmd BufRead,BufNewFile *.c set ai
autocmd BufRead,BufNewFile *.py set cindent
autocmd BufRead,BufNewFile *.py set sw=4
autocmd BufRead,BufNewFile *.cpp set cindent
autocmd BufRead,BufNewFile *.cpp set sw=4
autocmd BufRead,BufNewFile *.c set cindent
autocmd BufRead,BufNewFile *.c set sw=4
ekleyip olayı kökünden çözüyoruz.
dip not:
autocmd BufRead,BufNewFile *.py syntax on
autocmd BufRead,BufNewFile *.py set ai
kısmını pyton.orgdan çaldım gerisini kendim uydurdum. bi sorun çıkarsa affola:P
günün konusunu resimsiz bırakmak olmaz:
4 Kasım 2007 Pazar
Gecenin bi yarısı insanı kızdırıyorlar..
MSN HACK SİTE ÖRNEĞİ
Yine msn hack olayı. çok saçma geliyor başkasının mailini alınca ne yapar ki insanlar tam mallık. diğer hack vakaları gibi bu da aptalca insan nasıl çalışıyor diye merak etmeli ehue nası kırdım hazır betiklerle diye sevinmemeli. bu sitemizin adı da blockdelete dat com çoklu dil seçeneği bile var:P
ahanda görüntüsü yanda..
olan xyz arkadaşımın msne oldu. gpl lisanslı amsn kullansa zaten engelleyenler görünüyor bende diye düşünüp şifresini yazmazdı. ne varsa GNU da var arkadaş=) Aralık ayında EMO'da Matlab semineri verecektim biraz araştırdım ubuntuyu ilk kurduğumda beceremediğim gnu octave'ın kullanılırlığını inceliyorum şu sıralar. Tabi seminer verebilmek için manuelini baya bi incelemek lazım..
amsn detaylı bilgi için: http://tr.pardus-wiki.org/Amsn
27 Ekim 2007 Cumartesi
Unsolved Problems in Mathematical Systems and Control Theory
Mathematical Control Theory
13 Ekim 2007 Cumartesi
milw0rm.com hacking videoları
http://www.milw0rm.com/video/watch.php?id=1
http://www.milw0rm.com/video/watch.php?id=2
http://www.milw0rm.com/video/watch.php?id=3
http://www.milw0rm.com/video/watch.php?id=4
http://www.milw0rm.com/video/watch.php?id=5
http://www.milw0rm.com/video/watch.php?id=6
http://www.milw0rm.com/video/watch.php?id=7
http://www.milw0rm.com/video/watch.php?id=8
http://www.milw0rm.com/video/watch.php?id=9
http://www.milw0rm.com/video/watch.php?id=10
http://www.milw0rm.com/video/watch.php?id=11
http://www.milw0rm.com/video/watch.php?id=12
http://www.milw0rm.com/video/watch.php?id=13
http://www.milw0rm.com/video/watch.php?id=14
http://www.milw0rm.com/video/watch.php?id=15
http://www.milw0rm.com/video/watch.php?id=16
http://www.milw0rm.com/video/watch.php?id=17
http://www.milw0rm.com/video/watch.php?id=18
http://www.milw0rm.com/video/watch.php?id=19
http://www.milw0rm.com/video/watch.php?id=20
http://www.milw0rm.com/video/watch.php?id=21
http://www.milw0rm.com/video/watch.php?id=22
http://www.milw0rm.com/video/watch.php?id=23
http://www.milw0rm.com/video/watch.php?id=24
http://www.milw0rm.com/video/watch.php?id=25
http://www.milw0rm.com/video/watch.php?id=26
http://www.milw0rm.com/video/watch.php?id=27
http://www.milw0rm.com/video/watch.php?id=28
http://www.milw0rm.com/video/watch.php?id=29
http://www.milw0rm.com/video/watch.php?id=30
http://www.milw0rm.com/video/watch.php?id=31
http://www.milw0rm.com/video/watch.php?id=32
http://www.milw0rm.com/video/watch.php?id=33
http://www.milw0rm.com/video/watch.php?id=34
http://www.milw0rm.com/video/watch.php?id=35
http://www.milw0rm.com/video/watch.php?id=36
http://www.milw0rm.com/video/watch.php?id=37
http://www.milw0rm.com/video/watch.php?id=38
http://www.milw0rm.com/video/watch.php?id=39
http://www.milw0rm.com/video/watch.php?id=40
http://www.milw0rm.com/video/watch.php?id=41
http://www.milw0rm.com/video/watch.php?id=42
http://www.milw0rm.com/video/watch.php?id=43
http://www.milw0rm.com/video/watch.php?id=44
http://www.milw0rm.com/video/watch.php?id=45
http://www.milw0rm.com/video/watch.php?id=46
http://www.milw0rm.com/video/watch.php?id=47
http://www.milw0rm.com/video/watch.php?id=48
http://www.milw0rm.com/video/watch.php?id=49
http://www.milw0rm.com/video/watch.php?id=50
http://www.milw0rm.com/video/watch.php?id=51
http://www.milw0rm.com/video/watch.php?id=52
http://www.milw0rm.com/video/watch.php?id=53
http://www.milw0rm.com/video/watch.php?id=54
http://www.milw0rm.com/video/watch.php?id=55
http://www.milw0rm.com/video/watch.php?id=56
http://www.milw0rm.com/video/watch.php?id=57
http://www.milw0rm.com/video/watch.php?id=58
http://www.milw0rm.com/video/watch.php?id=59
http://www.milw0rm.com/video/watch.php?id=60
http://www.milw0rm.com/video/watch.php?id=61
http://www.milw0rm.com/video/watch.php?id=62
http://www.milw0rm.com/video/watch.php?id=63
http://www.milw0rm.com/video/watch.php?id=64
http://www.milw0rm.com/video/watch.php?id=65
http://www.milw0rm.com/video/watch.php?id=66
http://www.milw0rm.com/video/watch.php?id=67
http://www.milw0rm.com/video/watch.php?id=68
http://www.milw0rm.com/video/watch.php?id=69
http://www.milw0rm.com/video/watch.php?id=70
http://www.milw0rm.com/video/watch.php?id=71
http://www.milw0rm.com/video/watch.php?id=72
sıcak sıcak ubuntu!
5 gün sonra ubuntunun 7.10 kararlı sürümü çıkacak. isteyenler http://releases.ubuntu.com
30 Eylül 2007 Pazar
29 Eylül 2007 Cumartesi
28 Eylül 2007 Cuma
27 Eylül 2007 Perşembe
gemileri yaktım..
28 Temmuz 2007 Cumartesi
28 Haziran 2007 Perşembe
26 Haziran 2007 Salı
Python yapay sinir ağı modülü
# Back-Propagation Neural Networks
#
# Written in Python. See http://www.python.org/
# Placed in the public domain.
# Neil Schemenauer
import math
import random
import string
random.seed(0)
# calculate a random number where: a <= rand < b
def rand(a, b):
return (b-a)*random.random() + a
# Make a matrix (we could use NumPy to speed this up)
def makeMatrix(I, J, fill=0.0):
m = []
for i in range(I):
m.append([fill]*J)
return m
# our sigmoid function, tanh is a little nicer than the standard 1/(1+e^-x)
def sigmoid(x):
return math.tanh(x)
# derivative of our sigmoid function
def dsigmoid(y):
return 1.0-y*y
class NN:
def __init__(self, ni, nh, no):
# number of input, hidden, and output nodes
self.ni = ni + 1 # +1 for bias node
self.nh = nh
self.no = no
# activations for nodes
self.ai = [1.0]*self.ni
self.ah = [1.0]*self.nh
self.ao = [1.0]*self.no
# create weights
self.wi = makeMatrix(self.ni, self.nh)
self.wo = makeMatrix(self.nh, self.no)
# set them to random vaules
for i in range(self.ni):
for j in range(self.nh):
self.wi[i][j] = rand(-2.0, 2.0)
for j in range(self.nh):
for k in range(self.no):
self.wo[j][k] = rand(-2.0, 2.0)
# last change in weights for momentum
self.ci = makeMatrix(self.ni, self.nh)
self.co = makeMatrix(self.nh, self.no)
def update(self, inputs):
if len(inputs) != self.ni-1:
raise ValueError, 'wrong number of inputs'
# input activations
for i in range(self.ni-1):
#self.ai[i] = sigmoid(inputs[i])
self.ai[i] = inputs[i]
# hidden activations
for j in range(self.nh):
sum = 0.0
for i in range(self.ni):
sum = sum + self.ai[i] * self.wi[i][j]
self.ah[j] = sigmoid(sum)
# output activations
for k in range(self.no):
sum = 0.0
for j in range(self.nh):
sum = sum + self.ah[j] * self.wo[j][k]
self.ao[k] = sigmoid(sum)
return self.ao[:]
def backPropagate(self, targets, N, M):
if len(targets) != self.no:
raise ValueError, 'wrong number of target values'
# calculate error terms for output
output_deltas = [0.0] * self.no
for k in range(self.no):
error = targets[k]-self.ao[k]
output_deltas[k] = dsigmoid(self.ao[k]) * error
# calculate error terms for hidden
hidden_deltas = [0.0] * self.nh
for j in range(self.nh):
error = 0.0
for k in range(self.no):
error = error + output_deltas[k]*self.wo[j][k]
hidden_deltas[j] = dsigmoid(self.ah[j]) * error
# update output weights
for j in range(self.nh):
for k in range(self.no):
change = output_deltas[k]*self.ah[j]
self.wo[j][k] = self.wo[j][k] + N*change + M*self.co[j][k]
self.co[j][k] = change
#print N*change, M*self.co[j][k]
# update input weights
for i in range(self.ni):
for j in range(self.nh):
change = hidden_deltas[j]*self.ai[i]
self.wi[i][j] = self.wi[i][j] + N*change + M*self.ci[i][j]
self.ci[i][j] = change
# calculate error
error = 0.0
for k in range(len(targets)):
error = error + 0.5*(targets[k]-self.ao[k])**2
return error
def test(self, patterns):
for p in patterns:
print p[0], '->', self.update(p[0])
def weights(self):
print 'Input weights:'
for i in range(self.ni):
print self.wi[i]
print 'Output weights:'
for j in range(self.nh):
print self.wo[j]
def train(self, patterns, iterations=1000, N=0.5, M=0.1):
# N: learning rate
# M: momentum factor
for i in xrange(iterations):
error = 0.0
for p in patterns:
inputs = p[0]
targets = p[1]
self.update(inputs)
error = error + self.backPropagate(targets, N, M)
if i % 100 == 0:
print 'error %-14f' % error
def demo():
# Teach network XOR function
pat = [
[[0,0], [0]],
[[0,1], [1]],
[[1,0], [1]],
[[1,1], [0]]
]
# create a network with two input, two hidden, and one output nodes
n = NN(2, 2, 1)
# train it with some patterns
n.train(pat)
# test it
n.test(pat)
if __name__ == '__main__':
demo()
24 Haziran 2007 Pazar
python kodları.2
- n sıfırsa 1 çıktısı ver
- n mod 2 de 0 yani çift sayı ise
- x in x le çarpımını n/2 sayısıyla bu fonksiyonda yeniden çalıştır.
- böylece n/2k=1 e kadar xler kademeli olarak çarpılmış olacaktır.
- n tek sayı ise (yukardaki işlemlerden sonra elde ettiğimiz n/2k=1 de dahil)
- x çarpanını ayırıp n i çift sayı haline getirir ve çift sayılardaki işlemi uygular.
fields madalyalı bloglar
- http://noncommutativegeometry.blogspot.com/ (Alain Connes)
- http://terrytao.wordpress.com/ (Terry Tao)
python kodları.1
def ile topla isimli ve n girdili bir fonksiyon tanımlanmıştır.
sonuc=0 ve i=1 tanımlamaları yapılmıştır. bunlar ilerde kullanılacak değişkenlerdir. while ile i nden küçük ve eşit olduğu sürece çalışacak bir döngü oluşturulmuştur. her döngüde sonuç i ile toplanıp değeri arttırılacak ve i bir arttırılacaktır bölece i ne kadar artar ve return sonuc ile döngüden çıkıp sonucu elde eder.
mesela n=5 için döngüye bakalım:
- sonuc=s=0 ve i=1, i nden küçük ve döngü başlar:
- s= 0+1, i =1+1=2, n den küçük döngüye devam,
- s=1+2, i=2+1=3, yine nden küçük
- s=3+3, i=3+1, yine,
- s=6+4, i=4+1=5, n e eşit son bir döngü daha,
- s=10+5, i=5+1=6 ve nihayet n den büyük ve döngüden çıkar.
- return sonuc a gelir ve cevabı geri döndürür.
python kodları.0
ilki faktöriyel hesaplama:
def ile fonksiyon tanımlanmış fonksiyonun adı faktoryel kullanılan girdi de n dir.
eğer n sıfıra eşitse program 1 çıktııs verir ve biter bunu return komutu sağlar.
sıfırdan farklı bir değerse n faktoryal (n-1) fonksiyonu ile çarpılıp işlem biter. ancak faktoryel n-1 sıfırdan farklı ise o fonksiyonda da (n-1) le faktoryel(n-1 - 1) işlemi vardır ve bu sıfıra kadar gider. sonuç olarak n(n-1)(n-2)(n-3)...(n-(n-2))(n-(n-1) e kadar sürer işlemimiz ve bu da n! e eşittir.
23 Haziran 2007 Cumartesi
pythona devam II
Tüpler listeye benzer ama içerikleri değiştirilemez. Tüpün elemanları parantez içerisinde sıralanır. Program akışını hızlandırdıkları için programlarda dizilerin yerine kullanılırlar.
Sözlükler listelere benzerler ancak verilerin konumlarını 0 dan başlayan sayılar yerine kendimiz belirleyebiliriz. Bu konum kelimelerine anahtarlar denir. Sözlükteki anahtarları keys() fonksiyonu ile buluruz.
bilgi.keys() gibi.
bilgi.has_key('aranan anahtar') bir anahtarın o sözlükte olup olmadığını bulmamızı sağlar. varsa True yoksa False cevabını verir.
sözlüteki değerleri görüntülemek için values() fonksiyonunu kullanırız.
bilgi.values() gibi.
items() bir sözlükteki anahtar, değer ikililerini (tüplerini) elde etmemizi sağlar.
bilgi.items() şeklinde kullanılır.
yazılarda bahsedilen listeler sözlükler vetüpler iç içe kullanılabilinir.
get() ile sözlükteki bir anahtarın değerini getirir. eğer sözlükte o anahtar yoksa birşey yapmaz, hata vermez. get(x,y) de ise sözlükte eğer x anahtarı yoksa y ye geçer.
del() ile bir anahtarı sözlükten silebiliriz.
clear() ile bir sözlükteki bütün anahtarları ve bağlantılarını silebiliriz.
uptade() ile bir sözlükteki anahtarların değeri başka sözlüktekilerle değiştirilebilir.
>>> sos1={'ahe':2.999,'veha':11111,'dela':222}
>>> sos2={'ahe':3,'veha':0}
>>> sos1.update(sos2)
>>> sos1
{'dela': 222, 'veha': 0, 'ahe': 3}
>>>
9 Haziran 2007 Cumartesi
scheme eskizlerine devam.
Teach Yourself Scheme in Fixnum Days
kaynağına bakıyorum ordan da bazı karalamalar.ilk iş merhaba dünya olayına girişmişler=)
;ilk program
(begin
(display "Merhaba, Dünya!")
(newline))
noktalı virgül yorumdur.
Boolean cebir elemanları 1 = #t (true dan), 0= #f (false dan) olarak tanımlanmıştır.
not boolean tersi işlemidir. sıfırsa bir birse sıfıra çevirir.
(not #f) => #t
(not #t) => #f
(not "Hello, World!") => #f
boolean? boolean cebiri için tanımlanmış ifade olup olmadığına bakar.
(boolean? #t) => #t
(boolean? "Hello, World!") => #f
scheme de number kavramı (sayı) bütün tam sayıları (integers), rasyonel sayıları (rationals),
reel (reals) ve karmaşık (complex) sayıları kapsar. bir verinin sayı olup olmadığı number?
sorgusu ile yapılır. diğer veri yapısı sorguları da aşağıdaki gibidir.
(number? 42) => #t
(number? #t) => #f
(complex? 2+3i) => #t
(real? 2+3i) => #f
(real? 3.1416) => #t
(real? 22/7) => #t
(real? 42) => #t
(rational? 2+3i) => #f
(rational? 3.1416) => #t
(rational? 22/7) => #t
(integer? 22/7) => #f
(integer? 42) => #t
#b ikili sistemi temsil eder.
#b1100 yazdığımızda onluk sisteme dönüştürülür (12).
#o sekizlik,
#x ise 16lık hex sistemini temsil eder.
eqv? eşit olup olmadığını test eder.
(eqv? 13 13)
(eqv? 13 #t)
(eqv? 13 #f)
(eqv? 13 13.0)
ayrıca sayılar için = de kullanılır
.
(= 42 42) => #tbüyüklük küçüklük ve büyük eşitlik gibi ifadeler normal matematikteki
(= 42 #f) -->ERROR!!!
(= 42 42.0) => #t
(< 3 2) => #f
(>= 4.5 3) => #t
gibidir.
(< 3 2) => #fmaksimum ve minumum değerleri bulmak için max ve min
(>= 4.5 3) => #t
üssünü almak expt ile olur.
(expt 2 3) => 8
(expt 4 1/2) => 2.0
ilk ifade yoksa - de ilk ifade sıfırmış gibi / de de 1 miş gibi
davranır.
(- 4) => -4
(/ 4) => 1/4
kullanılır.
(max 1 3 4 2 3) => 4karakterler /# ön ekiyle tanımlanırlar. #\c , c karakteridir.
(min 1 3 4 2 3) => 1
#\newline ,
#\tab gibi kullanılabilirler. space tuşu #\ veya #\space şeklinde gösterilebilir.
Bir verinin karakter olup olmadığı char? ile sorgulanabilir.
(char? #\c) => #t
(char? 1) => #f
(char? #\;) => #t
karakterlerin karşılaştırılması dachar=?
,char
,char<=?
,char>?
,char>=?
şekillerinde yapılabilir.
(char=? #\a #\a) => #tdefine ile global değişken ataması yapabiliriz.
(char #\a #\b) => #t
(char>=? #\a #\b) => #f
karakterleri büyüklük küçüklük hassasiyeti olmadan karşılaştırma yapmak
için char-ci kullanılır.
(char-ci=? #\a #\A) => #t
(char-ci #\a #\B) => #t
küçük harflerin büyük harflere dönüştürülmesi char-upcase, büyüklerin de küçük
harflere dönüştürülmesi char-downcase komutları ile yapılır.
(char-downcase #\A) => #\a
(char-upcase #\a) => #\A
Semboller değişken tanımlamakta kullanılırlar. sembolleri belirtmek için
quote veya ' kullanılır. (buraları ben de pek anlamadım.)
(quote xyz)
=> xyz
'E
(quote E)
sorgulaması symbol? ile yapılır.
(symbol? 'xyz) => #t
(symbol? 42) => #f
Shceme de sembollerin büyük küçük duyarlılığı yoktur.
(eqv? 'Calorie 'calorie)
=> #t
(define xyz 5)
xyz
=> 5string-append ile ekleme yapabiliriz
set! ile değişkenin değerini değiştirebiliriz.
(set! xyz #\c)
xyz
=> #\c
string harfleri birleştirmeyi sağlar.
(string #\M #\e #\r #\h #\a #\b #\a)
=>"Merhaba"
string-ref ise istenen sıradaki harfi verir.
(define aa "Merhaba ; Merhaba!")
(string-ref aa 9)
=>#\space
(string-ref aa 0)
=>#\M
(string-ref aa 1)
=>#\e
string-append aa " mrb." " slm.")
=>"Merhaba ; Merhaba! mrb. slm."
define ve string i birlikte kullanarak da tanımlama yapabiliriz.
(define mrb (string #\M #\e #\r #\h #\a #\b #\a))
mrb
=>"Merhaba"
string-set! ile dizideki karakterlerden istediğimizi değiştirebiliriz.
(string-set! mrb 1 #\i)
mrb
=>"Mirhaba"
matematik dünyasında sonsuz listelerle ilgili bir makale bir makale buldum.
7 Haziran 2007 Perşembe
Matematik Dünyası
6 Haziran 2007 Çarşamba
scheme karalamalar
sicp kitabı ile schemeyi kurcalıyorum bakalım noolcak =)
MIT nin GNU schemesini kullanamadım (run emacsdakinden farklıydı bulamadım) onun yerine DrScheme kullanıyorum. dosyalar .scm olarak kaydediliyor. Dili içgüdüsel olarak standart seçtim (Language: Standard (R5RS).)
linuxda açmak için badis@badis-laptop:~$ drscheme yazmanız yeterlidir.
kaydettiğiniz betiği de badis@badis-laptop:~$ drscheme betikadi.scm şeklinde geri çağırıp üstünde çalışabilirsiniz.
(+ 333 234)
567
(* 12 5 4)
240
(- 11 3 )
8
(+ (* 4 5) (- 4 6))
18
(+(* 3(+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6))
57
(- 4 5 6 7)
-14
en son yaptığımız çıkarmada ilk elemandan diğer üçünü çıkarmaktadır. schemede common lisp deki gibi önce komut ardından listenin elemanları geliyor.
tanımlamaları define ile yaparız.
(define boy 20)
boy
(* 5 boy)
(define pi 3.141592654)
(define yaricap 5)
(define cevre (* 2 pi yaricap))
cevre
(define alan (* pi yaricap yaricap))
alan
(* (+ 2 (* 4 6))
(+ 3 5 7))
bu işlemin ağacına bakalım: 3,5,7 bir dallanma 4,6 ayrı ancak 2 ile birleşiyor. aşağıda agacı mevcuttur kitaptan copy paste edilmiştir. (kendime not okulun sitesinde bulduğum ağaç slaytlarına çalış devre teorisinde gördüğün graflar yetmeyecektir, teorini güçlendir!)
bana muhteşem gelen bir şey okudum az önce. fonksiyonu anında tanımlıyoruz ve anında kullanabiliyoruz. çok güzel bir özellik bence.
temel yapısı:
(define (fonksiyon-adı paramatre1 par2..) (işlem par1 par2..))
(define (kare x) (* x x))
(kare 7)
(kare (+ 4 5))
(kare (kare 4))
(define (kareler-toplamı x y)(+ (kare x) (kare y)))
(kareler-toplamı 6 8)
(define (f z)
(kareler-toplamı (* z z) (* z 4)))
(f 5)
DrScheme'nin güzel bir özelliği de imleç paranteze geldiğinde parantezin bitimine dek renklendirmesi böylece hata yapmamı önlüyor. Dallanmanın nasıl olduğunu kolayca anlamamı sağlıyor.
matlab'a giriş
matlabde kafanıza bişi takılıyosa
help bişi bişi yazın o konu hakkında bilgi gelecektir.
matlabın açılımı matrix laboratory dir, matrisler üzerine kurmuşlar programı. programın babası da elektrik mühendisi ve matematikçiymiş.
yani sen bir sayı girdiğinde o bunu matris olarak algılıyor. matris işlemlerini de kolaylaştırıyor.
ama öncelikle farklı olan matematiksel işaretleri gösterelim:
* çarpma
/ bölme
^ üs alma 2^3=8 gib
pi yazınca pi sayısının aslına yakın yuvarlanmış bir sayı gelir.i
virgülden sonraki sayıları göstermek için nokta kullanılır.
| bu işaret mantıksal ifadelerde işe yarıyacak ben c çalışırken bulmam baya bi zaman almıştı >< a="rand(4,4)" a="randn(3,3)" x="3+4i" x="3+4j" ans="0,9273" x="3-4i)">> a=rand(4,4)
a =
0.9355 0.0579 0.1389 0.2722
0.9169 0.3529 0.2028 0.1988
0.4103 0.8132 0.1987 0.0153
0.8936 0.0099 0.6038 0.7468
şimdi tersini alalım:
>> inv(a)
ans =
-1.5054 3.6825 -1.4860 -0.4013
5.3255 -7.0376 3.9063 -0.1473
-20.0637 22.9531 -8.5486 1.3769
17.9531 -22.8718 8.6384 0.7080
determinantı:
>> det(a)
ans =
-0.0154
transpozesi:
>> a'
ans =
0.9355 0.9169 0.4103 0.8936
0.0579 0.3529 0.8132 0.0099
0.1389 0.2028 0.1987 0.6038
0.2722 0.1988 0.0153 0.7468
özdeğer bulma:
>> eig(a)
ans =
1.6101
-0.0489
0.3363 + 0.2878i
0.3363 - 0.2878i
şeklinde olur.
polinom eşleniğini bulmak için
p=poly(a)
p =
1.0000 -2.2338 1.1673 -0.2529 -0.0154
buraki sayılar polinomun katsayılarıdır.
x^4-2.2338x^3+1.1673x^2-02529x-0.0154 anlamındadır.
polinomun köklerini bulma:
>> roots(p)
ans =
1.6101
0.3363 + 0.2878i
0.3363 - 0.2878i
-0.0489
özdeğerle aynı olduğu görülür.
dizi oluşturma
>> x=1:5
x =
1 2 3 4 5
0,5er artımla dizi oluşturma:
>> x=1:0.5:5
x =
Columns 1 through 7
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000
Columns 8 through 9
4.5000 5.0000
y=x^3 olmaz x kare matris olmadığı için sorun çıkar. elemanter çarpım için
y=x.^3 '.' kullanılır.
5 Haziran 2007 Salı
kurallarım
2-hayvanlara zarar vermeyin. topunuzu keserim.
3-içeceğime dokunmayın.
4-bilimi nerde kullanıcaz zaten bunları deyip küçümsemeyin. en azından yanımda.
5-büyük harfle konuşmayın.
6-zeki olduğunuzu düşünmeyin. elbet daha zekisi çıkar.
7-aptallaşmayın.
8-yüzünüze aşırı makyaj yapmayın. aşırı jöle de sürmeyin.
9-dünyayı takmıyorum deyip imaj yapmayın takmayan adam imajı da ***lemez kendini de.
10-adam gibi için.
11-denizde yüzün, işemeyin.
12-bana inanın.
13-gözlerinizi sigarayla yakmaya çalışmayın.
python kitabından notlar I
3. Bölüm:
>>> a=8
>>> a=a+22
>>> a
30
burada a ya a+22 ifadesi atanmıştır.
>>> c="çağdaş"
>>> c
'\xc3\xa7a\xc4\x9fda\xc5\x9f'
>>> print c
çağdaş
cümle değişkenlere Türkçe karakter atarken sorun çıkmıyor sadece python onu nasıl algıladığını belirtiyor. print c yazınca olması gerektiği gibi görünüyor.
>>> merhaba="Adana'ya ilk gelişiniz mi?"
>>> print merhaba
Adana'ya ilk gelişiniz mi?
kesme işaretiyle ayırmamız gereken bir yer olduğu için, en dışa tırnak işareti koyduk.
>>> arkadasim='"Burada dalmak çok güzel olur baksana cam gibi yukardan bakınca dip görünüyor" dedi.'
>>> print arkadasim
"Burada dalmak çok güzel olur baksana cam gibi yukardan bakınca dip görünüyor" dedi.
Burada alıntı yapmamız gerekti ve en dışa kesmeleri koyduk.
>>> a=9
>>> b="5"
>>>
>>> a=3
>>> b="9"
>>> c=a+b
Traceback (most recent call last):
File "
c=a+b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
buradaki hata
>>> c=a+int(b)
>>> print c
12
yada
>>> c=str(a)+b
>>> print c
39
şeklinde çözülür.
int fonksiyonu cümle değerlerini tamsayıya çevirmek için kullanılır.
>>> int("765")
765
noktalı değerlerde float kullanılır.
>>> float("383.2")
383.19999999999999
str fonksiyonu ise ondalık veya tam sayıları cümle (string) değerlerine çevirmemizi sağlar.
>>> str("234")
'234'
>>> str(1321)
'1321'
>>> str(123.45)
'123.45'
>>> a=14
>>> a.__str__()
'14'
a.__str__() tarzı işlemler nesne modelinde kullanılır.
len() cümlenin uzunluğunu verir.
>>> len("Nasılsın komşu?")
18
>>> "Nasılsın komşu?".__len__()
18
Türkçe karakterlerin 2 olarak değeri olduğunu gördüm.
listeler
>>> p=['ysa', 'perl', 'ga']
>>> p[1]
'perl'
>>> p[:]
['ysa', 'perl', 'ga']
>>> p
['ysa', 'perl', 'ga']
>>> p[0]; p[2]
'ysa'
'ga'
>>> p=p+['pascal']
>>> p
['ysa', 'perl', 'ga', 'pascal']
>>> p[-1]
'pascal'
>>> p[-3]
'perl'
>>> p[1:3]
['perl', 'ga']
>>> p[1:2]
['perl']
>>> p[0:3]
['ysa', 'perl', 'ga']
>>> p.append('frp')
>>> p
['ysa', 'perl', 'ga', 'pascal', 'frp']
listeler birer nesnedir, nesnelerin özelliklerini görmek için dir(nesne) komutu kullanılır.
>>> p=p+['perl']
>>> p
['ysa', 'perl', 'ga', 'pascal', 'frp', 'perl']
>>> p.count('perl')
2
count() bir listedeki bir elemanın kaç tane bulunduğunu verir.
>>> p.extend(['common lisp','fortran'])
>>> p
['ysa', 'perl', 'ga', 'pascal', 'frp', 'perl', 'common lisp', 'fortran']
extend() 'le iki liste toplanır.
index() listedeki bir elemanın yerini verir. eğer birden fazla varsa ilk konumunu verir. olmayan bir elemanı sorgularsanız hata verir.
['ysa', 'perl', 'ga', 'pascal', 'frp', 'perl', 'common lisp', 'fortran']
>>> p.index('perl')
1
insert() listenin istenen yerine ekleme yapmak için kullanılır.
>>> p.insert(3,'scheme')
>>> p
['ysa', 'perl', 'ga', 'scheme', 'scheme', 'pascal', 'frp', 'perl', 'common lisp', 'fortran']
pop() listenin son elemanını siler.
>>> p.pop()
'fortran'
>>> p
['ysa', 'perl', 'ga', 'scheme', 'scheme', 'pascal', 'frp', 'perl', 'common lisp']
remove() eleman silmek için kullanılır. birden fazla varsa o elemandan ilkini çıkrarır.
>>> p.remove('perl')
>>> p
['ysa', 'ga', 'scheme', 'scheme', 'pascal', 'frp', 'perl', 'common lisp']
reverse() , diziyi ters çevirir.
>>> p.reverse()
>>> p
['common lisp', 'perl', 'frp', 'pascal', 'scheme', 'scheme', 'ga', 'ysa']
sort() listenizi sayılardan başlamak üzere alfabetik olarak sıralar.
['common lisp', 'perl', 'frp', 'pascal', 'scheme', 'scheme', 'ga', 'ysa']
>>> p=p+[16, 233]
>>> p
['common lisp', 'perl', 'frp', 'pascal', 'scheme', 'scheme', 'ga', 'ysa', 16, 233]
>>> p.sort()
>>> p
[16, 233, 'common lisp', 'frp', 'ga', 'pascal', 'perl', 'scheme', 'scheme', 'ysa']
len() listenizin kaç elemandan oluştuğunu bulursunuz
>>> len(p)
10
>>> p.__len__()
10
listeyi tamsayıyla çarpma listenin ardarda yazılmasıdır.
>>> x=['y','z']
>>> x*3
['y', 'z', 'y', 'z', 'y', 'z']
>>> x
['y', 'z']
yaptığımız işlemde x'i 3 le çarptık ama x'e başka bir değer atamadık. liste toplamında da bu böyledir.
>>> x
[1, 3, 5]
>>> y=x
>>> y.append(7)
>>> x
[1, 3, 5, 7]
>>> y
[1, 3, 5, 7]
buradali y=x x'e y etiketinin verildiğidir. ikisi ayrı nesneler olmuyor. onun için y'yi x den ayrıca kopyalamak gerekir.
>>> import copy
>>> x=[1,3,5]
>>> y=copy.deepcopy(x)
>>> y.append(7)
>>> y
[1, 3, 5, 7]
>>> x
[1, 3, 5]
şeklinde sorunumuz çözülür.
Tüpler listeye benzer ama içerikleri değiştirilemez. Tüpün elemanları parantez içerisinde sıralanır.
4 Haziran 2007 Pazartesi
python'a giriş
son sürümü şimdilik 2.5.1 dir. küçük bişidir.
buradan indirebilirsiniz..
linuxlarda hazır gelmektedir konsola python yazın gelicektir. ancak idle adında editörü de mevcuttur. ben ubuntu kullanıyorum ve kurduğumda idle yoktu, paket yöneticisinden kolayca yükledim. windows sürümünde dökümanları ve idle'yla birlikte gelmektedir.
yükleme işlemi bittikten sonra konsola idle yazın gelicektir. (uygulamalar>programlama>idleden de açabilirsiniz ama konsoldan açmak kadar sağlıklı olmadığı tecrübe edilmiştir)
karşımıza aşağıdaki gibi bir pencere gelmesi lazım.
şimdi ilk işimiz yazılımın kutsal olayını gerçekleştirmek.
>>>print "merhaba, dünya!"
yazın.
>>> 1 + 1
2
>>> a=3
>>> b=5
>>> a*3
9
>>> a,b = 5,20
>>> a+b
25
direkt x=10 gibi tanımlamalar yapabilirsiniz. yada a,b örneğinde olduğu gibi iki değişkeni de aynı anda tanımlayabilirsiniz.
>>> u=v=d=11 şeklinde de tanımlama yapabilmeniz mümkün.
>>> type(3.2)
>>> type("asasasas")
>>> type(33)
şekinde verilerin tipini öğrenebiliriz.
type fonksiyonu harf karakterleri direkt tanımaz hata verir. bu yüzden direkt yazmak yerine onları da tanımlayabiliriz. evet sırf zevk için yapabiliriz bunu.
>>> asasas= "epoke pythonda da mı var?"
>>> print asasas
epoke pythonda da mı var?
>>> type(asasas)
virgüllü değerler:
>>> 7/3
2
veya
>>> 5/6
0
yazarsak virgülden sonrasını hiç tanımadığını görürüz. virgüllü sayıları elde etmek için
>>> 7.0/3
2.3333333333333335
>>> 5/6.0
0.83333333333333337
şeklinde işlemlerimizi yapabiliriz.
idle' de yazdığınız betikleri direkt kaydedemezsiniz. çünkü orası etkileşimli bir ortamdır ve yazdıklarınız python tarafından anında yorumlanır.
sorunu çözmek çok basit, menüden File>New window u seçip oraya yazarsınız ve orada yazdıklarınızı kaydedip daha sonra tekrar çalıştırabilirsiniz.
şimdi değişken atamalardan devam edelim.
değişkenimizi atarken (kilo=5 gibi) karakterler arasında boşluk bırakmamalıyız onun yerine _ altçizgi kullanabiliriz.
dikkat etmemiz gereken diğer bir nokta da bazı anahtar kelimelerin değişken adı olarak kullanılamaması.
29 tane anahtar kelime vardır:
and else import raise
assert except in return
break exec is try
class finally lambda while
continue for not yield
def from or
del global pass
elif if print
Matematiksel ifadelerde öncelik parantez içlerinindir. Daha sonra üslü ifadeler gelir. Pythonda üslü ifadeler a**b şeklinde gösterilir. Matlab'de kullanılan ^ işareti kullanılmaz. o işaret iki sayının farkının mutlak değerini elde etmek için kullanılır. Üslü ifadelerden sonra çarpım (*) ve bölüm (/) işlemleri aynı öncelik sırasına sahiptirler. Bu iki işlemden sonra da toplama ve çıkarma gelir.
Karakterlerden oluşan elemanlar kendi aralarında toplanabilir, bu yan yana dizilmeleri şeklinde olur. Karakter elemanı bir sayıyla çarpılırsa ardarda çarpıldığı sayı kadar yazdırılır. Ancak karakter ve sayılar arasında toplama çıkarma ve ölme yapılamaz.
>>> a="Ali"
>>> b=" ata"
>>> c=" bak."
>>> print a+b+c
Ali ata bak.
>>> "Ali bak"*3
'Ali bakAli bakAli bak'
>>> "Ali bak. "*5
'Ali bak. Ali bak. Ali bak. Ali bak. Ali bak. '
Klavye girişleri:
Programınızda kullanıcıdan bilgi almak veya bazı fonksiyonların değerlerini kullanıcıdan istemek için girdi istenebilir. Pythonda input ve raw_input fonksiyonlarıyla bu girişler yapılabilir. input sayısal değerler için raw_input ise karakter girişi iin kullanılır. raw_input fonksiyonunda Türkçe karakterler sorun çıkarmaktadır.
>>> k=raw_input('bir cümle giriniz:')
bir cümle giriniz:Merhaba
>>> k
'Merhaba'
>>> l=input('bir sayı giriniz')
bir sayı giriniz148
>>> l
148
Kodunuzun neresinde hangi işlemleri yaptığınızı hatırlamak için yada başkaları tarafından kolay anlaşılır olması için # karakteri ile yorumlar koyabilirsiniz.
>>> #yorumların programda etkisi yoktur.