Matris işlemleri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Matris işlemleri

Mesaj gönderen mahsuni »

Slm
Delphi ile matris işlemleri yapmaktayım.

Matrisin elemanları;

Kod: Tümünü seç

Örneğin (a:=2, b:=3 olsun)
K[1,1]:=a;
K[2,1]:=b;
K[2,2]:=a*b;
K[3,1]:=a/5;
K[3,2]:=b+5;
..
...
K[12,12]:=...
seklindedir..

Bu matris satırları (12x12=144) programda çok yer kaplamaktadır.

Bende bunu ini dosyasına kaydettim.
Runtime formülleri okuyup;
Parse (tbcParse) programı ile matrisin her bir elemanın değerlerini elde ettim.
Sorun şu ki nomalde 1 sn süren işlemi parse ile yaparsam 50-60 sn gibi bir sureye çıkmaktadır.

Kodum hem kısa olsun hem de hızlı çalışsın.
Bu konuda başka ne tür alternatiler olabilir.
Değerli görüş ve önerilerinizi bekliyorum.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Matris işlemleri

Mesaj gönderen ertank »

Merhaba,

Verdiğiniz bilgiler sorunuza yanıt vermek için yeterli değil. Öncelikle kullandığınız Delphi sürümü nedir? Derlenebilir bir proje ve proje tarafından kullanılabilir örnek veri sağlamanız mümkün mü?
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: Matris işlemleri

Mesaj gönderen mahsuni »

En sonunda delphi 7 den delphi 10.2 ye geçtim. (tokyo)
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: Matris işlemleri

Mesaj gönderen mahsuni »

örneğin
bu matrisin elenmanları

Kod: Tümünü seç

K1_1=+y32*y32*ua+x32*x32*ub
K2_1=-v*y32*x32*ua-y32*x32*ub
K2_2=+x32*x32*ua+y32*y32*ub
K3_1=-y32*y31*ua-x32*x31*ub
K3_2=+v*y31*x32*ua+y32*x31*ub
K3_3=+y31*y31*ua+x31*x31*ub
K4_1=+v*y32*x31*ua+y31*x32*ub
K4_2=-x32*x31*ua-y32*y31*ub
K4_3=-v*y31*x31*ua-y31*x31*ub
K4_4=+x31*x31*ua+y31*y31*ub
K5_1=+y32*y21*ua+x32*x21*ub
K5_2=-v*y21*x32*ua-y32*x21*ub
K5_3=-y31*y21*ua-x31*x21*ub
K5_4=+v*y21*x31*ua+y31*x21*ub
K5_5=+y21*y21*ua+x21*x21*ub
K6_1=-v*y32*x21*ua-y21*x32*ub
K6_2=+x32*x21*ua+y32*y21*ub
K6_3=+v*y31*x21*ua+y21*x31*ub
K6_4=-x31*x21*ua-y31*y21*ub
K6_5=-v*y21*x21*ua-y21*x21*ub
K6_6=+x21*x21*ua+y21*y21*ub
ini dosyasında kayıtlı.
bu dosyadan bu formulu string olarak alıyorum.

Kod: Tümünü seç

frm:=+y32*y32*ua+x32*x32*ub; //K1_1 formül değeri

//    bPar:TbcParser;

  bPar.CreateVar('ua',ua); //ua extended
  bPar.CreateVar('ub',ub); //ub extended
  bPar.CreateVar('y32',y32);
 bPar.CreateVar('y31',y31); 
 bPar.CreateVar('y21',y21);
 bPar.CreateVar('x32',x32); 
 bPar.CreateVar('x31',x31);  
 bPar.CreateVar('x21',x21);

    bPar.Expression:=frm;
    K[1,1]:=bPar.Evaluate;
şekllinde değeri buluyorum.

Umarım bu sefer derdimi anlatabilmişimdir.
Not: bu kadar en az 5.000 defa tekrar etmektedir.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Matris işlemleri

Mesaj gönderen ertank »

Formüller sabit ise farklı bir ünite içinde 144 tane formülü yazıp kullanmanızda fayda var. Aynı ünite içinde olmayınca gözünüze kod kalabalığı olmayacaktır.

TbcParser uygulaması her bir formül için Delphi misali parse ve üzerine de parse edilmiş kodu çalıştırma yapıyor. Çok daha uzun zaman alması normal. Çok fazla parser tecrübem yok. Performansını arttırma yolları varsa ancak ilgili kütüphaneyi hazırlayan firma/kişi üzerinden yardım alarak olabilir.
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: Matris işlemleri

Mesaj gönderen mahsuni »

Cevabınız için çok teşekkür ederim.

matris içindeki bu formülleri gizlemenin bir yolu yok mudur?
çok çirkin bir görüntü oluşturuyor.
ini dosyasında saklamak güzeldi. ama buda programı çok yavaşlamaktadır.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Matris işlemleri

Mesaj gönderen freeman35 »

mahsuni yazdı: 04 Eyl 2021 12:09 matris içindeki bu formülleri gizlemenin bir yolu yok mudur?
gizlemekten kastın ne? form a bi Tmemo koyup design time da bunun içine ekleyebilir ve burdan kullanırsın. visible false olursa son kullanıcı görmez, width ve height = 3 gibi bir değer verirsen design dada kalabalık yapmaz.
çok çirkin bir görüntü oluşturuyor.
Görsellik mi? işlevsellik mi?
ini dosyasında saklamak güzeldi. ama buda programı çok yavaşlamaktadır.
Bu kodunla doğru orantılı, ne kadar sık ve ne kadar veri okuyor ve/veya yazıyorsun vs gibi şartlar etkiler.

Amaç frm:=+y32*y32*ua+x32*x32*ub; buradaki string ifadelerin yerine ( "ua" gibi) sayı yada başka bir şey ile değiştirmekse,
System.SysUtils.StringReplace i inceledin mi?
https://docwiki.embarcadero.com/Librari ... ingReplace
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Re: Matris işlemleri

Mesaj gönderen mahsuni »

Freeman35
Gizlemekten kastım kodun çok uzun olması.
Eğer string olursa for döngüsü ile işlemler çok basitleşmektedir.
Bu seferde; formül string olduğu içi programın çalışma süresi uzuyor.
Cevapla