Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: Cemre. - 22 Mayıs 2014, 20:16:56

Başlık: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 22 Mayıs 2014, 20:16:56
Bir ödevim var ve 3. derece bir polinomun Newton-Rapshon yöntemi uygulayan Pascal dili ile yazılmış bir programla iteratif olarak çözülmesi isteniyor.

(http://s12.postimg.cc/qv2xkzjp9/Ekran_Al_nt_s.png)

Burada bahsedilen jakobiyen matrisi hakkında pek bir bilgi bulamıyorum, nasıl oluşturulacağı konusunda biraz yardımcı olabilir misiniz?
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 23 Mayıs 2014, 23:38:27
Şu matrisin yazımı konusunda yardımcı olabilecek biri yok mu?
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: z - 23 Mayıs 2014, 23:45:48
Baslangic icin asagidaki sayfa isini gormezmi?

http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant (http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant)
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 23 Mayıs 2014, 23:59:45
Hocam sanırım olay şu kısımdan ibaret,

(http://upload.wikimedia.org/math/d/a/d/dadc7325115abf324059532c6f049a38.png)

Ama, 3.derece bir polinom, örneğin kökleri x1=1, x2=2, x3=3 olan, F(x)=a(x-1)(x-2)(x-3) bir polinomdan bahsederken bu matris tam olarak nasıl yazılacak, sanırım matematik özürlüyüm :(
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: z - 24 Mayıs 2014, 00:05:49
Universitede bu matrisle ugrastigimizi hatirlamiyorum.

Verdigim linkten anladigim kadariyla fazla karisik degil.

3 degiskenli uc fonksiyonun var.

Bunlar

f1(x,y,z)
f2(x,y,z)
f3(x,y,z)

3x3 matrisde;

1 satir 1 sutuna @f1/@x
1 satir 2 sutuna @f1/@y
1 satir 3 sutuna @f1/@z

2 satir 1 sutuna @f2/@x
2 satir 2 sutuna @f2/@y
2 satir 3 sutuna @f2/@z

3 satir 1 sutuna @f3/@x
3 satir 2 sutuna @f3/@y
3 satir 3 sutuna @f3/@z

turevlerini yerlestiriyorsun.

Boylece Jacobian matrisi elde ediyorsun.

Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 24 Mayıs 2014, 00:12:39
Hocam elimizde tek bir fonksiyon varken bunu nasıl 3x3 matrise yazacağız ki
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: z - 24 Mayıs 2014, 00:15:20
2 fonksiyon daha verilmesi lazim.

Diger iki fonksiyonu sifir alsan ne olur?

Bildigimden degil de samata yapiyorum.

Dedigim gibi yazarsan 1 satir 3 sutunlu bir matris olur.

Senin hic mi sinif arkadasin yok? Onlar ne yapmislar bu konuda?

Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 24 Mayıs 2014, 00:17:19
Hocam ödevi alalı çok olmadı insanlar uğraşmamış bile, pazartesi gününe kadar da ders yok zaten, newton raphson ve jakobiyen diye google'da aratınca da pek bir şey çıkmıyor açıkçası, şaşırdım kaldım..
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tagli - 24 Mayıs 2014, 10:10:25
Bu ödev robotik dersi ile mi ilgili? Robot ters kinematiğinin sayısal yöntemlerle çözülmesinde buna benzer bir şeyler vardı. Orada Jacobian, robot ucunun konum ve yöneliminin eklem açılarına göre türevini gösteriyordu. Sayısal çözümde de J'yi sayısal olarak hesaplamak mümkün. Mevcut eklem açılarının biraz eksiği biraz fazlası ile ikişer kez düz (ileri) kinematik çözülüyor ve buradan J hesaplanabiliyor.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 24 Mayıs 2014, 15:40:41
Yok hocam, ders sayısal çözümleme dersi, hatta ödevin linki de şurada; http://elektrik.kocaeli.edu.tr/dosyalar/duyurular/Say%C4%B1sal%20%C3%87%C3%B6z%C3%BCmleme%20D%C3%B6nem%20%C3%96devi%20(1).pdf (http://elektrik.kocaeli.edu.tr/dosyalar/duyurular/Say%C4%B1sal%20%C3%87%C3%B6z%C3%BCmleme%20D%C3%B6nem%20%C3%96devi%20(1).pdf)
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tagli - 24 Mayıs 2014, 16:23:09
Mantık aynı aslında. Robotikte iş daha zor çünkü normal Jacobian kullanmayıp, 12x6'lık benzer görev gören bir matrisle işlem yapman gerekiyor. Onun da tersi alınmadığı için yalancı-ters alma işlemi yapılıyor.

Robotikte, elinde bir polinom yok, bir transformasyon matrisi var ve lineer değil. Ama sonuçta bu matrisi kullanarak 6 adet eklem açısı için uç noktanın konum ve yönelimini hesaplayabiliyorsun. Ters kinematik probleminde de, elinde uç noktanın bilgisi var ama bu 6 açı yok. Yani elinde 12 elemanlı bir transformasyon matrisi var ve bunu bir şekilde elde etmeye çalışıyorsun. Elinde olan şey bu matrisin sayısal değeri (yani ulaşmaya çalıştığın uç noktaya denk gelen), ancak bu değerler 6 adet açının çok karmaşık bir fonksiyonu. Yine Newton metodu ile çözülebiliyor. Açılara rastgele bir başlangıç değeri veriyorsun. Buradan J'yi hesaplaman gerek. Nümerik olarak hesaplamak için, her seferinde sadece bir açıyı biraz değiştirerek düz kinematik ile bu transformasyon matrisinin (T diyelim) 12 elemanını elde ediyorsun. Sonra bu 12 elemanın o açıya göre nasıl değiştiğini buluyorsun ki bu da zaten nümerik türev oluyor. Mesela açı_1 0.2 derece değişince 12 elemandan biri olan konumun x koordinatı 15 cm değişmiş. Bu durumda J'de o eleman 15/0.2 oluyor. Tabi buradaki J 12x6 oluyor ve yukarıda bahsettiğim yalancı-ters alma işlemi gerekiyor.

Senin sorunda transformasyon matrisi yerine bir polinom var. J'yi hesaplamak için 3 rastgele x değeri ile başlayıp, her seferinde bunlardan birini biraz değiştirerek polinomun değerini hesaplayacaksın. Mesela x'lerin [10,20,30] ise [11,20,30] için hesaplayacaksın. 3 açı için bunu yaptığında J'nin ilk satırını elde edersin. Ama sorun şu: Arkadaşların da bahsettiği gibi burada J 1x3 olur. 3x3 bir J'nin oluşması için 3 fonksiyon gerekir. Ancak, yukarıda da bahsettiğim gibi, yalancı-ters alma (pseudo inverse) ile kare olmayan bir J ile de işlem yapabilirsin.

Şu dokümanı (http://www.google.com.tr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEAQFjAD&url=ftp%3A%2F%2F164.41.49.96%2FUsuarios%2FClaudia%2FMESTRADO%2FMESTRADO_DISCIPLINAS%2F02_2008%2FFUNDAMENTOS_DE_ROBOTICA%2Flivros%2FRobotics%2520and%2520Automation%2520Handbook-2005%2F1804_C03.pdf&ei=_p2AU9yjPMLAO6yrgLgM&usg=AFQjCNFuWzk_2KQGXw2nLhbxGtOxPc5MRQ&sig2=6a511NX1T6Tj39Gp8G1kfw&bvm=bv.67720277,d.ZWU&cad=rja) incele. Ben robotikle ilgili sorunu bundan çalışarak çözmüştüm. Bölüm 3.4'te nümerik yöntemleri anlatmış, senin bakman gereken yer burası. Sonunda örnek C kodu da var (gerçi bana birkaç yeri eksik geldi, ben oradan faydalanarak kendim sıfırdan yazmıştım).
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: speak48 - 24 Mayıs 2014, 16:41:55
paskal ne arkadaş
ya c ile yaptır yada matlabla
biz matlabda yapıyorduk
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 24 Mayıs 2014, 19:44:52
Hocam pascal ortak dersti c ve matlab seçmeli, neyse..
Arkadaş yazdı bugün, matematik kısmını hallettim felan dedi, bakalım o ne düşünmüş.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tagli - 24 Mayıs 2014, 22:14:47
Bu arada, yukarıda J'nin hesaplanması için yazdığım sayısal yönteme aslında senin sorunda gerek yok çünkü elde oldukça sade bir polinom var ve bunun her bir değişkene göre rahatlıkla kısmi türevini alabilirsin. Ama ödevden anladığım kadarıyla, senin hoca J'nin sayısal olarak hesaplanmasını istemiş. Sen yine de bir sor teyit almak için, gerekmiyorsa boşa uğraşma.

Elbette J'nin hesaplanması iterasyonun sadece bir adımı. Ondan sonra formülden yola çıkılarak yapılacak hesap zaten sayısal bir hesap, o ayrı konu.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: picusta - 25 Mayıs 2014, 09:50:59
Alıntı yapılan: z - 24 Mayıs 2014, 00:15:20
2 fonksiyon daha verilmesi lazim.

Diger iki fonksiyonu sifir alsan ne olur?

Bildigimden değil de samata yapiyorum.

Dedigim gibi yazarsan 1 satir 3 sutunlu bir matris olur.

Senin hic mi sinif arkadasin yok? Onlar ne yapmislar bu konuda?
Z hocam sasirttiniz beni.
Fonksyon'un tek degiskenli oldugunu nasil varsayarsiniz?
Degisken saf reel degil, basbari sizin orada, Z domain'inde.
Yani 2 boyutlu degisken (2 degisken) ve 6 bilinmeyen var.
Bunlar ister reel - hayali, ister euler olarak yazilsin.
3. dereceden polinomun 3 tane Z'de kökü var.
F(Z) =  (Z - Z1)(Z - Z2)(Z - Z3)
örn :
F(x,y) = (x+iy  - (x1+iy1))(x+iy  - (x2+iy2))(x+iy  - (x3+iy3))
...
Buradan devam ederseniz 2 degiskenli 6 bilinmeyenli 3. dereceden polinom çikar.
çözmek için sonrasini bilmiyorum, belki x,y degil euler kullanilmasi gerekir, oradan çözülmesi için "limited development" kullanilmalidir.
Jakobiyenlerle en son ugrastigimdan beri 10 yil geçti. O zamanda da konuya 100% hakim degildim, simdi daha beter.


Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tesla Coil - 26 Mayıs 2014, 05:16:46
Soruna binaen aşağıdaki dökümanı hazırladım umarım faydalı olur. Adımları tekrarlıyarak istediğin kadar iterasyon yapabilirsin ben sadece 1. iterasyon için yaptım. Başarılar

https://www.dropbox.com/s/y3gdvl7z720bfya/3.mertebejacop.pdf (https://www.dropbox.com/s/y3gdvl7z720bfya/3.mertebejacop.pdf)

http://s3.dosya.tc/server23/dpzAMk/3.mertebejacop.pdf.html (http://s3.dosya.tc/server23/dpzAMk/3.mertebejacop.pdf.html)




Kaynaklar
[1] F. M. Nuroğlu Power System Analysis ders notları,
[2] Power System Analysis – P.S.R. Murty
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 26 Mayıs 2014, 21:47:37
Hocam uğraşmışsınız gerçekten çok teşekkürler...

Ben de şöyle birşeye ulaştım sonuç olarak, ancak sonuçtan bayağı bir uzaklaşıyorum.. Örneği bir kontrol edebilecek olan var mı?

program saycoz;
uses crt;
type MATRIS = array [1..20,1..20] of real;
Var A0,A1,A2,A3,X1b,X2b,X3b,f1,f2,f3:real ;
n,i,j,k,q,u,M:integer;
W,Xy,Xc,B:MATRIS;
p,t,det:real;
Label 1;



begin
Writeln('Hesaplanacak polinom: A0x^3 + A1x^2 + A2x + A3');
write('A0=');
readLn(A0);
write('A1=');
readLn(A1);
write('A2=');
readLn(A2);
write('A3=');
readLn(A3);

A1:=A1/A0;
A2:=A2/A0;
A3:=A3/A0;

writeln('Baslangic degerleri,');
write('X1=');
readLn(X1b);
write('X2=');
readLn(X2b);
write('X3=');
readLn(X3b);
writeln('Kaç iterasyon yapılacak?');
readLn(u);

for q:=1 to u do
begin

f1:=A1+X1b+X2b+X3b;
f2:=A2-(X1b*X2b)-(X1b*X3b)-(X2b*X3b);
f3:=A3+(X1b*X2b*X3b);

W[1,1]:=1;
W[1,2]:=1;
W[1,3]:=1;
W[2,1]:=-X2b-X3b;
W[2,2]:=-X1b-X3b;
W[2,3]:=-X2b-X1b;
W[3,1]:=X2b*X3b;
W[3,2]:=X1b*X3b;
W[3,3]:=X2b*X1b;

N:=3;M:=3;det:=1;
B[1,1]:=1; B[1,2]:=0; B[1,3]:=0;
B[2,1]:=0; B[2,2]:=1; B[2,3]:=0;
B[3,1]:=0; B[3,2]:=0; B[3,3]:=1;


for q:=1 to 3 do begin  //ana döngü

for j:=1 to 3 do begin  //inverse baslangıc
B[j,j]:=1;
t:=W[j,j];
det:=det*t;
             for k:=1 to N do begin
             W[j,k]:=W[j,k]/t;
             B[j,k]:=B[j,k]/t;
             end;
             for i:= 1 to M do begin
             p:=W[i,j];
             if i=j then goto 1;
             for k:=1 to 3 do begin
             B[i,k]:=B[i,k]-p*B[j,k];
             W[i,k]:=W[i,k]-p*W[j,k];
             end;
1:end;
end;
for i:=1 to 3 do begin
for j:=1 to 3 do writeln('inv',i,j,' ',B[i,j]:8:4);
end;
//inverse sonu

Xc[1,1]:=(B[1,1]*f1)+(B[1,2]*f2)+(B[1,3]*f3);
Xc[2,1]:=(B[2,1]*f1)+(B[2,2]*f2)+(B[2,3]*f3);
Xc[3,1]:=(B[3,1]*f1)+(B[3,2]*f2)+(B[3,3]*f3);

Xy[1,1]:=((X1b)-(Xc[1,1]));
Xy[2,1]:=((X2b)-(Xc[2,1]));
Xy[3,1]:=((X3b)-(Xc[3,1]));

X1b:=Xy[1,1];
X2b:=Xy[2,1];
X3b:=Xy[3,1];
writeLn(q,'inci iterasyon sonucu: x1=',X1b);
writeLn(q,'inci iterasyon sonucu: x2=',X2b);
writeLn(q,'inci iterasyon sonucu: x3=',X3b);
end;
end;
readln;
end.


polinomu A0=1 A1=-6 A2=11 A3=-6 giriyoruz, başlangıç değerleri X1=0.5 X2=1.5 X3=2.5 olacak şekilde, zaten köklerin de x1=1,x2=2,x3=3 olarak gelmesi gerekiyor ancak bizim değerler 3üncü iterasyona kadar hesapladığımda 20küsürlere fırlıyor.. Gerçekten beynim dondu hata bulamıyorum kim bilir kaç kez kontrol ettim :(

Ha bir de bu 3iterasyondan fazlasında sapıtıyor, bu pascal ile ilgili bir durum olabilir mi acaba?
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tagli - 26 Mayıs 2014, 22:20:05
Daha önce sözü geçen bulanık noktaları netleştirdin mi?

1) Kaç adet fonksiyon olacak, 1 mi 3 mü? 1x3 matrisin tersini normal yöntemle alamazsın.
2) J analitik türev alınarak mı hesaplanacak yoksa sayısal türev alınarak mı?

Çözümün, başlangıç değerlerine bağlı olarak yakınsamama ihtimali de var. Eğer birden fazla çözüm varsa, hangisine yakınsayacağı yine başlangıç değerlerine bağlı.

Ayrıca, genelde iterasyon sayısı önceden verilmez. Sadece bir üst sınır belirlenir. İterasyonlarda bulunan değerler birbirine yakın çıkmaya başladıklarında işlem kesilir.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tesla Coil - 26 Mayıs 2014, 22:37:49
Yolladığım dosyayı inceledin mi? Pascalla daha önce hiç uğraşmadım ama değişken tanımlamaların çok karmaşık geldi.

Program tam olarak ne yapıyor anlamadım. Matematik konusunda anlamadığın bir nokta varsa yardımcı olayım. Eğer epsilon gibi bir hata opsiyonu tanımlıyacaksan newton raphsonda genelde ∆x0 olarak tanımlanan hata değerini kullanabilirsin ki genelde ona bakarlar. ∆x0 ve ∆x1 arasındaki farka bakılır diye biliyorum 2 iterasyon arasındaki farka değil.

Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 26 Mayıs 2014, 23:02:19
Hocam fonksiyon sayısı 3, ben yanlış anlamışım zaten direk polinomun değil, programda da hesaplandığı gibi f1 f2 f3'ün kısmi türevleri alınacak, bu noktada sıkıntı yok. Türevleri analitik yolla hesapladık zaten programda da görülüyor. Başlangıç değerlerini hiç değiştirmedim o konuda haklı olabilirsiniz hemen deniyorum.. Aslında bir epsilon değeri belirleyip iki iterasyon sonucu arasındaki farkın epsilondan büyük küçük kontrolü yaparak döngüden çıkartmamız gerekir ama, böyle bir şey istenmiyor bildiğim kadarıyla.

mesaj birleştirme:: 26 Mayıs 2014, 23:40:34

Evet hocam değişkenler biraz karmaşık, arkadaşın tanımladığı yerden devam ettirmemden kaynaklı ben de baya bir zorluk çektim. Ancak matematiksel işlemler düşünülürse neyin ne olduğu anlaşılıyor. Ben direk sorayım daha kolay olur sanırım.

for j:=1 to 3 do begin  //inverse baslangıc
B[j,j]:=1;
t:=W[j,j];
det:=det*t;
             for k:=1 to N do begin
             W[j,k]:=W[j,k]/t;
             B[j,k]:=B[j,k]/t;
             end;
             for i:= 1 to M do begin
             p:=W[i,j];
             if i=j then goto 1;
             for k:=1 to 3 do begin
             B[i,k]:=B[i,k]-p*B[j,k];
             W[i,k]:=W[i,k]-p*W[j,k];
             end;
1:end;
end;
for i:=1 to 3 do begin
for j:=1 to 3 do writeln('inv',i,j,' ',B[i,j]:8:4);
end;
//inverse sonu


matris tersi alan kod parçacığı, acaba hatalı mı değil mi? (B matrisi birim matris, W matrisi jakobiyen matris)

Xc[1,1]:=(B[1,1]*f1)+(B[1,2]*f2)+(B[1,3]*f3);
Xc[2,1]:=(B[2,1]*f1)+(B[2,2]*f2)+(B[2,3]*f3);
Xc[3,1]:=(B[3,1]*f1)+(B[3,2]*f2)+(B[3,3]*f3);

Xy[1,1]:=((X1b)-(Xc[1,1]));
Xy[2,1]:=((X2b)-(Xc[2,1]));
Xy[3,1]:=((X3b)-(Xc[3,1]));


burada, B yani Jakobiyen matrisin tersi, F matrisiyle çarpılıyor daha sonra başlangıç değerinden tek tek çıkarılıyor ve çıkan sonuç, Xy sonuç değişkenine atanıyor, o da zaten her iterasyonun sonucu ve bu sonuc Xb değerlerine yani başlangıç değerlerine tekrar atanıp başa dönülüyor böylece bir iterasyon tamamlanmış oluyor.. Benim gördüğüm matematik kısmın gösterdiğiniz kısımla aynı olduğu ama bir problem var ki sonuç alakasız çıkıyor :/

--------
Hocam bir de başlangıç değerlerini 1,2,3 olarak verirsem yani kökleri direk yazarsam her iterasyonun sonucu 1,2,3 olarak geliyor, yani sanki matematik kısmında da bir sorun yok, acaba sayısal türev aldırarak mı çözmeli jakobiyen matrisi?
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tesla Coil - 26 Mayıs 2014, 23:25:23
Ayrıca 1. iterasyonda bulduğun değer 2. iterasyonunun başlangıç değeri.

Her yeni iterasyonda en son bulduğun sonucu başlangıç değer olarak kullanmalısın. İlk girilen başlangıç değerlerin sadece 1. iterasyon için 2. iterasyondaki başlangıç değerlerin 1. iterasyonun sonucları olması gerekiyor buna dikkat ediyomusun?
x1= x0+∆x0
x2=x1+∆x1 diye devam ediyor.


mesajı 2 saat önce girdim hala moderatör onaylicak.!!

edit2: Mesajı kaç saat önce girdiğimi hatırlamıyorum. Moderatör beyfendi onaylamadı. Özelden yazıyım dedim sanırsam böyle bir yetkimde yokmuş.

Gelelim konumuza;

J matrisin her iterasyonda değişecek.
1. iterasyonda başlangıç değerlerin var ve bunu j de kullanıyosun
2. iterasyonda 1. iterasyonun sonuçlarını kullanırsın.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tesla Coil - 26 Mayıs 2014, 23:26:13
Alıntı yapılan: Tesla Coil - 26 Mayıs 2014, 23:25:23
Ayrıca 1. iterasyonda bulduğun değer 2. iterasyonunun başlangıç değeri.

Her yeni iterasyonda en son bulduğun sonucu başlangıç değer olarak kullanmalısın. Başlangıç değerlerin sadece 1. iterasyon için 2. iterasyondaki başlangıç değerlerin 1. iterasyonun sonucları olması gerekiyor buna dikkat ediyomusun??
x1= x0+∆x0
x2=x1+∆x1 diye devam ediyor.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tagli - 27 Mayıs 2014, 00:02:50
Pascal bilmediğimden olacak herhalde, kodu çözemedim. Zaten biraz da karışık yazılmış. Ben C'de matris tersi ve determinant almak için epey kod yazdığımı hatırlıyorum. Ama kodun uzun olması, büyük matrisler için de çalışabilecek genel bir kod yazmış olmamdan kaynaklanıyordu. 3x3 için kestirme yollar olabilir. Belki sendeki kod onlardan birini kullanıyordur. Ama bence, J'yi ve tersini ekrana bastır ve başka bir yazılımla tersinin doğru alınıp alınmadığını kontrol et. Daha sonra da matris çarpma ve toplama işlemlerini kontrol et.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 27 Mayıs 2014, 00:08:17
Dediğiniz gibi kontrol ettim hocam inverste sorun yokmuş..
Benim bir sorum olacak bu arada, şu F matrisi, yani Tesla hocamın dropbox'a attığı dökümandaki deltaC matrisi programın en başında verdiğimiz başlangıç değerleriyle hesaplanıp hep sabit mi kalacak yoksa her iterasyondan sonra aldığımız başlangıç değerleriyle tekrar mı hesaplanacak?

mesaj birleştirme:: 27 Mayıs 2014, 00:36:04

Sonunda oldu sanırım.. Hocam çok teşekkürler emekleriniz için, Tesla hocam hazırladığınız döküman için ayrıca teşekkürler..

Bu J matrisi beni öldürecekti bu gece.. Meğer J'yi bir kez hesaplayıp birdaha dokunmamak gerekiyormuş yada ben bayaa büyük bir hatanın içerisindeyim :D ancak ilk kez tam olarak kökleri buldurabildim ve başlangıç değerlerimi değiştirdiğimde de hiç şaşmadan buluyor köklerimi, bilmiyorum umarım son hali olur bu, gerçekten yordu çünkü.. Son kez bakar mısınız hocam doğru mudur J sabit mi kalacak??

program saycoz;
uses crt;
type MATRIS = array [1..20,1..20] of real;
Var A0,A1,A2,A3,X1b,X2b,X3b,f1,f2,f3:real ;
i,j,k,q,u:integer;
W,Xy,Xc,B:MATRIS;
p,t,det:real;
Label 1;



begin
Writeln('Hesaplanacak polinom: A0x^3 + A1x^2 + A2x + A3');
write('A0=');
readLn(A0);
write('A1=');
readLn(A1);
write('A2=');
readLn(A2);
write('A3=');
readLn(A3);

A1:=A1/A0;
A2:=A2/A0;
A3:=A3/A0;

writeln('Baslangic degerleri,');
write('X1=');
readLn(X1b);
write('X2=');
readLn(X2b);
write('X3=');
readLn(X3b);
writeln('Kaç iterasyon yapılacak?');
readLn(u);

det:=1;
B[1,1]:=1; B[1,2]:=0; B[1,3]:=0;
B[2,1]:=0; B[2,2]:=1; B[2,3]:=0;
B[3,1]:=0; B[3,2]:=0; B[3,3]:=1;

W[1,1]:=1;
W[1,2]:=1;
W[1,3]:=1;
W[2,1]:=-X2b-X3b;
W[2,2]:=-X1b-X3b;
W[2,3]:=-X2b-X1b;
W[3,1]:=X2b*X3b;
W[3,2]:=X1b*X3b;
W[3,3]:=X2b*X1b;

for q:=1 to u do begin  //ana döngü

f1:=A1+X1b+X2b+X3b;
f2:=A2-(X1b*X2b)-(X1b*X3b)-(X2b*X3b);
f3:=A3+(X1b*X2b*X3b);

for j:=1 to 3 do begin  //inverse baslangıc
t:=W[j,j];
det:=det*t;
             for k:=1 to 3 do begin
             W[j,k]:=W[j,k]/t;
             B[j,k]:=B[j,k]/t;
             end;
             for i:= 1 to 3 do begin
             p:=W[i,j];
             if i=j then goto 1;
             for k:=1 to 3 do begin
             B[i,k]:=B[i,k]-p*B[j,k];
             W[i,k]:=W[i,k]-p*W[j,k];
             end;
1:end;
end;
for i:=1 to 3 do begin
for j:=1 to 3 do writeln('inv',i,j,' ',B[i,j]:8:4);
end;
//inverse sonu

Xc[1,1]:=(B[1,1]*f1)+(B[1,2]*f2)+(B[1,3]*f3);
Xc[2,1]:=(B[2,1]*f1)+(B[2,2]*f2)+(B[2,3]*f3);
Xc[3,1]:=(B[3,1]*f1)+(B[3,2]*f2)+(B[3,3]*f3);

Xy[1,1]:=((X1b)-(Xc[1,1]));
Xy[2,1]:=((X2b)-(Xc[2,1]));
Xy[3,1]:=((X3b)-(Xc[3,1]));

X1b:=Xy[1,1];
X2b:=Xy[2,1];
X3b:=Xy[3,1];
writeLn(q,'inci iterasyon sonucu: x1=',X1b:5:3);
writeLn(q,'inci iterasyon sonucu: x2=',X2b:5:3);
writeLn(q,'inci iterasyon sonucu: x3=',X3b:5:3);
end;
readln;
end.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tagli - 27 Mayıs 2014, 00:52:13
Hem J'nin hem de F'nin her adımda, o adımın tahmini değişkenleri (x'ler) için yeniden hesaplanması gerekir.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 27 Mayıs 2014, 00:54:17
Evet hocam formüle bakıldığında öyle, ancak dediğiniz gibi yaptığımda olmuyor da olmuyor, böyle nedense oldu :'(

mesaj birleştirme:: 27 Mayıs 2014, 00:58:22

Hocam şuan hatayı farkettim, dediğiniz gibi oluyor, ben matrisin tersini ikinci kez hesaplarken birim matrisi yeniden B'ye eşitlemiyormuşum, şimdi oldu işte.. Tekrardan çok teşekkürler

mesaj birleştirme:: 27 Mayıs 2014, 01:09:46

Bu arada, son hali, belki birinin işine yarar...

program saycoz;
uses crt;
type MATRIS = array [1..20,1..20] of real;
Var A0,A1,A2,A3,X1b,X2b,X3b,f1,f2,f3:real ;
i,j,k,q,u:integer;
W,Xy,Xc,B:MATRIS;
p,t,det:real;
Label 1;



begin
Writeln('Hesaplanacak polinom: A0x^3 + A1x^2 + A2x + A3');
write('A0=');
readLn(A0);
write('A1=');
readLn(A1);
write('A2=');
readLn(A2);
write('A3=');
readLn(A3);

A1:=A1/A0;
A2:=A2/A0;
A3:=A3/A0;

writeln('Baslangic degerleri,');
write('X1=');
readLn(X1b);
write('X2=');
readLn(X2b);
write('X3=');
readLn(X3b);
writeln('Kaç iterasyon yapılacak?');
readLn(u);


for q:=1 to u do begin  //ana döngü (iterasyon işlemi)

det:=1;
B[1,1]:=1; B[1,2]:=0; B[1,3]:=0;
B[2,1]:=0; B[2,2]:=1; B[2,3]:=0;
B[3,1]:=0; B[3,2]:=0; B[3,3]:=1;

W[1,1]:=1;
W[1,2]:=1;
W[1,3]:=1;
W[2,1]:=-X2b-X3b;
W[2,2]:=-X1b-X3b;
W[2,3]:=-X2b-X1b;
W[3,1]:=X2b*X3b;
W[3,2]:=X1b*X3b;
W[3,3]:=X2b*X1b;


for j:=1 to 3 do begin  //inverse baslangıc
t:=W[j,j];
det:=det*t;
   for k:=1 to 3 do begin
   W[j,k]:=W[j,k]/t;
   B[j,k]:=B[j,k]/t;
   end;
   for i:= 1 to 3 do begin
   p:=W[i,j];
   if i=j then goto 1;
   for k:=1 to 3 do begin
   B[i,k]:=B[i,k]-p*B[j,k];
   W[i,k]:=W[i,k]-p*W[j,k];
   end;
1:end;
end;
writeLn('Jakobiyen matrisin tersi;');
for i:=1 to 3 do begin
for j:=1 to 3 do writeln(i,',',j,' ',B[i,j]:8:4);
end;
writeLn();
//inverse sonu

f1:=A1+X1b+X2b+X3b;
f2:=A2-(X1b*X2b)-(X1b*X3b)-(X2b*X3b);
f3:=A3+(X1b*X2b*X3b);

Xc[1,1]:=(B[1,1]*f1)+(B[1,2]*f2)+(B[1,3]*f3);
Xc[2,1]:=(B[2,1]*f1)+(B[2,2]*f2)+(B[2,3]*f3);
Xc[3,1]:=(B[3,1]*f1)+(B[3,2]*f2)+(B[3,3]*f3);

Xy[1,1]:=((X1b)-(Xc[1,1]));
Xy[2,1]:=((X2b)-(Xc[2,1]));
Xy[3,1]:=((X3b)-(Xc[3,1]));

X1b:=Xy[1,1];
X2b:=Xy[2,1];
X3b:=Xy[3,1];

writeLn(q,'.iterasyon','  X1=',X1b:5:3,'  X2=',X2b:5:3,'  X3=',X3b:5:3);
writeLn();
end;
readln;
end.
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Tesla Coil - 27 Mayıs 2014, 13:52:20
Dostum "acemi üye" sıfatında olduğum için yazdığım cevaplar gelmedi. Sanırım sen sorunlarını çözmüşsün pürüz var mı ?
Başlık: Ynt: Jakobiyen matrisi ve 3. derece polinom
Gönderen: Cemre. - 27 Mayıs 2014, 18:01:29
Şuan bir sıkıntı yok hocam, çok sağ olun tekrardan, sınıfın yarısı nasiplendi :P