Code covered by the BSD License  

Highlights from
MATLAB en zijn Symbolic Math Toolbox

image thumbnail

MATLAB en zijn Symbolic Math Toolbox

by

 

Leergang voor geïnteresseerden in de Computeralgebra - Systemen MATLAB en zijn Symbolic Math Toolbox

Ligger_2.m
%
% **************************
% * Script - file LIGGER_2 *
% **************************
%
% Script geschreven door Tjibbele Miedema, d.d. 13 april 2004
% -----------------------------------------------------------
%
% LIGGER_2 berekent de elastische lijn voor een ligger op twee steunpunten met
% behulp van de eindig - differentie methode. De lengte van de ligger is l.
% Deze lengte wordt verdeeld in n gelijke afstanden lambda. Dus op discrete
% punten geldt :
%
% x(i) = i * lambda
% l    = n * lambda
% 
% De waarde van n wordt ingevoerd.
%
% Er is een belastinggeval namelijk een over de gehele liggerlengte
% gelijkmatig verdeelde belasting f0.
%
% De differentie vergelijkingen zijn dimensieloos gemaakt. 
% Twee berekeningen vinden plaats, namelijk : 
%     met een rechtstreeks te bepalen rechter lid 
%     vervolgens ook met behulp van een gemodificeerd rechter lid,
%         volgens de theorie van de "equivalente puntlat" (zie Ghali).
%
clc   % schoon maken van het Command Window
clear % schoon maken van de workspace
%
% Opstellen van de eindig - differentie matrix :
%
disp(' ')
n  = input('Aantal interne deelpunten : ');
n1 = n + 1;
disp(' ')
diag = 2 * ones(1, n);
supd = - ones(1, n - 1);
subd = - ones(1, n - 1);
%
% Opstellen van beide rechter leden :
%     rl1 onmiddellijke volgend uit de differentie vergelijking
%     rl2 gemodificeerd
%
for i = 1 : n 
    rl1(i) = 192 / n1^4 * i * ((n1 - i) / (1 + 2 * i / n1));
end
for i = 1 : n 
    switch i
        case 1
            rl2(i) = (10 * rl1(i) + rl1(i + 1)) / 12;        
        case n 
            rl2(i) = (10 * rl1(i) + rl1(i - 1)) / 12;            
        otherwise
            rl2(i) = (10 * rl1(i) + rl1(i + 1) + rl1(i - 1)) / 12;
    end
end
%
% Beide lineaire stelsels oplossen met behulp van het Thomas ' alg.
%
w1 = TridiagonaalMatrix(subd, diag, supd, rl1, 0.5e-12);
w2 = TridiagonaalMatrix(subd, diag, supd, rl2, 0.5e-12);
%
% De analytische oplossing bepalen :
%
for i = 1 : n
    i1    = i / n1;
    wa(i) = 16 * i1^3 - 72 * i1^2 + (56 - 108 * log(3)) * i1 + ...
            36 * (1 + 2 * i1) * log(1 + 2 * i1);
end
%
% De uitvoer regelen :
%
disp('Niet - prismatische ligger op 2 steunpunten')
disp('-------------------------------------------')
disp(' ')
disp('E * I(x) = E * I0 * (1.0 + 2.0 * x / l)')
disp(' ')
disp('Kolom w1 volgens de eindig - differentie methode')
disp('Kolom w2 idem, met een gemodificeerd rechter lid')
disp('Kolom wa overeenkomstig de analytische oplossing')
disp(' ')
disp(' ---------------------------------------')
disp(' |  i |    w1         w2         wa    |')
disp(' ---------------------------------------')
for i = 1 : n
    disp(sprintf(' | %2d | %8.6f   %8.6f   %8.6f |',  i, w1(i), w2(i), wa(i)))
end
disp(' ---------------------------------------')
disp(' ')
%
% Tenslotte de elastische lijn plotten
%
%
% De plot waarden bepalen :
%
x  (1) = 0;
wp1(1) = 0;
wpa(1) = 0;
for i = 2 : n1
    x  (i) = i - 1;
    wp1(i) = w1(i - 1);
    wpa(i) = wa(i - 1);
end
x  (n1 + 1) = n1;
wp1(n1 + 1) = 0;
wpa(n1 + 1) = 0;
%
% Plotinstructies en annotaties
%
tex1   = 'Aantal inwendige punten : ';      
tex2   = int2str(n);                        % aantal inwendige punten naar string
tex    = ['\fontsize{16} \bf', tex1, tex2]; % concatenatie van 3 strings
ELASTL = plot(x, zeros(n1 + 1), x, wp1, ':', x, wpa, '--');
set(ELASTL, 'LineWidth', 2.6)
set(gca, 'YDIR', 'reverse')               % positieve y - as naar beneden
legend('\it x - as', 'Eindige Diff.', 'Analytisch', 3)
title('\fontsize{24} \bf Elastische lijn van ligger op twee steunpunten : \it Ligger\_2')
xlabel('\it x')
ylabel('\it Doorbuiging')
text(1.0, 0.10, tex)
grid
return

Contact us