Delphi 7-12 Bilinmeyenli 12 Denklem
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Delphi 7-12 Bilinmeyenli 12 Denklem
Merhabalar ismim Büşra
İnşaat Mühendisliği yüksek lisans öğrencisiyim. Danışman hocamızın bir dersi Delphi. Lisansımda da programlama derslerinde hep zorlanmışımdır. Şuanda da Delphi de çok zorlanıyorum. Nümerik formülleriyle çözüme ulaştırdığımız denklemleri delphiye dökmem gerekiyor. 4 Soru var toplamda bir noktaya kadar geliyorum ama sonra ne yapacağımı bilemiyorum.
Örneğin
Bir levha var elimizde bunun eni boyu ve levhayı kaça bölümlendireceğimiz hepsi değişken olacak.
Eni 3 mt Boyu 2.4 mt bir levha olsun
Sağdan soldan alttan ve üstten bu levhaya giren sıcaklıklarda değişken olacak.
Ve bu levha Dx=0,6 mt olarak bölümlendirilsin. Bölümlendirdiğim her noktadaki sıcaklıklar benden istenen oluyor.
Ben bunu Laplace denklemi yardımıyla çözüme ulaştırıyorum. Zaten bir dersimizde Nümerik hidrolik ve onun ödevi de elimizle çözmek. Fakat programa aktaramıyorum. En boy sıcaklıklar aralıklar bütün hepsini edit olarak açıyorum butona tıklayınca bana bilinmeyen nokta sayısını veriyor oraya kadar herşey tamam 12 bilinmeyen nokta sayısı oluyor. Bu 12 bilinmeyenin nümerik denklemlerini yazıp showmessage da çıkartabilir miyim ekrana? Memo da gösterebilir miyim? Başka değerler girilince başka bilinmeyen sayıları çıkacak örneğin 20. Burada tıkanıyorum ve ne yapacağımı bilemiyorum. Derste hoca çok ama çok az gösterdi 1300 sayfalık bir pdf verdi ve buyrun yapın dedi. Yardımcı olabilirseniz çok sevinirim. Şimdiden teşekkürler
İnşaat Mühendisliği yüksek lisans öğrencisiyim. Danışman hocamızın bir dersi Delphi. Lisansımda da programlama derslerinde hep zorlanmışımdır. Şuanda da Delphi de çok zorlanıyorum. Nümerik formülleriyle çözüme ulaştırdığımız denklemleri delphiye dökmem gerekiyor. 4 Soru var toplamda bir noktaya kadar geliyorum ama sonra ne yapacağımı bilemiyorum.
Örneğin
Bir levha var elimizde bunun eni boyu ve levhayı kaça bölümlendireceğimiz hepsi değişken olacak.
Eni 3 mt Boyu 2.4 mt bir levha olsun
Sağdan soldan alttan ve üstten bu levhaya giren sıcaklıklarda değişken olacak.
Ve bu levha Dx=0,6 mt olarak bölümlendirilsin. Bölümlendirdiğim her noktadaki sıcaklıklar benden istenen oluyor.
Ben bunu Laplace denklemi yardımıyla çözüme ulaştırıyorum. Zaten bir dersimizde Nümerik hidrolik ve onun ödevi de elimizle çözmek. Fakat programa aktaramıyorum. En boy sıcaklıklar aralıklar bütün hepsini edit olarak açıyorum butona tıklayınca bana bilinmeyen nokta sayısını veriyor oraya kadar herşey tamam 12 bilinmeyen nokta sayısı oluyor. Bu 12 bilinmeyenin nümerik denklemlerini yazıp showmessage da çıkartabilir miyim ekrana? Memo da gösterebilir miyim? Başka değerler girilince başka bilinmeyen sayıları çıkacak örneğin 20. Burada tıkanıyorum ve ne yapacağımı bilemiyorum. Derste hoca çok ama çok az gösterdi 1300 sayfalık bir pdf verdi ve buyrun yapın dedi. Yardımcı olabilirseniz çok sevinirim. Şimdiden teşekkürler
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Ornek bir soru yaz ve sonra cozumunu goster. Yasadigin skintilari cok guzel anlatmissin ama keske sadece soru ve cozumu yazsaymissin bu sekilde koda dokebilirdik. Bolumlendirdigin her noktadaki sicaklik isteniyrmus. Bu sicakligin nasil hesaplandiginin formulunu yazarsan kolayca delphi koduna donusturebiliriz.
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Örnek şu şekilde
Aşağıda verilen Laplace denklemi ile tarif olunan fiziksel olayları modellemede kullanılacak sayısal modeli oluşturunuz. Laplace denkleminin çözümünde merkezi öteleme fark formülü kullanılacaktır. Model delphi ortamında yazılacaktır.
∂²T/∂x²+∂²T/∂y²=0
Dediğim gibi bu laplace denkleminin çözümünü merkezi öteleme fark formülü ile ben elde ettim. Burada tüm değerler değişken olacak elimdeki bir adet örnek var 3e 2,4 genişliğinde levha. Sağından 100, Solundan 75, üstünden 300, altından 50 derece ısıtılıyor. Bu levhayı dx=dy=0,6 mt bölümlendirerek her noktadaki sıcaklık değerlerini bulunuz.
Her noktadaki sıcaklık değerlerinin formülü :
1. 4T1,1 = T0,1 + T1,2 + T2,1 + T1,0
2. 4T1,2 = T0,2 + T1,3 + T2,2 + T1,1
3. 4T1,3 = T0,3 + T1,4 + T2,3 + T1,2
4. 4T1,4 = T0,4 + T1,5 + T2,4 + T1,3
5. 4T2,1 = T1,1 + T2,2 + T3,1 + T2,0
6. 4T2,2 = T1,2 + T2,3 + T3,2 + T2,1
7. 4T2,3 = T1,3 + T2,4 + T3,3 + T2,2
8. 4T2,4 = T1,4 + T2,5 + T3,4 + T2,3
9. 4T3,1 = T2,1 + T3,2 + T4,1 + T3,0
10. 4T3,2 = T2,2 + T3,3 + T4,2 + T3,1
11. 4T3,3 = T2,3 + T3,4 + T4,3 + T3,2
12. 4T3,4 = T2,4 + T3,5 + T4,4 + T3,3
Bu formülde
https://i.hizliresim.com/dvXr9n.jpg
görüldüğü gibi sınır değerlerin sıcaklığını biliyoruz maviye boyadım. orta değerleri bilmiyoruz toplam 12 adet var. Nümerik yöntemlerde benim çözümüm her noktaya bir değer vermekle başlıyor ve yaklaşık 60 iterasyon sonunda gerçek değere yakın değeri veriyor. Ben bunu excell ile yaptım.
https://i.hizliresim.com/oXE51R.jpg
https://i.hizliresim.com/XMdGm0.jpg
Görüldüğü gibi excelde formülü yerine koyarak 1. iterasyonda tahmini değerleri alıp 2. iterasyonda bir önceki değerleri alıp bu şekilde 0,001 hataya ulaşana kadar iterasyon yaptığımda yaklaşık 50-60 iterasyon arasında istenen değerlere ulaşıyorum.
[https://i.hizliresim.com/mMEbmY.jpg
Delphi de geldiğim aşama ise :
https://i.hizliresim.com/9aGzyo.jpg
Button 1 e tıkladığımda gayet basit bir matematik işlemini çözdürebildim. Yani dx dy 'ye eni boyu böldürüp kaç bilinmeyen olduğunu, en nokta sayısını ve boy nokta sayısını buldurabildim. Bu aşamadan sonra ne yapacağım hakkında fikrim yok.
Aşağıda verilen Laplace denklemi ile tarif olunan fiziksel olayları modellemede kullanılacak sayısal modeli oluşturunuz. Laplace denkleminin çözümünde merkezi öteleme fark formülü kullanılacaktır. Model delphi ortamında yazılacaktır.
∂²T/∂x²+∂²T/∂y²=0
Dediğim gibi bu laplace denkleminin çözümünü merkezi öteleme fark formülü ile ben elde ettim. Burada tüm değerler değişken olacak elimdeki bir adet örnek var 3e 2,4 genişliğinde levha. Sağından 100, Solundan 75, üstünden 300, altından 50 derece ısıtılıyor. Bu levhayı dx=dy=0,6 mt bölümlendirerek her noktadaki sıcaklık değerlerini bulunuz.
Her noktadaki sıcaklık değerlerinin formülü :
1. 4T1,1 = T0,1 + T1,2 + T2,1 + T1,0
2. 4T1,2 = T0,2 + T1,3 + T2,2 + T1,1
3. 4T1,3 = T0,3 + T1,4 + T2,3 + T1,2
4. 4T1,4 = T0,4 + T1,5 + T2,4 + T1,3
5. 4T2,1 = T1,1 + T2,2 + T3,1 + T2,0
6. 4T2,2 = T1,2 + T2,3 + T3,2 + T2,1
7. 4T2,3 = T1,3 + T2,4 + T3,3 + T2,2
8. 4T2,4 = T1,4 + T2,5 + T3,4 + T2,3
9. 4T3,1 = T2,1 + T3,2 + T4,1 + T3,0
10. 4T3,2 = T2,2 + T3,3 + T4,2 + T3,1
11. 4T3,3 = T2,3 + T3,4 + T4,3 + T3,2
12. 4T3,4 = T2,4 + T3,5 + T4,4 + T3,3
Bu formülde
https://i.hizliresim.com/dvXr9n.jpg
görüldüğü gibi sınır değerlerin sıcaklığını biliyoruz maviye boyadım. orta değerleri bilmiyoruz toplam 12 adet var. Nümerik yöntemlerde benim çözümüm her noktaya bir değer vermekle başlıyor ve yaklaşık 60 iterasyon sonunda gerçek değere yakın değeri veriyor. Ben bunu excell ile yaptım.
https://i.hizliresim.com/oXE51R.jpg
https://i.hizliresim.com/XMdGm0.jpg
Görüldüğü gibi excelde formülü yerine koyarak 1. iterasyonda tahmini değerleri alıp 2. iterasyonda bir önceki değerleri alıp bu şekilde 0,001 hataya ulaşana kadar iterasyon yaptığımda yaklaşık 50-60 iterasyon arasında istenen değerlere ulaşıyorum.
[https://i.hizliresim.com/mMEbmY.jpg
Delphi de geldiğim aşama ise :
https://i.hizliresim.com/9aGzyo.jpg
Button 1 e tıkladığımda gayet basit bir matematik işlemini çözdürebildim. Yani dx dy 'ye eni boyu böldürüp kaç bilinmeyen olduğunu, en nokta sayısını ve boy nokta sayısını buldurabildim. Bu aşamadan sonra ne yapacağım hakkında fikrim yok.
En son busranas tarafından 15 Oca 2019 01:01 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Senin uzmanlik alaninla ilgili anlayamadigim cok fazla semboller ve terimler olsada ana fikri anladim sanirim. Oncelikle ben tek bir formul bekliyrdum. Ama burada ard arda yapilmasi gereken bir islem sirasi var. Anladigim gibiyse eger cok kolay ittire ittire iterasyon yapicaz
iki yolu var cift boyutlu dizi olusturmak yada delphideki stringrid componentini kullanmak. Biz gorsel olarak yapalim madem. Senin icin daha az karmasik olur.
Once mantigini anlatayim sonra kodlari yazarim. Oncelikle kac hucreli bir tabloya ihtiyac duydugumuzu bulacagiz. Sonra tabloda bilinen alanlari dolduracagiz. Ustten verilen isi icin ust hucreler, sagdan verilen isi icin sag hucreler ve ayni sekilde sol ve alt hucreleride bilinen degerlerle dolduracagiz. Sonra bilmedigimiz tum hucreleri 0 ile dolduracagiz. Bikinmeyen ilk hucreden baslayacagiz. Cevresindeki 4 hucrenin isi degerlerini toplayip 4 e bolecegiz. Boylece ilk verdigimiz sifir degerlerinin tamami degismis olacak. Ilk ittirasonu yapmis olacagiz. Bu islemi for dongusu icine alip istedigimiz kadar tekrarlatabiliriz. Hassasiyet derecesi de isteriz formda. Bir onceki ittirasyon ile arasinda en fazla ne kadar fark olacaksa o zaman ittirasyon durur.
Bu arada cok ilginc bir hesaplama yontemiymis. Boyle bir hesaplama yontemi oldugunu bilmiyrdum. Surekli yeniden tahmin ediyor ve bir onceki tahminle arasinda ayni kabul edilebilecek kadar kucuk bir fark bulana kadar devam ediyor. Sonunda cevabi buluyor. Harikaymis. Sevdim bunu...
iki yolu var cift boyutlu dizi olusturmak yada delphideki stringrid componentini kullanmak. Biz gorsel olarak yapalim madem. Senin icin daha az karmasik olur.
Once mantigini anlatayim sonra kodlari yazarim. Oncelikle kac hucreli bir tabloya ihtiyac duydugumuzu bulacagiz. Sonra tabloda bilinen alanlari dolduracagiz. Ustten verilen isi icin ust hucreler, sagdan verilen isi icin sag hucreler ve ayni sekilde sol ve alt hucreleride bilinen degerlerle dolduracagiz. Sonra bilmedigimiz tum hucreleri 0 ile dolduracagiz. Bikinmeyen ilk hucreden baslayacagiz. Cevresindeki 4 hucrenin isi degerlerini toplayip 4 e bolecegiz. Boylece ilk verdigimiz sifir degerlerinin tamami degismis olacak. Ilk ittirasonu yapmis olacagiz. Bu islemi for dongusu icine alip istedigimiz kadar tekrarlatabiliriz. Hassasiyet derecesi de isteriz formda. Bir onceki ittirasyon ile arasinda en fazla ne kadar fark olacaksa o zaman ittirasyon durur.
Kod: Tümünü seç
Var
boy,en, dx,dy:real;
Hassasiyet:real; //ulasmak istedigimiz hassasiyet orani
Ustisi,altisi,sagisi,solisi, say:integer;
i,j,k,fark,enfark,xx,yy:real;
Begin
Boy:=3; en:=2,4; dx:=0,6; dy:=0,6;
Say:=0;
Hassasiyet := 0,000001;
xx := ( boy - (boy mod dx)) / dx ;
yy:= (en - (en mod dy) / dy;
Stringgrid1.rowcount := xx; // satir sayisi
Stringrid1.colcount := yy; sutun sayisi
For i := 0 to yy do
Begin
Stringrid1.cells[0,i]:= ustisi;
Stringrid1.cells[xx,i]:= altisi;
End;
For i:=0 to xx do
Begin
Stringrid1.cells[i,0):= ,i]:= sagisi;
Stringrid1.cells[i,yy]:= altisi;
End ;
/// bilinen sicakliklari hucrelere doldurduk simdi bilinmeyenleri 0 yapalim
For i:= 1 to xx-1 do
For k:= 1 to yy-1 do
Begin
Stringrid1.cells[i,k] := '0';
End;
// simdi itrasyonlari yapalim..
While hassasiyet < enfark do
Begin
Say :=say +1;
For i:= 1 to xx-1 do
For k:= 1 to yy-1 do
Begin
J:=strtofloat(stribgrid1.cells[i,k]); //ilk deger
Stringrid1.cells[i,k]:=floattostr(
( strtofloat(stringrid1.cells[i-1]) +
strtofloat(stringrid1.cells[i+1]) +
strtofloat(stringrid1.cells[k-1]) +
strtofloat(stringrid1.cells[k+1]) ) / 4
);
Fark :=strtofloat(stribgrid1.cells[i,k]) - j ; // itirasyon sonrasi hucredeki fark
If fark < 0 then
fark := fark * -1 ; // fark hep pozitif olmali (mutlak)..
If fark > enfark then // olusan en buyuk farki buluyruz.
Enfark := fark ;
End;
End;/// while endi..
Showmessage (inttostr(say) + ' adet itirasyon sonucunda ' + floattostr(hassasiyet) + ' hassasiyetle tespit edilmistir.' );
End;
En son me_turan@mynet.com tarafından 13 Oca 2019 12:30 tarihinde düzenlendi, toplamda 5 kere düzenlendi.
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
teşekkür ediyorum ilginiz için. bende sizin yazdıklarınızı uygulamaya çalışacağım.
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Tamamdir. Cepten yazdigim icin yazim hatalari olabilir. Duzeltirsin hatali yer varsa ama mantik bu. Kolay gelsin..
Ayrica eger iterasyon sayisini dusurmek istersen sanirim baslangic degerlerini 0 yapmayabilirsin. Cevresindeki bilinen iki noktanin ortalamasini baslangic degeri olarak kabul edersen daha hizli sonuc verir.
Ayrica eger iterasyon sayisini dusurmek istersen sanirim baslangic degerlerini 0 yapmayabilirsin. Cevresindeki bilinen iki noktanin ortalamasini baslangic degeri olarak kabul edersen daha hizli sonuc verir.
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Öncelikle kodlar için çok teşekkür ederim. Kodların bazı yerlerini düzenleyerek kendi yaptığıma göre, programı çalıştırdım.
Fakat tablolamada hata çıkıyor.
https://i.hizliresim.com/RrQ7GG.jpg
Değerlerin
https://i.hizliresim.com/mMEbmY.jpg
bu şekilde çıkması gerekiyor
edit: FreeMan35 Mahsuru yoksa hiyeroglif değilde Atatürk'ün öğretiği Türkçe ile derdinizi anlatın. İllaki resim ekliyecekseniz, tag larını kaldırıp ekleyin.
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
Var
boy,en,dx,dy,ens,bns,bs:real;
Hassasiyet:real; //ulasmak istedigimiz hassasiyet orani
ustisi,altisi,sagisi,solisi, say:integer;
fark,enfark,xx,yy:real;
i,j,k:integer;
Begin
en:=strtofloat(edit5.Text);
boy:=strtofloat(edit6.Text);
dx:=strtofloat(edit7.Text);
dy:=strtofloat(edit8.Text);
ens:=(en/dx)+1;
bns:=(boy/dy)+1;
bs:=(ens-2)*(bns-2);
edit9.text:=floattostr(ens);
edit10.text:=floattostr(bns);
edit11.text:=floattostr(bs);
Say:=0;
Hassasiyet := 0.000001;
xx := ( boy / dx)-1 ;
yy:= (en / dy)-1;
Stringgrid1.rowcount := Round(xx); // satir sayisi
Stringgrid1.colcount := Round(yy); //sutun sayisi
for i := 0 to Round(yy) do
Begin
Stringgrid1.cells[0,i] := edit1.Text;
Stringgrid1.cells[Round(xx),i] := edit2.Text;
End;
For i:=0 to Round(xx) do
Begin
Stringgrid1.cells[i,0] := edit3.Text;
Stringgrid1.cells[i,Round(yy)] := edit4.Text;
End ;
/// bilinen sicakliklari hucrelere doldurduk simdi bilinmeyenleri 0 yapalim
For i:= 1 to Round(xx)-1 do
For k:= 1 to Round(yy)-1 do
Begin
Stringgrid1.cells[i,k] := '0';
End;
// simdi itrasyonlari yapalim..
While hassasiyet < enfark do
Begin
Say :=say +1;
For i:= 1 to Round(xx)+1 do
For k:= 1 to Round(yy)+1 do
Begin
J:=strtoint(stringgrid1.cells[i,k]); //ilk deger
Stringgrid1.cells[i,k]:=floattostr(
( strtoint(stringgrid1.cells[i-1,k]) +
strtoint(stringgrid1.cells[i+1,k]) +
strtoint(stringgrid1.cells[i,k-1]) +
strtoint(stringgrid1.cells[i,k+1]) ) / 4
);
Fark :=strtoint(stringgrid1.cells[i,k]) - j ; // itirasyon sonrasi hucredeki fark
If fark < 0 then
fark := fark * -1 ; // fark hep pozitif olmali (mutlak)..
If fark > enfark then // olusan en buyuk farki buluyruz.
Enfark := fark ;
End;
End;/// while endi..
Showmessage (inttostr(say) + ' adet itirasyon sonucunda ' + floattostr(hassasiyet) + ' hassasiyetle tespit edilmistir.' );
End;
end.
https://i.hizliresim.com/RrQ7GG.jpg
Değerlerin
https://i.hizliresim.com/mMEbmY.jpg
bu şekilde çıkması gerekiyor
edit: FreeMan35 Mahsuru yoksa hiyeroglif değilde Atatürk'ün öğretiği Türkçe ile derdinizi anlatın. İllaki resim ekliyecekseniz, tag larını kaldırıp ekleyin.
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Yarin delphide yazip calisan seklini gondrririm.
-
- Üye
- Mesajlar: 29
- Kayıt: 09 Eyl 2017 02:53
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
procedure TForm3.Button1Click(Sender: TObject);
Var
boy,en, dx,dy:real;
Hassasiyet,j,fark,enfark:real; //ulasmak istedigimiz hassasiyet orani
ustisi,altisi,sagisi,solisi, say:integer;
i,k,xx,yy:integer;
Begin
Boy:=strtofloat(edit1.Text); en:=strtofloat(edit2.Text);
dx:=strtofloat(edit3.Text); dy:=strtofloat(edit4.Text);
ustisi := strtoint(edit5.Text); altisi := strtoint(edit6.Text);
sagisi := strtoint(edit7.Text); solisi := strtoint(edit8.Text);
Say:=0; enfark := 9999; // en farkın başlangıc değeri yüksek olsun
Hassasiyet :=strtofloat(edit9.Text);
xx := strtoint(floattostr(boy / dx))+1 ;
yy:= strtoint(floattostr(en / dy))+1;
Stringgrid1.rowcount := xx; // satir sayisi
Stringgrid1.colcount := yy; // sutun sayisi
StringGrid1.Refresh;
/// şimdi bilinen değerleri giriyor.
For i := 0 to yy-1 do
Begin
Stringgrid1.cells[i,0]:= inttostr(ustisi);
Stringgrid1.cells[i,xx-1]:= inttostr(altisi);
End;
For i:=0 to xx-1 do
Begin
Stringgrid1.cells[yy-1,i]:= inttostr(sagisi);
Stringgrid1.cells[0,i]:= inttostr(solisi);
End ;
// hücreleri 0 ile dolduruyoruz
For i:= 1 to xx-2 do
For k:= 1 to yy-2 do
Begin
Stringgrid1.cells[k,i] := floattostr((ustisi + altisi+ sagisi+solisi)/4);
End;
// simdi itrasyonlari yapalim..
While hassasiyet < enfark do
//while say < 300 do
Begin
enfark := 0; // döngü icine girince fark olmadığını kabul edelim.
Say :=say +1;
For i:= 1 to yy-2 do
For k:= 1 to xx-2 do
Begin
J:=strtofloat(Stringgrid1.cells[i,k]); //ilk deger
///ShowMessage(floattostr(j));
Stringgrid1.cells[i,k]:=floattostr((strtofloat(Stringgrid1.cells[i-1,k]) +
strtofloat(Stringgrid1.cells[i+1,k]) +
strtofloat(Stringgrid1.cells[i,k-1]) +
strtofloat(Stringgrid1.cells[i,k+1]) ) / 4
);
Fark :=strtofloat(Stringgrid1.cells[i,k]) - j ; // itirasyon sonrasi hucredeki fark
If fark < 0 then
fark := fark * -1 ; // fark hep pozitif olmali (mutlak)..
End;
If fark > enfark then // olusan en buyuk farki buluyruz.
Enfark := fark ;
End;/// while endi..
Showmessage (inttostr(say) + ' adet itirasyon sonucunda ' + floattostr(hassasiyet) + ' hassasiyetle tespit edilmistir.' );
end;
"BU BÖLÜME RESİM KOYMUŞTUM AMA FORUM KURALLARI GEREĞİ RESİM KOYMAK YASAKMIŞ. UYARI ALDIM VE RESMİ KALDIRDIM... "
cep telefonundan yazdığımda bir sürü hata yapmışım.
düzeltmeleri yaptım. yukardaki kodda hata yok.
Var
boy,en, dx,dy:real;
Hassasiyet,j,fark,enfark:real; //ulasmak istedigimiz hassasiyet orani
ustisi,altisi,sagisi,solisi, say:integer;
i,k,xx,yy:integer;
Begin
Boy:=strtofloat(edit1.Text); en:=strtofloat(edit2.Text);
dx:=strtofloat(edit3.Text); dy:=strtofloat(edit4.Text);
ustisi := strtoint(edit5.Text); altisi := strtoint(edit6.Text);
sagisi := strtoint(edit7.Text); solisi := strtoint(edit8.Text);
Say:=0; enfark := 9999; // en farkın başlangıc değeri yüksek olsun
Hassasiyet :=strtofloat(edit9.Text);
xx := strtoint(floattostr(boy / dx))+1 ;
yy:= strtoint(floattostr(en / dy))+1;
Stringgrid1.rowcount := xx; // satir sayisi
Stringgrid1.colcount := yy; // sutun sayisi
StringGrid1.Refresh;
/// şimdi bilinen değerleri giriyor.
For i := 0 to yy-1 do
Begin
Stringgrid1.cells[i,0]:= inttostr(ustisi);
Stringgrid1.cells[i,xx-1]:= inttostr(altisi);
End;
For i:=0 to xx-1 do
Begin
Stringgrid1.cells[yy-1,i]:= inttostr(sagisi);
Stringgrid1.cells[0,i]:= inttostr(solisi);
End ;
// hücreleri 0 ile dolduruyoruz
For i:= 1 to xx-2 do
For k:= 1 to yy-2 do
Begin
Stringgrid1.cells[k,i] := floattostr((ustisi + altisi+ sagisi+solisi)/4);
End;
// simdi itrasyonlari yapalim..
While hassasiyet < enfark do
//while say < 300 do
Begin
enfark := 0; // döngü icine girince fark olmadığını kabul edelim.
Say :=say +1;
For i:= 1 to yy-2 do
For k:= 1 to xx-2 do
Begin
J:=strtofloat(Stringgrid1.cells[i,k]); //ilk deger
///ShowMessage(floattostr(j));
Stringgrid1.cells[i,k]:=floattostr((strtofloat(Stringgrid1.cells[i-1,k]) +
strtofloat(Stringgrid1.cells[i+1,k]) +
strtofloat(Stringgrid1.cells[i,k-1]) +
strtofloat(Stringgrid1.cells[i,k+1]) ) / 4
);
Fark :=strtofloat(Stringgrid1.cells[i,k]) - j ; // itirasyon sonrasi hucredeki fark
If fark < 0 then
fark := fark * -1 ; // fark hep pozitif olmali (mutlak)..
End;
If fark > enfark then // olusan en buyuk farki buluyruz.
Enfark := fark ;
End;/// while endi..
Showmessage (inttostr(say) + ' adet itirasyon sonucunda ' + floattostr(hassasiyet) + ' hassasiyetle tespit edilmistir.' );
end;
"BU BÖLÜME RESİM KOYMUŞTUM AMA FORUM KURALLARI GEREĞİ RESİM KOYMAK YASAKMIŞ. UYARI ALDIM VE RESMİ KALDIRDIM... "
cep telefonundan yazdığımda bir sürü hata yapmışım.
düzeltmeleri yaptım. yukardaki kodda hata yok.
En son me_turan@mynet.com tarafından 15 Oca 2019 11:31 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Re: Delphi 7-12 Bilinmeyenli 12 Denklem
Çok ama çok teşekkür ederim.