[]
[Matlab] PDE-FEM
Oncelikle tumu buyuk harfli baslik icin ozur dilerim. Gelelim sorumuza. Simdi efendim etkin olarak kullanabildigim matematik bilgilerimle analitik olarak cozemedigim icin fem ile cozmeye yeltendigim bir problem var. Dolayisiyla bunun icin bir script yazacagim. Problemim tam olarak su; sekilde gordugunuz uzere diyelim ki 8 adet element ve 15 adet node'dan olusan bir geometrimiz var. ahanda surada i50.tinypic.com
her bir element 4 adet node'dan olusuyor. dolayisiyla benim her bir element icin 4x4 luk bir matrisim var. ornegin a ve b icin bu matrisleri yazalim;
|(1,1) (1,2) (1,9) (1,10)|
|(2,1) (2,2) (2,9) (2,10)|
|(9,1) (9,2) (9,9) (9,10)|
|(10,1)(10,2)(10,9)(10,10|
|(2,2) (2,3) (2,8) (2,9)|
|(3,2) (3,3) (3,8) (3,9)|
|(8,2) (8,3) (8,8) (8,9)|
|(9,2) (9,3) (9,8) (9,9)|
tahmin edeceginiz uzere 8 element icin de bu matrisleri yazdigimizda 15x15 lik global bir matrisin indislerini elde ediyoruz. diyelim ki elimizde 4x4'luk bir deger matrisi var. bu deger matrisinden elementler icin olusturdugumuz 4x4 luk matris ile ayni indisteki degerleri, 4x4 luk matriste verilen 15x15 lik matris indisine gidip yaziyoruz. ayni indise sahip degerleri topluyoruz tabii, uzerine yazmaktansa. cok guzel buraya kadar. gelin gorun ki bu is 8 element icin elle olusturulabilir olmasina ragmen 2000 element icin imkansiz. bana oyle bir script lazim ki verdigim element ve node sayisina gore element matrislerini olustursun. eger o matrisleri olusturabilirsem, deger matrisinden degerlerini okutabilip, global matriste yerine yazdirabilirim. isin o kismini yapabilirim saniyorum. lakin bu element matrislerini olusturma isini kafama yatiramadim. nasil yapariz ederiz de olusturabiliriz? her turlu fikire acigim. matlab olmaz da, scilab olur, octave olur, hesap makinesi olur. nasil derseniz. simdiden tesekkur ederim. ha tabii sunu da soylemekte fayda var, comsol bir opsiyon degil su anki sartlar altinda.
her bir element 4 adet node'dan olusuyor. dolayisiyla benim her bir element icin 4x4 luk bir matrisim var. ornegin a ve b icin bu matrisleri yazalim;
|(1,1) (1,2) (1,9) (1,10)|
|(2,1) (2,2) (2,9) (2,10)|
|(9,1) (9,2) (9,9) (9,10)|
|(10,1)(10,2)(10,9)(10,10|
|(2,2) (2,3) (2,8) (2,9)|
|(3,2) (3,3) (3,8) (3,9)|
|(8,2) (8,3) (8,8) (8,9)|
|(9,2) (9,3) (9,8) (9,9)|
tahmin edeceginiz uzere 8 element icin de bu matrisleri yazdigimizda 15x15 lik global bir matrisin indislerini elde ediyoruz. diyelim ki elimizde 4x4'luk bir deger matrisi var. bu deger matrisinden elementler icin olusturdugumuz 4x4 luk matris ile ayni indisteki degerleri, 4x4 luk matriste verilen 15x15 lik matris indisine gidip yaziyoruz. ayni indise sahip degerleri topluyoruz tabii, uzerine yazmaktansa. cok guzel buraya kadar. gelin gorun ki bu is 8 element icin elle olusturulabilir olmasina ragmen 2000 element icin imkansiz. bana oyle bir script lazim ki verdigim element ve node sayisina gore element matrislerini olustursun. eger o matrisleri olusturabilirsem, deger matrisinden degerlerini okutabilip, global matriste yerine yazdirabilirim. isin o kismini yapabilirim saniyorum. lakin bu element matrislerini olusturma isini kafama yatiramadim. nasil yapariz ederiz de olusturabiliriz? her turlu fikire acigim. matlab olmaz da, scilab olur, octave olur, hesap makinesi olur. nasil derseniz. simdiden tesekkur ederim. ha tabii sunu da soylemekte fayda var, comsol bir opsiyon degil su anki sartlar altinda.
daha sonra takip edebileyim diye mesaj yazıyorum, bir kaç saat sonra bakarım.
- kimlanbu (21.06.10 17:32:48)
soruyu tam anlamadım, elemanların stiffnes matrislerini assemble etmeye mi çalışıyorsun? eğer öyleyse, geçen sene şöyle bir program yazmıştım. ayıklayabilirsen istediğini, belki işine yarar:
function y=AssembleElements(Element, NNode)
K=zeros(2*NNode, 2*NNode);
for index=1:length(Element)
i=Element(index).n1.index;
j=Element(index).n2.index;
k=Element(index).k;
K(2*i-1,2*i-1)=K(2*i-1,2*i-1)+k(1,1);
K(2*i-1,2*i)=K(2*i-1,2*i)+k(1,2);
K(2*i-1,2*j-1)=K(2*i-1,2*j-1)+k(1,3);
K(2*i-1,2*j)=K(2*i-1,2*j)+k(1,4);
K(2*i,2*i-1)=K(2*i,2*i-1)+k(2,1);
K(2*i,2*i)=K(2*i,2*i)+k(2,2);
K(2*i,2*j-1)=K(2*i,2*j-1)+k(2,3);
K(2*i,2*j)=K(2*i,2*j)+k(2,4);
K(2*j-1,2*i-1)=K(2*j-1,2*i-1)+k(3,1);
K(2*j-1,2*i)=K(2*j-1,2*i)+k(3,2);
K(2*j-1,2*j-1)=K(2*j-1,2*j-1)+k(3,3);
K(2*j-1,2*j)=K(2*j-1,2*j)+k(3,4);
K(2*j,2*i-1)=K(2*j,2*i-1)+k(4,1);
K(2*j,2*i)=K(2*j,2*i)+k(4,2);
K(2*j,2*j-1)=K(2*j,2*j-1)+k(4,3);
K(2*j,2*j)=K(2*j,2*j)+k(4,4);
end
y=K;
end
function y=AssembleElements(Element, NNode)
K=zeros(2*NNode, 2*NNode);
for index=1:length(Element)
i=Element(index).n1.index;
j=Element(index).n2.index;
k=Element(index).k;
K(2*i-1,2*i-1)=K(2*i-1,2*i-1)+k(1,1);
K(2*i-1,2*i)=K(2*i-1,2*i)+k(1,2);
K(2*i-1,2*j-1)=K(2*i-1,2*j-1)+k(1,3);
K(2*i-1,2*j)=K(2*i-1,2*j)+k(1,4);
K(2*i,2*i-1)=K(2*i,2*i-1)+k(2,1);
K(2*i,2*i)=K(2*i,2*i)+k(2,2);
K(2*i,2*j-1)=K(2*i,2*j-1)+k(2,3);
K(2*i,2*j)=K(2*i,2*j)+k(2,4);
K(2*j-1,2*i-1)=K(2*j-1,2*i-1)+k(3,1);
K(2*j-1,2*i)=K(2*j-1,2*i)+k(3,2);
K(2*j-1,2*j-1)=K(2*j-1,2*j-1)+k(3,3);
K(2*j-1,2*j)=K(2*j-1,2*j)+k(3,4);
K(2*j,2*i-1)=K(2*j,2*i-1)+k(4,1);
K(2*j,2*i)=K(2*j,2*i)+k(4,2);
K(2*j,2*j-1)=K(2*j,2*j-1)+k(4,3);
K(2*j,2*j)=K(2*j,2*j)+k(4,4);
end
y=K;
end
- marido (21.06.10 21:54:06)
@marido
global stiffness matrix'i bulmaya calisiyorum, dogrudur. gonderdiginiz kodu bir inceleyeyim. tesekkur ederim tekrar.
global stiffness matrix'i bulmaya calisiyorum, dogrudur. gonderdiginiz kodu bir inceleyeyim. tesekkur ederim tekrar.
- dahicocuk (22.06.10 02:17:37)
1