(* Resolução do Problema 7 *)
(* nós *)
xn={0,0.25,0.5,0.75,1};
nn=Length[xn];
(* valores nodais tentativa *)
un={un1,un2,un3,un4,un5};
(* valores nodais teste *)
wn={wn1,wn2,wn3,wn4,wn5};
(* funções de forma lineares *)
ll[xi_]:={(1-xi)/2,(1+xi)/2};
(* transformação de coordenadas *)
xid[x1_,x2_,x_]:=2*(x-x1)/(x2-x1)-1;
(* função de interpolação por troços *)
basic[i_,x_,un_]:={ll[xid[xn[[i]],xn[[i+1]],x]].{un[[i]],un[[i+1]]},x>xn[[i]]&&x≤xn[[i+1]]};
joined[x_,un_]:=Table[basic[i,x,un],{i,nn-1}];
interpl[x_,un_]:=Piecewise[joined[x,un]];
(* funções de tentativa e de teste *)
u[x_]:=interpl[x,un];
w[x_]:=interpl[x,wn];
(* integrando da forma fraca *)
integrando=-D[u[x],x]*D[w[x],x]-w[x]*u[x]+w[x];
(* integral da forma fraca *)
eq=Integrate[integrando,{x,xn[[1]],xn[[nn]]}];
(* forças *)
f=D[eq,{wn}];
(* forças na origem *)
rulezero=Table[un[[i]]->0,{i,nn}];
f0=f/.rulezero;
f0//MatrixForm
(* rigidez é a derivada das forças*)
k=-D[f,{un}];
k//MatrixForm
(* Matriz das condições de fronteira essenciais *)
transf={{0,1,0,0,0},{0,0,1,0,0},{0,0,0,1,0}};
(* Transformação das forças e rigidez *)
fred=transf.f0;
kred=transf.k.Transpose[transf];
(* Solução do problema linear *)
ured=Inverse[kred].fred;
unod=Transpose[transf].ured;
(* Interpolação *)
usol[x_]:=interpl[x,unod];
(* Resultados *)
Plot[{usol[x],-(((E^(-x)) (-1+(E^x)) (-E+(E^x)))/(1+E))},{x,0,1}]