Este tutorial ilustra la interacción entre Máxima y Scilab.
Resolvemos el álgebra y cálculo de las deflexiones para ujna viga con tres apoyos (estaticamente indeterminada) en Máxima, y luego usamos Scilab para graficar y obtener la deflexión máxima.
Determine el valor de "a" (entre 0 y 1), para el cual ocurre la máxima deflexión de la viga mostrada. Distancias en metros. La carga P, es de 1500kg-f.
clear clear all // Graficamos las deflexiones maximas evaluadas // previamente en Maxima // ------------------------------------------- // variando "a" // para determinar el "a" que genera la maxima deflexion // Se usa P = 15000 Nw // E*I = 1 (es decir en unidades de 1/(E*I) P=15000; // Carga aplicada Diam=0.05 E=2.11e11;I=%pi*Diam^4/64; // En unidades de (1/EI) // Soluciones de Maxima para las fuerzas y Constantes function [F, C]=FuerzasYCtes(a) // caso #1 if (0<a)&(a<1) then F(1)=((a^3-7*a+6)*P)/6; F(2)=-((a^3-5*a)*P)/4; F(3)=((a^3-a)*P)/12; C(1)=-((7*a^3-18*a^2+11*a)*P)/(18*E*I); C(2)=0 // caso #2 elseif (1<a)&(a<3) then F(1)=-((a^3-9*a^2+23*a-15)*P)/12; F(2)=((a^3-9*a^2+19*a-3)*P)/8; F(3)=-((a^3-9*a^2+11*a-3)*P)/24; C(1)=((a^3-9*a^2+23*a-15)*P)/(36*E*I); C(2)=0 else F(1)=0; F(2)=0;F(3)=0;C(1)=0;C(2)=0; end endfunction // ====== Deformaciones calculadas por maxima ========= // deformacion de la viga Caso #1 (0<a<1) // para 0<x<a function y=u1(x, a, F, C) y=(3*C(1)*x*E*I+F(1)*x^3)/(3*E*I)+C(2) endfunction // para a<x<1 function y=u2(x, a, F, C) y= -((x^3-3*a*x^2+3*a^2*x)*P-3*C(1)*x*E*I-F(1)*x^3)/(3*E*I)+(a^3*P-3*C(1)*a*E*I-F(1)*a^3)/(3*E*I)+(3*C(1)*a*E*I+F(1)*a^3)/(3*E*I)+C(2); endfunction // y para 1<x<3 function y=u3(x, a, F, C) y=-((x^3-3*a*x^2+3*a^2*x)*P-3*C(1)*x*E*I+(-F(2)-F(1))*x^3+3*F(2)*x^2-3*F(2)*x)/(3*E*I)+(a^3*P-3*C(1)*a*E*I-F(1)*a^3)/(3*E*I)+.. ((3*a^2-3*a+1)*P-3*C(1)*E*I-F(2)-F(1))/(3*E*I)-((3*a^2-3*a+1)*P-3*C(1)*E*I-F(1))/(3*E*I)+(3*C(1)*a*E*I+F(1)*a^3)/(3*E*I)+C(2); endfunction // deformacion de la viga Caso #2 (1<a<3) // para 0<x<a function y=u1b(x, a, Fb, Cb) y=(3*Cb(1)*x*E*I+Fb(1)*x^3)/(3*E*I)+Cb(2); endfunction // para a<x<1 function y=u2b(x, a, Fb, Cb) y= (3*Cb(1)*x*E*I+(Fb(2)+Fb(1))*x^3-3*Fb(2)*x^2+3*Fb(2)*x)/(3*E*I)-(3*Cb(1)*E*I+Fb(2)+Fb(1))/(3*E*I)+(3*Cb(1)*E*I+Fb(1))/(3*E*I)+Cb(2); endfunction // y para 1<x<3 function y=u3b(x, a, Fb, Cb) y=(3*Cb(1)*x*E*I+(-P+Fb(2)+Fb(1))*x^3+(3*a*P-3*Fb(2))*x^2+(3*Fb(2)-3*a^2*P)*x)/(3*E*I); y=y-(3*Cb(1)*a*E*I-a^3*P+(Fb(2)+Fb(1))*a^3-3*Fb(2)*a^2+3*Fb(2)*a)/(3*E*I); y=y+(3*Cb(1)*a*E*I+(Fb(2)+Fb(1))*a^3-3*Fb(2)*a^2+3*Fb(2)*a)/(3*E*I); y=y-(3*Cb(1)*E*I+Fb(2)+Fb(1))/(3*E*I); y=y+(3*Cb(1)*E*I+Fb(1))/(3*E*I); y=y+ Cb(2); endfunction //caso #1 function y=deflexion1(x, a, F, C) if (0<=x)&(x<a) then y=u1(x,a,F,C); elseif (a<=x)&(x<1) then y=u2(x,a,F,C); elseif (1<=x)&(x<=3) then y=u3(x,a,F,C); else y=0; end endfunction //caso #2 function y=deflexion2(x, a, F, C) if (0<=x)&(x<a) then y=u1b(x,a,F,C); elseif (a<=x)&(x<1) then y=u2b(x,a,F,C); elseif (1<=x)&(x<=3) then y=u3b(x,a,F,C); else y=0; end endfunction //perfil de toda la viga deflectada function u=deflexion(a) [F,C]=FuerzasYCtes(a); // Hallar reacciones xs=(0:0.01:3)'; // centimetro a centimetro if (0<a)&(a<1) then // Caso #1, for k=1:length(xs), u(k)=deflexion1(xs(k),a,F,C) end elseif (1<a)&(a<3) then // Caso #2, sus dos soluciones for k=1:length(xs), u(k)=deflexion2(xs(k),a,F,C) end else u = zeros(xs); end endfunction a=0:0.01:1 // variando a centimetro a centimetro manta=[] for k=1:length(a), u=deflexion(a(k)); // perfil de la viga flectada manta=[manta,u]; // guardar el perfil dela viga flectada um(k)=max(abs(u)); // maxima deflexion para este valor de a printf(".") end [u_max,k_max]=max(um); // valor del maximo de los maximos, a_max=a(k_max); scf(); plot(a,um,"r") title("Deformacion maxima en la viga de tres apoyos Variando a") //scf() //plot3d(0:0.01:3,a,manta)