Ana Sayfa / MATLAB / Python / Problem 2
2 Açıklıklı Sürekli Kiriş — Doğrudan Rijitlik
L₁=L₂=6 m, q₁=q₂=20 kN/m. Beklenen: RA=RC=45 kN, RB=150 kN (F5 Problem 2'den). Bu, üç moment teoreminden tamamen bağımsız bir yöntemdir — Kaynak Denetimi Vaka 2'de üç moment aracındaki hatayı yakalamak için kullanıldı.
PYTHON continuous_beam_stiffness.py
import numpy as np
L1, L2 = 6.0, 6.0
q1, q2 = 20.0, 20.0
EI = 1.0 # oransal cozum yeterli
def beam_stiffness(L, EI):
return EI/L**3 * np.array([
[12, 6*L, -12, 6*L],
[6*L, 4*L**2, -6*L, 2*L**2],
[-12, -6*L, 12, -6*L],
[6*L, 2*L**2, -6*L, 4*L**2]
])
def fixed_end_forces(q, L):
return np.array([q*L/2, q*L**2/12, q*L/2, -q*L**2/12])
# Global sistem: 3 dugum x 2 DOF (v, theta) = 6 serbestlik derecesi
K = np.zeros((6, 6)); F = np.zeros(6)
k1 = beam_stiffness(L1, EI); dof1 = [0, 1, 2, 3]
for i in range(4):
for j in range(4):
K[dof1[i], dof1[j]] += k1[i, j]
k2 = beam_stiffness(L2, EI); dof2 = [2, 3, 4, 5]
for i in range(4):
for j in range(4):
K[dof2[i], dof2[j]] += k2[i, j]
fef1 = fixed_end_forces(q1, L1)
fef2 = fixed_end_forces(q2, L2)
for i in range(4):
F[dof1[i]] -= fef1[i]
F[dof2[i]] -= fef2[i]
# Sinir sartlari: v1=v2=v3=0 (3 dusey mesnet), donmeler serbest
free = [1, 3, 5]
d_free = np.linalg.solve(K[np.ix_(free, free)], F[free])
d = np.zeros(6)
for i, idx in enumerate(free):
d[idx] = d_free[i]
R = K.dot(d) - F
print(f"RA = {R[0]:.1f} kN, RB = {R[2]:.1f} kN, RC = {R[4]:.1f} kN")
print(f"Toplam = {R[0]+R[2]+R[4]:.1f} kN")
MATLAB continuous_beam_stiffness.m
L1 = 6.0; L2 = 6.0;
q1 = 20.0; q2 = 20.0;
EI = 1.0;
% Eleman 1 (A-B) rijitlik matrisi - dogrudan satir ici (fonksiyon yok,
% cunku betik-ici yerel fonksiyonlar Octave'da ve bazi MATLAB surumlerinde
% .m dosyasi olarak DOGRUDAN calistirildiginda calismiyor - bu platform
% tarafindan Octave ile test edilip dogrulandi, 05.08.2026)
k1 = EI/L1^3 * [ 12 6*L1 -12 6*L1;
6*L1 4*L1^2 -6*L1 2*L1^2;
-12 -6*L1 12 -6*L1;
6*L1 2*L1^2 -6*L1 4*L1^2 ];
% Eleman 2 (B-C) rijitlik matrisi
k2 = EI/L2^3 * [ 12 6*L2 -12 6*L2;
6*L2 4*L2^2 -6*L2 2*L2^2;
-12 -6*L2 12 -6*L2;
6*L2 2*L2^2 -6*L2 4*L2^2 ];
% Sabit-uc kuvvetleri (fixed-end forces), UDL icin
fef1 = [ q1*L1/2; q1*L1^2/12; q1*L1/2; -q1*L1^2/12 ];
fef2 = [ q2*L2/2; q2*L2^2/12; q2*L2/2; -q2*L2^2/12 ];
% Global sistem: 3 dugum x 2 DOF (v, theta) = 6 serbestlik derecesi
K = zeros(6,6); F = zeros(6,1);
dof1 = [1 2 3 4];
K(dof1, dof1) = K(dof1, dof1) + k1;
dof2 = [3 4 5 6];
K(dof2, dof2) = K(dof2, dof2) + k2;
F(dof1) = F(dof1) - fef1;
F(dof2) = F(dof2) - fef2;
% Sinir sartlari: v1=v2=v3=0, MATLAB 1-indeksli oldugu icin donme DOF'lari [2 4 6]
free = [2 4 6];
d_free = K(free, free) \ F(free);
d = zeros(6,1);
d(free) = d_free;
R = K*d - F;
fprintf('RA = %.1f kN, RB = %.1f kN, RC = %.1f kN\n', R(1), R(3), R(5));
fprintf('Toplam = %.1f kN\n', R(1)+R(3)+R(5));
✓ Bu kod GNU Octave ile gerçekten çalıştırıldı — çıktı yukarıdaki kutuyla birebir eşleşti. 05.08.2026 düzeltmesi: İlk sürüm, betik içi yerel fonksiyonlar (MATLAB kuralına göre dosya sonunda tanımlı) kullanıyordu — bu, "kural gereği doğru" görünmesine rağmen Octave'da (ve bazı MATLAB sürümlerinde) .m dosyası olarak DOĞRUDAN çalıştırıldığında hata veriyordu ('beam_stiffness' undefined). Gerçekten çalıştırılmadan bu fark edilemezdi. Yerel fonksiyonlar kaldırılıp matrisler satır içi kuruldu — artık evrensel olarak çalışıyor.