No BSD License  

Highlights from
Several kinds of Mathematical examples!

from Several kinds of Mathematical examples! by Giovani Tonel
Here there are several kinds of Mathematical problems!

mesh06_tq(p,e,t,q);
function [p1,p2,e1,t1,q1] = mesh06_tq(p,e,t,q);
% Eckart Gekeler, Universitaet Stuttgart, Release 20.01.06
% Berechnung der Zwischenpunkte bei Dreiecken und Vierecken
% p1      : Zwischenpunkte der Dreiecke
% p2      : Zwischenpunkte der Vierecke
% t1(:,I) : Nrn der Zwischenpunkte in t(:,I);
% q1(:,I) : Nrn der Zwischenpunkte in q(:,I);
% e(6,I)  : Nr. des Zwischenpunktes in e(:,I);
% e WIRD DURCH EINE ZEILE ERGAENZT!
M = size(p,2); 
p1 = []; p2 = []; t1 = []; q1 = [];
e1 = [e;zeros(1,size(e,2))];
% -- Dreiecke --------------------
if ~isempty(t), MA = 0;
   for I = 1:size(t,2)
      M1 = MA+1; M2 = MA+2; M3 = MA+3;
      t1 = [t1,[M1; M2; M3]];
      J   = t(1:3,I);
      ZWP = [(p(:,J(1))+p(:,J(2)))/2, ...
            (p(:,J(2))+p(:,J(3)))/2, ...
            (p(:,J(3))+p(:,J(1)))/2];
      p1  = [p1,ZWP];
      MA  = MA + 3;
   end
   % -- doppelte Zwischenknoten beseitigen ----
   [M1,N1] = size(t1);
   [p1,I,J] = unique(p1','rows');
   p1 = p1'; C = t1(:); D = J(C);
   t1 = reshape(D,M1,N1);
   t1 = t1 + M; 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % Zwischenpunkte fuer Randstuecke
   for I = 1:size(e,2)
      ZWP = (p(:,e(1,I)) + p(:,e(2,I)))/2;
      DIFF = p1 - ZWP*ones(1,size(p1,2));
      NORMDIFF2 = DIFF(1,:).*DIFF(1,:) + DIFF(2,:).*DIFF(2,:);
      K = min(find(NORMDIFF2 < 100*eps));
      if ~isempty(K), e1(6,I) = M + K; end 
   end
end
% --- Vierecke -------------------------
if ~isempty(q),
   N = size(p1,2); q1 = []; MA = 0;
   for I = 1:size(q,2)
      M1 = MA+1; M2 = MA+2; M3 = MA+3; M4 = MA+4;
      q1 = [q1,[M1; M2; M3; M4]];
      J   = q(1:4,I);
      ZWP =[(p(:,J(1)) + p(:,J(2)))/2, ...
            (p(:,J(2)) + p(:,J(3)))/2, ...
            (p(:,J(3)) + p(:,J(4)))/2, ...
            (p(:,J(4)) + p(:,J(1)))/2];
      p2  = [p2,ZWP];
      MA  = MA + 4;
   end
   % -- doppelte Zwischenknoten beseitigen ----
   [M1,N1] = size(q1);
   [p2,I,J] = unique(p2','rows');
   p2 = p2'; C = q1(:); D = J(C);
   q1 = reshape(D,M1,N1);
   % -- Zwischenpunkte fuer Randstuecke --------
   for I = 1:size(e,2)
      ZWP = (p(:,e(1,I)) + p(:,e(2,I)))/2;
      DIFF = p2 - ZWP*ones(1,size(p2,2));
      NORMDIFF2 = DIFF(1,:).*DIFF(1,:) + DIFF(2,:).*DIFF(2,:);
      K = min(find(NORMDIFF2 < 100*eps));
      if ~isempty(K), e1(6,I) = M + N + K; end 
   end
   % -- gemeinsame Kanten beruecksichtigen -----
   M = size(p,2); N = size(p1,2);
   q1 = M + N + q1;   
   p3 = [p,p1,p2]; 
   [p3,q1] = mesh04(p3,q1);  % wg. Ordnung
   p2 = p3(:,M+N+1:size(p3,2));
   % -- Zwischenpunkte fuer Randstuecke --------
   for I = 1:size(e,2)
      ZWP = (p(:,e(1,I)) + p(:,e(2,I)))/2;
      DIFF = p2 - ZWP*ones(1,size(p2,2));
      NORMDIFF2 = DIFF(1,:).*DIFF(1,:) + DIFF(2,:).*DIFF(2,:);
      K = min(find(NORMDIFF2 < 100*eps));
      if ~isempty(K), e1(6,I) = M + N + K; end 
   end
end 
% -- Probe auf Eindeutigkeit
%   AUX = [p,p1,p2];
%[DD,I,J] = unique(AUX','rows');
%II = sort(I');
%JJ = sort(J');
%DIFF = norm(II - JJ)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


Contact us at files@mathworks.com