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

Problem: nicht eindeutige Lösung bei double input

 

SdL
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 02.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 11:53     Titel: Problem: nicht eindeutige Lösung bei double input
  Antworten mit Zitat      
Hallo, wir haben folgendes Problem:

Beim angehängten Code tritt ein interessantes Phänomen auf: Wenn man die Variable "theta" nicht ganzzahlig (z.B. vom Typ double) wählt (also z.B. 1.3) bekommt man für "x" kein Skalar, sondern eine Matrix mit 2 Ergebnissen (das darf nicht sein). Deshalb stimmen dann die Dimensionen zur Berechnung von "Q" nicht überein. (siehe Fehlermeldung)
Ist "theta" vom Typ int, so ist "x" ein Skalar und die Berechnung von "phi_double" (die gesuchte Variable) verläuft problemlos.

Die Frage ist nun warum das so ist, denn das Problem hängt alleine vom Typ von "theta" ab, nicht von der Größe der Zahl. Alle Berechnungen bis zur Berechnung von "Q", sehen normal aus (d.h. keine außergewönhlich „krumme“ Zahlen, keine ungewollten Matrizen etc.), ab der Berechung von "Q" (in Berechnungsreihenfolge im Matlab Command Window) werden die Gleichungen aber riesig und beinhalten Wurzeln und Doppel- und Dreifachbrüche etc.

Hat jemand eine Idee, warum das nur passiert, wenn „theta“ vom Typ double ist und warum die Gleichungen so riesig werden, oder ob es ein Syntax- oder ein mathematisches Problem ist?

Fehlermeldung:

??? Error using ==> mupadmex
Error in MuPAD command: dimensions do not match
[(Dom::Matrix(Dom::ExpressionField()))::_mult2]

Error in ==> sym.sym>sym.mtimes at 180
X = mupadmex('mllib::mtimes',A.s,B.s);

Error in ==> PFshare_twoassets_withoutloop_PhH060110_CO080110 at 112
Q = (x*m*b-I) %(2x2)

[die Zeilenangabe "180" im error stimmt nicht, da das Programm hier ohne sämtliche Kommentare auftaucht]

Programmcode:

Code:

clear all;
   
syms x

%% 1. Calibration

theta = 2.0
eta = 3.5
N_star = 1.0
gamma = 0.5
rho = 2.0
delta = 0.5
sigma = 2.0
TO = 1.0

%% 2. Composite Terms

N           = 1/(1+N_star)    
a           = 1-(1-N)*TO    
a_star      = 1-N*TO        


Omega   =(sigma-1)/(sigma-1+(sigma*delta))
omega_l   = (((1-gamma)/gamma))*(Omega^(1-theta))
lambda  = 1-a-a_star

LambdaT = 1/(1+omega_l)
LambdaN = (omega_l+delta*Omega)/(1+omega_l)
LambdaT_delta_Pi = 1/(1+omega_l+(delta*Omega))
LambdaN_delta_Pi = 1 - LambdaT_delta_Pi
LambdaT_delta_C  = LambdaT / sigma * ( (1+sigma*delta/(sigma-1)) / (1+delta/(sigma-1)) )
LambdaN_delta_C  = LambdaN / sigma

%% 3.

%% 3.1

% 3.1.1  

a1 = [LambdaT_delta_Pi LambdaN_delta_Pi]
   
% 3.1.2

d11 = Omega*(1-eta*(1-(lambda^2))-((lambda^2)*(1+theta*omega_l)/(1+omega_l)))

d12 = (-lambda)*Omega*(((theta-1)*omega_l)/(1+omega_l))

d21 = ((omega_l+delta*Omega-theta*omega_l*(1-delta*Omega))/((omega_l+delta*Omega)*(1+omega_l)))*Omega*lambda

d22 = ((omega_l+delta*Omega-theta*omega_l*(1-delta*Omega))/((omega_l+delta*Omega)*(1+omega_l)))*Omega

D = [d11 d12; d21 d22]

% 3.1.3

d= [-lambda; 1]
   
%% 3.2

% 3.2.1

e11= 1+(Omega*((-eta)*(1-(lambda^2))-((lambda^2)*(1+theta*omega_l)/(1+omega_l))))  

e12= (-lambda)*(((Omega-1)*(1+theta*omega_l)+(theta-1)*omega_l)/(1+omega_l))                                    
 
e21= ((omega_l+delta*Omega-theta*omega_l*(1-delta*Omega))/((omega_l+delta*Omega)*(1+omega_l)))*Omega*lambda    
 
e22= ((omega_l+delta*Omega-theta*omega_l*(1-delta*Omega))/((omega_l+delta*Omega)*(1+omega_l)))*Omega  

E = [e11 e12; e21 e22];

% 3.2.2

e = [-lambda; 1]    
       
%% 3.3

q = [ (lambda*Omega)/(1+omega_l) -(omega_l+(1-Omega))/(1+omega_l)]

%% 3.4

b = [LambdaT/sigma LambdaN/sigma]

c = [LambdaT*Omega LambdaN]

%% 4.

% 4.1

i = [1;1] % 2x1

I = [1 0; 0 1] %2x2

Phi = I-(rho-1)*i*q

Phi_inv = inv(Phi)

% 4.2
   
F = [1 -1 0 0; 0 0 1 -1]

%% 5.      
     
pi = 1-((sigma-1)/sigma)*c*e
     
nu = pi*(1-rho*((sigma-1)/sigma)*c*E*Phi_inv*i)

m = (rho*D*Phi_inv*i)+d
   
M = (sigma-1)/(nu*sigma)*m*c*E+D

Q = (x*m*b-I)   %(2x2)

Q_x = inv(Q)
   
%% 6.

n_x = a1*Q_x*M*Phi_inv %(1x2)        
   
z_x = (x*b*Q_x*M-((sigma-1)/(sigma*nu))*c*E)' %(2x1)      
   
Phi_trans = Phi'    
   
Phi_trans_inv = inv(Phi_trans)    
   
%%  7.
   
COV = [1 0 0 0 ; 0 1 0 0; 0 0 1 0; 0 0 0 1]    
     
%% 8.
   
f_x = n_x*F*COV*(F')*(inv(Phi_trans))*z_x    

g_x = (1-rho)*n_x*F*COV*(F')*Phi_trans_inv*(z_x*((i)')*Phi_trans_inv-I)*(q')    
   
%% 9.
   
eqs = f_x-g_x
   
x = solve(eqs,x)
   
%% 10.
   
phi = (1/2)+(nu*x)/2
 
phi_double = double(phi)    

%% 11.

Q = (x*m*b-I)   %(2x2)

Q_x = inv(Q)
   
Phi = I-(rho-1)*i*q

Phi_inv = inv(Phi)
   
Phi_trans = Phi'
       
Phi_trans_inv = inv(Phi_trans)

n_x = a1*Q_x*M*Phi_inv

z_x = (x*b*Q_x*M-((sigma-1)/(sigma*nu))*c*E)'

g_x = (1-rho)*n_x*F*COV*(F')*Phi_trans_inv*(z_x*((i)')*Phi_trans_inv-I)*(q')

Cov_RER_returns_1 = (rho/(1-rho))*g_x

Cov_RER_returns_double = double(Cov_RER_returns_1)
 
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.