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

m-file läuft nicht in Matlab R2013

 

Hilbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2013, 13:46     Titel: m-file läuft nicht in Matlab R2013
  Antworten mit Zitat      
Hi,

ich habe ein Programm geschrieben welches mit Hilfe des Semismooth Newton Verfahrens ein nichtlineares Optimierungsproblem mit Ungleichheitsbedingungen löst. Das File habe ich in matlab 2007 geschrieben und in Matlab R2013 läuft es nicht. Es ist aber definitiv kein Fehler drin weil ich es einfach nur kopiert habe. Matlab 2013 zeigt mir auch keine numerischen Werte an. Es zeigt mir meine ausgewerteten Terme komplett an und nicht den Wert. Ich habe keine Ahnung was der Mist soll. Als Übergabewert für ITIB kann irgendeine Zahl eingetragen werden. Ich wäre euch dankbar wenn ihr mir sagen könntet warum es nicht läuft.

Hier mein Quelltext:
Code:

function [a] = Aufteilung(ITIB)
clc
%Parameter eingeben
%Anfangsinnovationsprofil Fashion
v0F = 100;
%Anfangsinnovationsprofil Mature
vN = 100;
%Impact factor Upside Fashion
quF = 0.4;
%Impact factor Upside Mature
quN = 0.35;
%Impact factor Downside Fashion
qdF = 0.2;
%Impact factor Downside Mature
qdN = 0.1;
%Probability desirable Fashion Cash Flows
pF = 0.05;
%Probability desirable Mature Cash Flows
pN = 0.2;
%Average Investment share of market
alphaF = 0.05;
%Proportionalitätsfaktor
k = 10;
%Maximum periodical learning effect
beta = 0.15;
%interner Zins
r = 0.1;
%Anzahl der Perioden
n = 2;
%Anfangswerte festlegen für Normberechnung
a0F = 0.5;
a1F = 0.5;
lambda1 = 0;
lambda2 = 0;
lambda3 = 0;
lambda4 = 0;
%Vektor der Werte festlegen
u = [a0F a1F lambda1 lambda2 lambda3 lambda4]';
no = norm(u);
%Hauptschleife Anzahl der Perioden

%Schleife für Newton-Verfahren beginnen
while(no > 1e-12)
   %Variablen festlegen
    syms a0F a1F
    %Funktionen festlegen
    %Lernfunktion M(a0F) festlegen
    M = 1 - beta + 2 * beta / (1 + exp(-k * (a0F - alphaF)));
    %Erwartungswert für Cash-Flow zum Zeitpunkt t1 festlegen
    E1 = pF * (a0F * ITIB)^quF * v0F + pN * ((1 - a0F) * ITIB)^quN * vN + (1 - pN) * ((1 - a0F) * ITIB)^qdN * vN;
    %Erwartungswert für Cash-Flow zum Zeitpunkt t2 festlegen
    E2 = pF * (a1F * ITIB)^quF * v0F * M + (1 - pF) * (a1F * ITIB)^qdF * v0F * M + pN * ((1 - a1F) * ITIB)^quN * vN + (1 - pN) * ((1 - a1F) * ITIB)^qdN * vN;
    %Optimierungsfunktion festlegen
    f = ITIB - (E1 - ITIB) / (1 + r) - (E2 - ITIB) / (1 + r)^2;
    %Ableitungen für Rechte Seite und Jacobi-Matrix berechnen
    g1 = diff(f,a0F);
    g2 = diff(f,a1F);
    j11 = diff(diff(f,a0F),a0F);
    j12 = diff(diff(f,a0F),a1F);
    j21 = j12;
    j22 = diff(diff(f,a1F),a1F);
    a0F = u(1,1);
    a1F = u(2,1);
    lambda1 = u(3,1);
    lambda2 = u(4,1);
    lambda3 = u(5,1);
    lambda4 = u(6,1);
    G1 = subs(g1);
    G2 = subs(g2);
    J11 = subs(j11);
    J12 = subs(j21);
    J21 = J12;
    J22 = subs(j22);
    %Aktive Mengen berechnen und Einträge Jacobi Matrix berechnen
    if(1 - u(1,1) <= u(3,1))
        j31 = 1;
        j33 = 0;
        G3 = 1 - a0F;
    else
        j31 = 0;
        j33 = -1;
        G3 = lambda1;
    end
    if(u(2,1) <= u(4,1))
        j41 = -1;
        j44 = 0;
        G4 = a0F;
    else
        j41 = 0;
        j44 = -1;
        G4 = lambda2;
    end
    if(1 - u(2,1) <= u(5,1))
        j52 = 1;
        j55 = 0;
        G5 = 1 - a1F;
    else
        j52 = 0;
        j55 = -1;
        G5 = lambda3;
    end
    if(u(2,1) <= u(6,1))
        j62 = -1;
        j66 = 0;
        G6 = a1F;
    else
        j62 = 0;
        j66 = -1;
        G6 = lambda4;
    end
    %Jacobi Matrix erstellen
    J = [J11 J12 1 -1 0 0;
        J21 J22 0 0 1 -1;
        j31 0 j33 0 0 0;
        j41 0 0 j44 0 0;
        0 j52 0 0 j55 0;
        0 j62 0 0 0 j66];
    G = [-G1-lambda1+lambda2 -G2-lambda3+lambda4 G3 G4 G5 G6]';
    delta_u = J \ G;
    u_neu = u + delta_u;
    u = u_neu;
    no = norm(G,Inf);
    a(1) = u(1);
    a(2) = u(2);
    pause
   
end
 


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.10.2013, 17:22     Titel:
  Antworten mit Zitat      
Hallo,

in MATLAB 2007 lief im Hintergrund der Symbolic Math Toolbox ein Maple Kernel. Seit 2008b läuft im Hintergrund ein MuPAD Kernel, was natürlich auch andere Änderungen mit sich gebracht hat.

Ich habe den Code mal versucht laufen zu lassen, allerdings nach einer Weile abgebrochen.

Da ich die 2007-Version nicht zur Verfügung habe: kannst du vielleicht an einem ganz einfachen Beispiel zeigen, wo die unterschiedlichen Ergebnisse von 2007 und 2013 herkommen? Anhanddessen kann man wohl leichter (und vor allem schneller) klären, wie das in Übereinstimmung zu bringen ist.

Was ich auf Anhieb sehe, ist z.B. ein "endlos langer" Ausdruck für G1. Dieser kann mit
Code:

in Double umgewandelt werden, aber dann ist aus meiner Sicht das weitere symbolische Rechnen damit irgendwo fragwürdig.

Eine ganz andere Frage: warum machst du das mit symbolischen Matrizen? Newton-Verfahren sind ja numerische Verfahren. Da bietet es sich an, dass man gleich alles numerisch macht.

In der Optimization Toolbox gibt es übrigens auch fertige Verfahren für so etwas, z.B. fmincon.

Grüße,
Harald

P.S.: bitte einen Wert für ITIB angeben. Am Ende habe ich das für einen Wert ausgeführt, für den es z.B. gar nicht konvergiert.
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 - 2025 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.