Soru sorBirinci Dereceden Dif. Denklemin Çözümü İçin İleri Fark, Geri fark ve Merkez Fark Yöntemleri
mezzomorta tarafından 4 yıl önce soruldu

Merhaba MATLAB Türkiye ekibi; aşağıdaki sorunun a şıkkında mavi ile yazılan yerleri ekleyerek programı çalışır hale getirdim. Ancak b şıkkı için uğraşmama rağmen istediğim sonucu alamadım. b şıkkı için yardımcı olur musunuz. İlginize teşekkür ederim.

a) Aşağıdaki ileri_fark isimli Matlab fonksiyonunu,
?′=2−?−4?, ?(?0)=?0
denklemini ileri farklar formülü ile çözecek duruma getiriniz. Bunun için boşluklara gelmesi gereken fonksiyonları ve operatörleri açıkça yazınız. Denklemin ?(0)=2 başlangıç değeri ile h=0.01 adım aralığı kullanarak nümerik çözüm değerlerini 0<?<1 arasında hesaplamak için çağırılması gereken Matlab komutundaki belirtilen boşlukları doldurunuz.

b) a sıkkında sorulan soruyu, geri farklar ve merkezi farklar kullanarak bir kez daha çözünüz. Bu çözümler için geri_fark ve merkezi_fark isimli iki fonksiyon yazınız ve bu fonksiyonları kullanmak için gereken Matlab komutlarını açıkça belirtiniz.

a)

function [y,t] = ileri_fark(h,n,t0,y0)
% BIRINCI DERECEDEN DIF. DENKLEMIN COZUMU ICIN İLERİ FARK YONTEMI KULLANIMI

% dy/dt=ff(t) olan denklemin cozumu
% giris parametreleri
% h = adim genisligi
% n = son adim indisi
% t0 ve y0 y(t0)=y0 baslangic degerleri
% Çağırılması gereken komut: [y_num,t_num]=ileri_fark(0.01,10,0,2);
t=zeros(1,n+1);
y=zeros(1,n+1);
y(1)=y0;
t(1)=t0;
for i=2:n+1
t(i)=t(i-1)+h;
y(i)=y(i-1)+h*ff(t(i-1));

end

end

function ress = ff(t)
ress=2-exp(-4*t);
end
1 Cevap
sayginer Yönetici tarafından 4 yıl önce cevaplandı

 Merhaba,
b şıkkını yapmaya çalışırken MATLAB açısından karşılaştığınız sorun nedir?
Aşağıya İleri Fark, Geri fark ve Merkez Fark sonuçlarını Analitik çözüm ile karşılaştıran bir örnek bırakıyorum.
 

Fonksiyonum = @(x) exp(-x).*sin(3*x);
dFonksiyonum = @(x) -exp(-x).*sin(3*x)+ 3*exp(-x).*cos(3*x);
x=linspace(0,4,101);
F=Fonksiyonum(x);
h=x(2)-x(1);
xMerkez=x(2:end-1);
dFMerkez=(F(3:end)-F(1:end-2))/(2*h);
xIleri=x(1:end-1);
dFGeri=(F(2:end)-F(1:end-1))/h;
xGeri=x(2:end);
dFgeri=(F(2:end)-F(1:end-1))/h;
plot(x,dFonksiyonum(x));
hold on
plot(xMerkez,dFMerkez)
plot(xIleri,dFGeri);
plot(xGeri,dFgeri);
legend('Analitik Cozum','Merkez Fark','Ileri Fark','Geri Fark')

Kaynak: https://www.mathworks.com/matlabcentral/answers/213823-forward-backward-and-central-differences