外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
maximaではりを解いています。
(はりを解く(両端ばね+鉛直・回転変位:山形分布荷重(2)))


スクリプト例
:はりを解く(両端ばね+鉛直・回転変位:山形分布荷重(2))
@echo off
path C:\maxima-5.49.0\bin;%path%
more +4 %0 | maxima --very-quiet & pause & goto:eof
/*
: /\
: VA TA / │w \ VB TB
: |//______│______\|/
◎ ◎ KB
> > KV
: 0 a L ---> x
: |---------L---------|
y
|
|_____x
/
z
KB : 回転ばね kNm/rad
KV : 鉛直ばね kN/m
TA, TB : たわみ角 左回りが正 rad
VA, VB : たわみ 上方向が正 m
w : 分布荷重 上方向が正 kN/m
a : 荷重の位置 m
Q1, Q2 : せん断力 上方向が正 kN
M1, M2 : 曲げモーメント 左回りが正 kNm
L : スパン長 m
EI : 曲げ剛性(一定)
エンコード UTF-8(BOM無し) で保存して実行してください。
*/
assume(L>0,a>=0,L>=a)$
p1:-w/a*x$
p2:-w/(L-a)*(L-x)$
/*
define(Q1(x), C1 + integrate(p1, x))$
define(M1(x), C2 + integrate(Q1(x), x))$
define(T1(x), C3 - integrate(M1(x)/EI, x))$
define(V1(x), C4 + integrate(T1(x), x))$
define(Q2(x), C5 + integrate(p2, x))$
define(M2(x), C6 + integrate(Q2(x), x))$
define(T2(x), C7 - integrate(M2(x)/EI, x))$
define(V2(x), C8 + integrate(T2(x), x))$
s: solve(
[T1(0)=-M1(0)/KB+TA, V1(0)= Q1(0)/KV+VA,
T2(L)= M2(L)/KB+TB, V2(L)=-Q2(L)/KV+VB,
Q1(a)=Q2(a), M1(a)=M2(a), T1(a)=T2(a), V1(a)=V2(a)],
[C1, C2, C3, C4, C5, C6, C7, C8])$
[Q1, M1, T1, V1]: ev([Q1(x), M1(x), T1(x), V1(x)], s)$
[Q2, M2, T2, V2]: ev([Q2(x), M2(x), T2(x), V2(x)], s)$
RA:ev(Q1,x=0)$
RB:-ev(Q2,x=L)$
MA:ev(M1,x=0)$
MB:-ev(M2,x=L)$
print("RA:",string(factor(RA)))$
print("RB:",string(factor(RB)))$
print("MA:",string(factor(MA)))$
print("MB:",string(factor(MB)))$
print("Q1-RA:",string(factor(Q1-RA)))$
print("M1-MA-RA*x:",string(factor(M1-MA-RA*x)))$
print("T1-TA+MA/KB+(MA*x+RA*x^2/2)/EI:",string(factor(T1-TA+MA/KB+(MA*x+RA*x^2/2)/EI)))$
print("V1-VA-(TA-MA/KB)*x-RA/KV+(MA*x^2/2+RA*x^3/6)/EI:",string(factor(V1-VA-(TA-MA/KB)*x-RA/KV+(MA*x^2/2+RA*x^3/6)/EI)))$
print("Q2+RB:",string(factor(Q2+RB)))$
print("M2+MB+RB*(x-L):",string(factor(M2+MB+RB*(x-L))))$
print("T2-TB+MB/KB-(MB*(x-L)+RB*(x-L)^2/2)/EI:",string(factor(T2-TB+MB/KB-(MB*(x-L)+RB*(x-L)^2/2)/EI)))$
print("V2-VB-(TB-MB/KB)*(x-L)-RB/KV-(MB*(x-L)^2/2+RB*(x-L)^3/6)/EI:",string(factor(V2-VB-(TB-MB/KB)*(x-L)-RB/KV-(MB*(x-L)^2/2+RB*(x-L)^3/6)/EI)))$ quit()$
*/
RA: (L*(KB*KV*((2*a-3*L)*a^2-L^2*(3*a-7*L))-20*EI*(KV*L*(a-2*L)-6*KB))*w+120*EI*KB*KV*(2*(VB-VA)-L*(TB+TA))
)/(20*((KB*L+6*EI)*KV*L^2+24*EI*KB))$
RB: L*w/2-RA$
MA:-KB*(L*(KV*L*((3*(KB*L+2*EI)*a-(7*KB*L+24*EI)*L)*a^2+L^2*(3*KB*L+16*EI)*(a+L))+60*EI*(KB*a*(3*L-a)+2*EI*(2*a-L)))*w
+120*EI*(KV*L*(3*(KB*L+2*EI)*(VB-VA)-L*(KB*L*(TB+2*TA)+6*EI*TA))+12*EI*KB*(TB-TA))
)/(60*(KB*L+2*EI)*((KB*L+6*EI)*KV*L^2+24*EI*KB))$
MB:-KB*(L*(KV*L*((3*(KB*L+2*EI)*a-2*(KB*L-3*EI)*L)*a^2-2*L^2*(KB*L+7*EI)*(a+L))+60*EI*(KB*(a-L)*(a+2*L)+2*EI*(2*a-L)))*w
+120*EI*(KV*L*(3*(KB*L+2*EI)*(VB-VA)-L*(KB*L*(2*TB+TA)+6*EI*TB))-12*EI*KB*(TB-TA))
)/(60*(KB*L+2*EI)*((KB*L+6*EI)*KV*L^2+24*EI*KB))$
Q1: RA-w*x^2/(2*a)$
M1: MA+RA*x-w*x^3/(6*a)$
T1: TA-MA/KB-(MA*x+RA*x^2/2)/EI+w*x^4/(24*EI*a)$
V1: VA+(TA-MA/KB)*x+RA/KV-(MA*x^2/2+RA*x^3/6)/EI+w*x^5/(120*EI*a)$
Q2:-RB-w*(x-L)^2/(2*(a-L))$
M2:-MB-RB*(x-L)-w*(x-L)^3/(6*(a-L))$
T2: TB-MB/KB+(MB*(x-L)+RB*(x-L)^2/2)/EI+w*(x-L)^4/(24*EI*(a-L))$
V2: VB+(TB-MB/KB)*(x-L)+RB/KV+(MB*(x-L)^2/2+RB*(x-L)^3/6)/EI+w*(x-L)^5/(120*EI*(a-L))$
p:if a>x then p1 else p2$
Q:if a>x then Q1 else Q2$
M:if a>x then M1 else M2$
T:if a>x then T1 else T2$
V:if a>x then V1 else V2$
KB:1000$
KV:1000*10$
[TA, TB]: [-1,-2]/1000$
[VA, VB]: [-1,-2]/1000$
w:-10$
a:2.0$
[L,B,D,E,G,fs]: [5,0.15,0.30,6.5,6.5/15,1.2]$
EI: E * B * D^3 / 12 * 10^6$ /* kN*m*m */
plot2d([Q,M,T*1000,V*1000,p], [x,0,L], grid2d, [title, "Euler-Bernoulli's beam"],
[legend,"Q kN","M kNm","T x1/1000 rad","V mm","p kN/m"],
[color,red,blue,green,magenta,brown])$
?sleep(10)$
quit()$
(計算結果)
L=5.0m
KB=1000 kNm/rad
KV=10000 kN/m
VA=-1/1000 m
VB=-2/1000 m
TA=-1/1000 rad
TB=-2/1000 rad
w=-10 kN/m
a=2.0m
B x D = 150x300mm
E65-F225 構造用集成材 すぎ(JAS)

両端にばねがあり、そこにたわみとたわみ角を与えたはりの計算式を導入しました。
分布荷重 p があるとき、計算式には荷重項が追加されます。
荷重項は
Q += ∫ p dx
M += ∫∫ p dx dx
T -= ∫∫∫ p dx dx dx / EI
V -= ∫∫∫∫ p dx dx dx dx / EI
となるイメージです。