WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FEM, Newton, OST, Numerik Stimmt das so?

 

AnonymousNumerik123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2016, 16:52     Titel: FEM, Newton, OST, Numerik Stimmt das so?
  Antworten mit Zitat      
Code:

    clear; clc; hold off
    r=0.1;
    E = [1,2,6,5;2,3,7,6;3,4,8,7;5,6,10,9;6,7,11,10;7,12,14,11;7,8,13,12;9,10,16,15;10,11,17,16;11,14,18,17];
    K = [0,0;0.1,0;0.2,0;0.3,0;0,0.1;0.1,0.1;0.2,0.1;0.3,0.1;0,0.2;0.1,0.2;0.2,0.2;0.3-r*sin(pi/6),0.3-r*cos(pi/6);0.3,0.3-r;0.3-r*cos(pi/6),0.3-r*sin(pi/6);0,0.3;0.1,0.3;0.15,0.3;0.3-r,0.3];
    n = 3;
   
    res=1;
    T_0=300;
    T = T_0*ones(18,1);
    T(1:4)=600;
   
    nodes=zeros(4,2);
 
    res_min=10^-8;
    itermax=100;
    dT=zeros(18,1);
    n_newton=0;
   
while n_newton<=itermax && res>=res_min
    f_gl=zeros(18,1); j_gl=zeros(18);
    for e=1:length(E)
       J=zeros(4);
       F=zeros(4);
       for h=1:4 %Geschlossene Schleife zum einlesen der nodes
                nodes(h,1) = K(E(e,h),1);
                nodes(h,2) = K(E(e,h),2);
       end
       
       w = gw2dref(n); x = gx2dref(n);
       for g=1:length(w)    
            dN = linquadderivref(x(g,1),x(g,2)); N = linquadref(x(g,1),x(g,2))';
            [Jacobi,detJ,invJ] = getJacobian(nodes,x(g,1),x(g,2));
            c1=10^6; lambda=48; c2=10^3;
           
           
            for i=1:4
                temp=0;
                for j=1:4
                    temp=temp+N(j,1)*T(E(e,j));
                end
                for j=1:4
                    Jtemp(i,j)=((lambda*(dN(i,:)*invJ)*(dN(j,:)*invJ)')-(N(i,1)*N(j,1)*c1*c2/(temp)^2)*exp(-c2/temp))*w(g)*detJ;
                    Ftemp(i,j)=lambda*(dN(i,:)*invJ)*(dN(j,:)*invJ)'*T(E(e,j))*w(g)*detJ;
   
                end
                Ftemp(i,j)=Ftemp(i,j)-N(i,1)*c1*exp(-c2/temp)*w(g)*detJ;
            end
            J=J+Jtemp;
            F=F+Ftemp;
       end
       
     
       for i=1:4;
           for j=1:4
                   j_gl(E(e,i),E(e,j)) = j_gl(E(e,i),E(e,j)) + J(i,j);
                   f_gl(E(e,i),1)=f_gl(E(e,i),1)-F(i,j);
           end                
       end
   
   
   
        D1 = [1,2,3,4]; D2 = [12,13,14,18];
        T1 = 600; T2 = 300;
        for i=1:4
            for j=1:4
                if E(e,j)==D1(i)
                    f_gl(E(e,j),1)=0;
                    %T(E(e,j),1)=T1;
                    j_gl(E(e,j),:)=0;
                    j_gl(E(e,j),E(e,j))=1;
                elseif E(e,j)==D2(i)
                    %T(E(e,j),1)=T2;
                    f_gl(E(e,j),1)=0;
                    j_gl(E(e,j),:)=0;
                    j_gl(E(e,j),E(e,j))=1;
                end            
            end
        end
    end
    dT=j_gl\f_gl;
    T=T+dT;
    n_newton=n_newton+1;
    res=norm(f_gl,2);
end

quadplot(K,E,T)
 


Code:

    % Blatt 8 Aufgabe 1
    clear; clc; hold off

    E = [1,2,6,5;2,3,7,6;3,4,8,7;5,6,10,9;6,7,11,10;7,12,14,11;7,8,13,12;9,10,16,15;10,11,17,16;11,14,18,17];
    K = [0,0;0.1,0;0.2,0;0.3,0;0,0.1;0.1,0.1;0.2,0.1;0.3,0.1;0,0.2;0.1,0.2;0.2,0.2;0.3-0.02*sin(pi/6),0.3-0.02*cos(pi/6);0.3,0.28;0.3-0.02*cos(pi/6),0.3-0.02*sin(pi/6);0,0.3;0.1,0.3;0.15,0.3;0.28,0.3];
    n = 2;
    tmax=0;
 while(1)
    T_0=300;
    T = T_0*ones(18,1);
    nodes=zeros(4,2);
    timestep = 500;
    for t=1:((tmax/timestep)) %Schleife OST
        a=zeros(18); %Initialisierung der Globalen Matrizen
        f=zeros(18,1);

        for p=1:length(E) %Schleife über Elemente
            M=zeros(4); A=zeros(4); B=zeros(4); F=zeros(4,1); %Initialisierung der lokalen Matrizen
            for j=1:4 %Geschlossene Schleife zum einlesen der nodes
                nodes(j,1) = K(E(p,j),1);
                nodes(j,2) = K(E(p,j),2);    
            end

            w = gw2dref(n); x = gx2dref(n);
            for h=1:length(w) %Gauß-Integration
                l = linquadderivref(x(h,1),x(h,2)); l1 = linquadref(x(h,1),x(h,2))';
                [J,detJ,invJ] = getJacobian(nodes,x(h,1),x(h,2));

                for i=1:4 %Über die Zeilen der ESM
                    for j=1:4 %Über die Spalten der ESM
                        B(i,j) = B(i,j) + w(h)*48*(l(i,:)*invJ)*(l(j,:)*invJ)'*detJ;
                        M(i,j) = M(i,j) + w(h)*7800*452*l1(i,1)*l1(j,1)*detJ;
                    end
                end
            end
            for i=1:4 %OST über Zeilen der ESM
                for j=1:4 %OST über Spalten der ESM
                    theta = 0.5;
                    [LHS,RHS]=OST(theta,timestep,M(i,j),[B(i,j) B(i,j)],[0 0],[T(E(p,j),1),T(E(p,j),1)]);

                    %Assemblierung in Globaler Steifigkeitsmatrix
                    a(E(p,i),E(p,j)) = a(E(p,i),E(p,j)) + LHS;
                    f(E(p,i),1)=f(E(p,i),1)+RHS;  
                end
            end

            %% Randbedingungen
            D1 = [1,2,3,4]; D2 = [12,13,14,18];
            T1 = 600; T2 = 300;
            for i=1:4 %Schleife über die Zeilen der ESM
                for j=1:4 %Schleife über die Spalten der ESM
                    if E(p,j)==D1(i)
                        f(E(p,j),1)=T1;
                        a(E(p,j),:)=0;
                        a(E(p,j),E(p,j))=1;
                    elseif E(p,j)==D2(i)
                        f(E(p,j),1)=T2;
                        a(E(p,j),:)=0;
                        a(E(p,j),E(p,j))=1;
                    end            
                end
            end
        end

        T = a\f;

    end
    %% Temperatur Plot
    Tkrit=450;
    if T(15)>=Tkrit || T(16)>=Tkrit || T(17)>=Tkrit || T(18)>=Tkrit
        quadplot(K,E,T)
        tmax
        break %Ende der do-while Schleife, Kritische Zeit
    else
        tmax=tmax+500;
    end  
 end
 


Code:

function [ g ] = Newton( x0,func,tol,itermax)
%UNTITLED6 Summary of this function goes here
%   Detailed explanation goes here
syms x
fdx=diff(func,x);                                                                              
n=0;
y=1;
while  n<itermax && norm(func(x0))>=tol                        
    y=func(x0);  
    ydx=double(subs(fdx,x0));
   
    x0=x0-ydx\y;                            
    n=n+1;
end                                          
g=x0;
n
end

 

Code:
%Gradientenverfahren zur Lösung eines Linearen
%Gleichungssystems

function [x] = solveG(A,b,x0,rtol,itermax)
tic

x=x0.*ones(length(A),1);
 r=b-(A*x);
k=0;

while (norm(r)>=rtol) || (k<itermax)
    v = A*r;
    a = (r'*r)/(r'*v);
    x = x+a*r;
    r = r-a*v;
    k=k+1;
end
k
toc
end
 


Code:

% konjugiertes Gradientenverfahren = Methode des steilsten Abstiegs
function[x] = solveCG(A,b,x0,rtol,itermax)
x=x0;
r(:,1) = (b-A*x);
r(:,2) = (b-A*x);
p=r(:,1);
k=0;
while (norm(r(:,1))>rtol) || (k>itermax)
    v = A*p;
    a = (r(:,1)'*r(:,1))/(p'*v);
    x = x+a*p;
    r(:,1) = r(:,1) - a*v;
    b = (r(:,1)'*r(:,1))/(r(:,2)'*r(:,2));
    r(:,2)=r(:,2);
    p = r(:,1)+b*p;
    k=k+1;
end
k
end
 


laternenjoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.01.2016, 18:36     Titel:
  Antworten mit Zitat      
Vielleicht. Viel mehr kann ich so nicht sagen auf die Schnelle.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.