Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Signale unde Systeme

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

dimensions missmatch beim Arbeiten mit function_handle

 

Christian St.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2016, 11:34     Titel: dimensions missmatch beim Arbeiten mit function_handle
  Antworten mit Zitat      
Hallo miteinander, ich versuchs einfach mal und hoffe dass mir wer helfen kann.

Ich habe ein nichtlineares Gleichungssystem das ich gerne mit einem Newtonverfahren lösen möchte und habe dazu zwei m_files gschrieben (bzw. abgekupfert Confused ) eines das die Schleife mit dem Newtonverfahren enthält:

Code:

function [x,fx,it]=newton(fun,dfun,x0,tol,nmax)
  %Parameter:
  %fun: Funktion
  %dfun: Ableitung der Funktion
  %x0: Startwert
  %tol: Toleranzwert
  %bmax: Maximale Anzahl der Iterationsschritte

  %Ausgabe:
  %x: angenäherte Nullstelle
  %fx: Funktionswert an der Stelle X
  %it: Anzahl der benötigten Iterationsschritte
 

    x=x0;
    it=0;
    a=1+tol;
 
  while a>tol && it < nmax
    xtemp=x-(fun(x).*(dfun(x).^-1));
    a=norm(xtemp-x);
    x=xtemp;
    it=it+1;
  end
  fx=fun(x);
end


und das zweite das das Gleichungssystem erstellt:

Code:
fun=@(x) [x(1)-x(2)-x(3); x(3)-x(4)-x(8); x(4)-x(5)-x(6); x(6)+x(5)-x(7); x(7)+x(8)-x(9); x(9)+x(2)-x(10);
mein.^2.*R1 + x(2).^2.*R2 + x(10).^2.*R10 - pges;
x(3).^2.*R3 + x(4).^2.*R4 + x(5).^2.*R5 + x(7).^2.*R7 + x(9).^2.*R9 - x(2).^2.*R2;
x(6).^2.*R6 - x(5).^2.*R5;
x(8).^2.*R8 - x(7).^2.*R7 - x(6).^2.*R6 - x(4).^2.*R4];

dfun= @(x) [1-1-1; 1-1-1; 1-1-1; 1+1-1; 1+1-1; 1+1-1;
2*x(2).*R2 + 2.*x(10).*R10;
2*x(3).*R3 + 2.*x(4).*R4 + 2.*x(5)*R5 + 2.*x(7).*R7 + 2.*x(9)*R9 + 2.*x(2).*R2;
2*x(6).*R6 + 2.*x(5).*R5;
2*x(8).*R8 -2.*x(7).*R7 - 2.*x(6).*R6 - 2.*x(4).*R4];

x0= [1;1;1;1;1;1;1;1;1;1];
tol=10^-9;
nmax=200;
[x,fx,it]=newton(fun,dfun,x0,tol,nmax)


ich bekomme immer folgende Fehlermeldung:

error: vertical dimensions mismatch (9x1 vs 1x2)
error: called from
para3> at line -1 column -1
newton at line 20 column 10
para3 at line 42 column 9

kann mir aber nicht erklären wie der Fehler entstehen soll...

Hat wer eine Idee was ich falsch gemacht habe?

SG Christian


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.04.2016, 12:14     Titel:
  Antworten mit Zitat      
wenn dimmensionsfehler auftreten ist es meinst einfacher mit dem debugger selber rein zu gucken was passiert an der stelle. setz doch mal die debug marke an der stelle.
das beispiel ist ja an sich so nicht lauffähig. darum kannst du das nur selber machen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian St.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2016, 12:47     Titel:
  Antworten mit Zitat      
Ja das ist richtig ich wollte nicht alles mit code zupflastern...

der Debugger hält immer, wie in der Errormeldung, in Zeile 20 bei dem ausdruck:

Code:
xtemp=x-(fun(x).*(dfun(x).^-1));


überraschenderweise haben sich nun die Dimensionen verändert, (op1 is 10x1, op2 is 0x0)

ich verstehe aber nicht wieso, eigentlich sollten beide 10x1 sein

hier ist der komplette Code:

Code:
clc;
clear all;
debug_on_error (1)
# Erstellen der Parameter:
mein=10; pges=7*10^5;
# Mediumeigenschaften:
P=965; v=0.326*10^-6;

# Durchmesser:
d1 = 0.2073 ; d3 = 0.2073 ; d9 = 0.2073 ; d10 = 0.2073 ;
d8 = 0.1071 ; d2 = 0.1071 ;
d4 = 0.0825 ; d7 = 0.0825 ;
d5 = 0.0703 ;  d6 = 0.0703 ;

# Längen:
l1=120 ; l10=120 ; l2=60 ; l3=50 ; l9=50 ; l4=25 ; l7=25 ; l5=15 ; l6=15 ; l8=75 ;

# Lambda:
A200=0.016 ; A100=0.018 ; A80=0.020 ; A65=0.022 ;

# Teilstreckenwiderstände
R1=A200*l1*8/(d1*pi.^2*d1.^4*P); R2=A100*l2*8/(d2*pi.^2*d2.^4*P);
R3=A200*l3*8/(d3*pi.^2*d3.^4*P); R4=A80*l4*8/(d4*pi.^2*d4.^4*P);
R5=A65*l5*8/(d5*pi.^2*d5.^4*P); R6=A65*l6*8/(d6*pi.^2*d6.^4*P);
R7=A80*l7*8/(d7*pi.^2*d7.^4*P); R8=A100*l8*8/(d8*pi.^2*d8.^4*P);
R9=A200*l9*8/(d9*pi.^2*d9.^4*P); R10=A200*l10*8/(d10*pi.^2*d10.^4*P);

fun=@(x) [x(1) - x(2) - x(3); x(3) - x(4) - x(8);
x(4)-x(5)-x(6); x(6)+x(5)-x(7);
x(7) + x(8) - x(9); x(9) + x(2) - x(10);
mein.^2.*R1 + x(2).^2.*R2 + x(10).^2.*R10 - pges;
x(3).^2.*R3 + x(4).^2.*R4 + x(5).^2.*R5 + x(7).^2.*R7 + x(9).^2.*R9 - x(2).^2.*R2;
x(6).^2.*R6 - x(5).^2.*R5; x(8).^2.*R8 - x(7).^2.*R7 - x(6).^2.*R6 - x(4).^2.*R4];

dfun= @(x) [1-1-1; 1-1-1;
1-1-1; 1+1-1;
1+1-1; 1+1-1;
2*x(2).*R2 + 2.*x(10).*R10;
2*x(3).*R3 + 2.*x(4).*R4 + 2.*x(5)*R5 + 2.*x(7).*R7 + 2.*x(9)*R9 + 2.*x(2).*R2;
2*x(6).*R6 + 2.*x(5).*R5;
2*x(8).*R8 -2.*x(7).*R7 - 2.*x(6).*R6 - 2.*x(4).*R4];


x0= [1;1;1;1;1;1;1;1;1;1];
tol=10^-9;
nmax=200;
[x,fx,it]=newton(fun,dfun,x0,tol,nmax)



 
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.04.2016, 15:32     Titel:
  Antworten mit Zitat      
in der letzten zeile von dfun hast du ein leerzeichen vergessen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian St.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2016, 07:25     Titel:
  Antworten mit Zitat      
Aha, Confused Ich wusste nicht dass die Leerzeichen auch ausgewertet werden,
Das Gleichungssystem scheint zwar nicht richtig zu sein, aber er rechnet jetzt zumindest.

Danke für die Hilfe!
SG Christian
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.