clear all; clc; format compact; close all %% ADATBEVITEL ================================================================= l = 8; % rud hossza s = [2 2 % megfogas (x koord., kenyszer tipusa: 1: gorgo, 2: csuklo 3: fal) 6 1]; F = [8 2 2]; % koncentralt erok (x koord., Fx, Fy) q = [0 6 -4]; % megoszlo terhelesek (kezdopont, vegpont, intenzitas) M = [4 4 8 -4]; % nyomatek (x koord., ertek) n = 10; % felosztas surusege sw = 0; % hasznalt szoftver (0 = Octave, 1 = Matlab) %% TAMASZTOEROK ================================================================ nq = size(q,1); % megoszlo terhelesek szama if nq > 0 % ha van megoszlo terheles xA = q(:,1); % megoszlo terhelesek kezdopontja xB = q(:,2); % megoszlo terhelesek vegpontja xC = (xA+xB)./2; % megoszlo terhelesek kozeppontja Fq = (xB-xA).*q(:,3); % megoszlo terhelesek eredo ereje else % egyebkent (ha nincs megoszlo terheles) xA = 0; xB = 0; xC = 0; Fq = 0; end if size(s,1) == 2 && sum(s(:,2)) == 3 % kettamaszu tarto pin = find(s(:,2) == 2); % csuklo helye a megfogas matrixban rol = find(s(:,2) == 1); % gorgo helye a megfogas matrixban xP = s(pin,1); % csuklo x koordinataja xR = s(rol,1); % gorgo x koordinataja MPF = sum((F(:,1)-xP).*F(:,3)); % csuklora szamitott nyomatek erobol MPFq = sum((xC-xP).*Fq); % csuklokra szamitott nyomatek megoszlo terhelesbol MM = sum(M(:,2)); % koncentralt nyomatekok osszege MRF = sum((F(:,1)-xR).*F(:,3)); % gorgore szamitott nyomatek erobol MRFq = sum((xC-xR).*Fq); % gorgore szamitott nyomatek megoszlo terhelesbol Ry = -(MPF+MPFq+MM)/(xR-xP); % fuggoleges tamasztoero gorgonel Py = -(MRF+MRFq+MM)/(xP-xR); % fuggoleges tamasztoero csuklonal Px = -sum(F(:,2)); % vizszintes tamasztoero csuklonal F = [F;xP,Px,Py;xR,0,Ry]; % kulso erok matrixa elseif size(s,1 ) == 1 && s(:,2) == 3 % befalazott tarto xW = s(:,1); % befalazas x koordinataja MWF = sum((F(:,1)-xW).*F(:,3)); % befalazasra szamitott nyomatek erobol MWFq = sum((xC-xW).*Fq);%befalazasra szamitott nyomatek megoszlo terhelesbol MM = sum(M(:,2)); % koncentralt nyomatekok osszege MWz = -(MWF+MWFq+MM); % tamasztonyomatek Wx = -sum(F(:,2)); % vizszintes tamasztoero Wy = -(sum(F(:,3)+sum(Fq))); % fuggoleges tamasztoero F = [F;xW,Wx,Wy]; % kulso erok matrixa M = [M;xW,MWz]; % kulso nyomatekok matrixa else % egyeb megfogas eseten: disp('nem tamogatott'); end %% KULSO EROK ES NYOMATEKOK KOORDINANTANKENT ============================== Fxmat = F(F(:,2)~=0,[1,2]); % x iranyu erok matrixa % (itt meg 1 pontban tobb Fx is lehet) [xFx,~,ind] = unique(Fxmat(:,1)); % x iranyu erok x koordinataja sorbarakva Fxmag = accumarray(ind,Fxmat(:,2)); % x iranyu erok nagysaga sorbarakva Fymat = F(F(:,3)~=0,[1,3]); % y iranyu erok matrixa % (itt meg 1 pontban tobb Fy is lehet) [xFy,~,ind] = unique(Fymat(:,1)); % y iranyu erok x koordinataja sorbarakva Fymag = accumarray(ind,Fymat(:,2)); % y iranyu erok nagysaga sorbarakva [xMz,~,ind] = unique(M(:,1)); % nyomatekok matrixa Mzmag = accumarray(ind,M(:,2)); % nyomatekok nagysaga %% FELOSZTAS ELKESZITESE ======================================================= xK = [0;l;xFx;xFy;xMz;xA;xB]; % kituntetett pontok xK = unique(xK); % duplikaciok torlese xL = linspace(0,l,n+1)'; % felosztas pontjai xLK = union(xL,xK); % osszes osztopont xLKK = [xLK;xK]; % kituntetett pontok duplikalasa x = sort(xLKK); % osztopontok sorbarendezese nx = size(x,1); % osztopontok szama [~,iFx] = ismember(xFx,x); % x iranyu erok osztopont sorszama [~,iFy] = ismember(xFy,x); % y iranyu erok osztopont sorszama [~,iMz] = ismember(xMz,x); % nyomatekok osztopont sorszama %% IGENYBEVETELI FUGGVENYEK =============================================== % Rudero fuggveny N = zeros(nx,1); % rudero fuggveny inicializalasa N(iFx+sw) = -Fxmag; % ruderok elhelyezese N = cumsum(N); % rudero fuggveny % Nyiroero fuggveny Fy = zeros(nx,1); % nyiras koncentralt erokbol - inicializalas Fy(iFy+sw) = Fymag; % Fy koncentralt erok elhelyezese Fy = cumsum(Fy); % Fy koncentralt erokbol adodo nyiroerofuggveny qy = zeros(nx,1); % megoszlo terheles fuggveny inicializalasa for i = 1:nq % az osszes megoszlo terhelesre q1 = (x > q(i,1) & x <= q(i,2))*q(i,3); % intenzitas szakaszonkent qy = qy + q1; % elhelyezes megoszlo terheles függvenybe end dFq = qy(2:end).*(x(2:end)-x(1:end-1)); % elemi erok megoszlo terhelesbol intdFq = [0;cumsum(dFq)]; % elemi erok kumulativ osszegzese % (= megoszlo terheles integralja) Ty = Fy + intdFq; % nyiroero fuggveny % hajlitonyomateki fuggveny Mz = zeros(nx,1); % inicializalas Mz(iMz+sw) = Mzmag; % Mz koncentralt nyomatekok elhelyezese Mz=cumsum(Mz); % Mz koncentralt nyomatekokbol adodo hajlitoigenybevetel dM = (Ty(1:end-1)+Ty(2:end))./2.*(x(2:end)-x(1:end-1)); % elemi nyomatekok intdT = [0;cumsum(dM)]; % elemi nyomatekok kumulativ osszegzese % (= nyiroero fuggveny integralja) Mhz = Mz - intdT; % hajlitoigenybevetli fuggveny igb = [x,N,Ty,Mhz] % igenybeveteli fuggvenyek kirasa Nmax = max(abs(N)); Nmaxloc = x(N==(Nmax)); Nmaxloc = Nmaxloc(1); Tmax = max(abs(Ty)); Tmaxloc = x(Ty==(Tmax)); Tmaxloc = Tmaxloc(1); Mmax = max(abs(Mhz)); Mmaxloc = x(Mhz==(Mmax)); Mmaxloc = Mmaxloc(1); maximums = [Nmaxloc, Nmax; Tmaxloc, Tmax; Mmaxloc, Mmax] %% ABRAZOLAS ============================================================== figure % rudero abra ax1 = axes('Position',[0.05,0.85,0.9,0.1]); area(ax1,x,N,'LineWidth',3,'FaceColor',[1 0 0],'FaceAlpha',0.5); grid (ax1,'on') ylabel(ax1,'rudero') % nyiroero abra ax2 = axes('Position',[0.05,0.45,0.9,0.37]); area(ax2,x,Ty,'LineWidth',3,'FaceColor',[0 1 0],'FaceAlpha',0.5); grid (ax2,'on') ylabel(ax2,'nyiroero') % hajlitoigenybeveteli abra ax3 = axes('Position',[0.05,0.05,0.9,0.37]); area(ax3,x,Mhz,'LineWidth',3,'FaceColor',[0 0 1],'FaceAlpha',0.5); grid (ax3,'on') ylabel(ax3,'hajlitonyomatek')