You are on page 1of 12

Furkan Avcıoğlu 181110014

Elektromanyetik Modelleme Sonlu


Metodlar ile Verilen Şeklin Sonlu Fark
Yöntemi ile İçindeki Voltaj Değişiminin
İncelenmesi

Sonlu Fark Methodu nedir?


Sonlu fark yöntemi, matematiksel modelleme ve sayısal
çözümleme için kullanılan bir tekniktir. Bu yöntem, bir
diferansiyel denklemi veya bir integral denklemi, sayısal
olarak çözülebilir bir denklem sistemine dönüştürür. Bu
sayısal denklem sistemini çözmek, orijinal matematiksel
problemi çözmeye yardımcı olur.
Özellikle, sonlu fark yöntemi, bir fonksiyonun türevinin sayısal
olarak hesaplanmasına olanak tanır. Bu yöntem, bir
fonksiyonun türevini birkaç adımda, belirli bir hata payı ile
hesaplamak için kullanılabilir. Sonlu fark yöntemi, sayısal
çözümler gerektiren fizik, mühendislik ve finansal
problemlerin çözümünde yaygın olarak kullanılır.
Sonlu fark yöntemi, matematiksel fonksiyonun birbirine yakın
iki noktasındaki değer farklarına dayanır. Daha spesifik olarak,
bir fonksiyonun türevi, fonksiyonun değerlerindeki
değişikliklerin oranı olarak tanımlanır. Bu nedenle, sonlu fark
yöntemi, fonksiyonun değerlerindeki farkları hesaplar ve bu
farkları birbirine böler.
Örneğin, bir fonksiyonun türevini hesaplamak için sonlu fark
yöntemi kullanıldığında, fonksiyonun belirli bir noktasındaki
değeri ve bu noktaya yakın birkaç noktadaki değerleri alarak
bir fark formülü uygulanır. Bu fark formülü, belirli bir hata
payı ile fonksiyonun türevini yaklaşık olarak hesaplar.
Sonlu fark yöntemi, adım büyüklüğü ve adım sayısı gibi
parametrelerin belirlenmesiyle doğruluğu artırılabilir. Adım
büyüklüğü, fonksiyonun farklı noktalarındaki değerler
arasındaki mesafeyi belirtir. Adım sayısı, sonlu fark
yönteminin uygulanacağı noktaların sayısını belirtir.
Sonlu fark yöntemi, diferansiyel denklemlerin sayısal çözümü
için birçok farklı varyasyonu vardır. Bunlar arasında ileri fark
yöntemi, geri fark yöntemi ve merkezi fark yöntemi gibi
teknikler bulunur. Her bir yöntemin avantajları ve
dezavantajları vardır ve hangi yöntemin kullanılacağı,
çözülmesi gereken problemin doğasına bağlıdır
Projenin Açıklanması
Bu projemizde üzerinde toplam 160 nokta bulunan
sekizgenimizin içindeki voltaj değişimleri
incelenecektir.Sekizgenimizin kenar ve voltaj değerleri
yukarıdaki şekilde gözükmektedir.Voltaj değişimleri
incelenirken kenar voltajları sabit tutulacaktır.Voltaj
değerlerinin virgülden sonraki iki basamağının değişmediği
iterasyon çıktı olarak gösterilecektir.Aynı zamanda
şeklimizdeki 160 noktanın da volt değerleri çıktı olarak
gösterilecektir.İsterseniz şimdi aşağıdaki kodu açıklayalım.
Kod Açıklaması

#include <iostream>

#include <stdlib.h>

using namespace std;

int main()

{
float coor[16][11];

int j;

int i;

int prec=2;

for(j=0;j<11;j++) {

for(i=0;i<16;i++){

if((i>5 and i<10) and (j>=0 and j<4)){

else{

coor[i][j]=0;

for(j=0;j<11;j++) {

coor[0][j]=10;

}
for(i=0;i<6;i++) {

coor[i][0]=20;

for(i=10;i<16;i++) {

coor[i][0]=20;

for(j=0;j<11;j++) {

coor[15][j]=15;

for(i=0;i<16;i++) {

coor[i][10]=0;

for(j=0;j<5;j++) {

coor[5][j]=20;

for(j=0;j<5;j++) {
coor[10][j]=20;

for(i=5;i<11;i++) {

coor[i][4]=20;

int iter=0,a=0,b=0,c=0,d=0,k=0,nodn=0;

float rig=0,up=0,lef=0,bel=0,res=0,maxe=1,err[160];

while(maxe>0.01 or maxe<-0.01){

nodn=0;

for(j=0;j<11;j++) {

for(i=0;i<16;i++){

if((i>5 and i<10) and (j>=0 and j<4)){

else{
if((j>=5 and j<10) and (i>=1 and i<15)){

a=i+1;

b=j+1;

d=i-1;

b=j-1;

rig=coor[a][j];

up=coor[i][d];

lef=coor[c][j];

bel=coor[i][b];

res=(rig+up+lef+bel)/4.00;

err[nodn]= coor[i][j]-res;

coor[i][j]=res;

if((j>=1 and j<5) and ((i>=1 and i<5) or (i>=11 and i<15) )){

a=i+1;

b=j+1;

d=i-1;

b=j-1;

rig=coor[a][j];

up=coor[i][d];

lef=coor[c][j];

bel=coor[i][b];

res=(rig+up+lef+bel)/4.00;
err[nodn]= coor[i][j]-res;

coor[i][j]=res;

for (int k=1;k<160;k++){

if (err[0]< abs(err[i])){

err[0]=err[i];

maxe=err[0];

iter++;

cout << "Iter:" << iter<<endl;

for(j=0;j<11;j++) {
for(i=0;i<16;i++){

if((i>5 and i<10) and (j>=0 and j<4)){

else{

int tam_kisim = (int)coor[i][j];

double ondalik_kisim = coor[i][j] - tam_kisim;

int ondalik_kisim_basamak = (int)(ondalik_kisim * 100);

std::cout << tam_kisim << "." << ondalik_kisim_basamak<<" ";

cout <<endl;

system("pause");

return 0;

}
İlk başta şeklimiz üzerinde iteratif hareket edebilmek için
16x11 matris oluşturulmuştur.Sonrasında şeklimiz ile matrisi
entegre edebilmek adına sekizgenimizdeki boş olan orta
kısım if else koşululyla atlanarak diğer kısımların
entegrasyonu sağlanıyor.Sonraki for döngülerinde
kenarlardaki volaj değerleri tanımlanmıştır.Sonrasında ise
iterasyon sayısı,nokta sayısı,hata ve yer yön işaretçileri adı
altında belirli değişkenler oluşturulmuştur.Sonrasında bir
while döngüsü ile iteratif işlemler hata payının mutlak değer
0.01 den küçük olmama şartıyla devam etmesi
sağlanacaktır.Sonraki döngülerimizde kenar voltajları sabit
olup iç voltajlarda geziniyoruz.En sonunda ise her nokta iin
çıktı matrisimizi bastırıyoruz ve bu projeye göre 11 iterasyon
virgülden sonraki basamağın değişmediği ilk iterasyondur.
Orta nokta (8,8) =4.68 ile (8,9)=3.59 sayılarının tam ortası
olup etrafındaki kenarların aritmetik ortalaması alındığı
zaman şart sağlanmıştır.

You might also like