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

Lösung quadratische Gleichung in for-Schleife

 

OlegZ

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 19:39     Titel: Lösung quadratische Gleichung in for-Schleife
  Antworten mit Zitat      
Hallo,

ich habe folgenden Code in einer Funktion generiert:
Code:
 
    v=[v1,v2,v3,v4,v5,v6];                 %gegebene Werte
    q=[q1,q2,q3,q4,q5,q6];                 %gegebene Werte
    s=[s1,s2,s3,s4,s5,s6];                   %gegebene Werte
    t=[t_e1,t_e2,t_e3,t_e4,t_e5,t_e6];  %gegebene Werte
   
    % t = Bahndauer
    % I = Index von maximaler Zeit
    [t_e,I]=max(t(:));                         %Ermittlung größte Bahndauer und Stelle im Vektor
     t_v = rand(1,6);                           %Erstellung eines leeren Vektors t_v mit 6 Einträgen
     t_v(:,:) = [];
     t_b = rand(1,6);                           %Erstellung eines leeren Vektors t_b mit 6 Einträgen
     t_b(:,:) = [];

    % alle Zeiten durchgehen
    for i=1:6;
        % wenn Zeit != maximale Zeit
        if i~=I
                v_m = solve('v_m^2-v_m*a_m*t_e+s(i)*a_m=0',v_m);
                v(i)=min(v_m);

                t_b(i)=2*v(i)/a_m;
                t_v(i)=t_e-t_b(i);
        % wenn Zeit == maximale Zeit
        else
             t_b(i)=2*v(i)/a_m;
             t_v(i)=t_e-t_b(i);
        end
    end



und erhalte die Fehlermeldung:
Code:
Error using solve>processString (line 337)
' 1 ' is not a valid expression or equation.

Error in solve>getEqns (line 267)
      eqns = processString(eqns, v, vc);

Error in solve (line 150)
[eqns,vars,options] = getEqns(varargin{:});


Liegt es an der Schleife, dass er die quadratische Gleichung nicht lösen kann?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.09.2013, 19:48     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Liegt es an der Schleife, dass er die quadratische Gleichung nicht lösen kann?

Kann ich mir nicht vorstellen.

Es wäre hilfreich, wenn du lauffähigen Code posten würdest.

v_m ist in der jetzigen Form beim ersten Durchlauf der Schleife nicht definiert.

Die Dokumentation schlägt nicht vor, Strings zu verwenden, um die Gleichungen zu definieren. Ich würde mich daran halten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
OlegZ

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 20:01     Titel:
  Antworten mit Zitat      
Hallo Harald,

kannst du mir dann eine alternative zu den Strings nennen? ich möchte drei unterschiedliche zeiten berechnen und habe deshalb die Strings verwendet..

Gruß OlegZ
 
OlegZ

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2013, 20:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe das Problem ausgemacht. Mit meiner Zählvariablen i kann beispielsweise der Vektoraufruf s(i) nichts anfangen.

Gib es eine Möglichkeit wie ich mithilfe einer for-Schleife einzelne Einträge eines Vektors aufrufe?

Gruß OlegZ
 
Harald
Forum-Meister

Forum-Meister


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

jedes einzelne Beispiel in der Doku ist eine Alternative. Im wesentlichen vorher
Code:

und dann die ' ' weglassen. Die Lösung würde ich anders benennen, damit es keinen Konflikt gibt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
OlegZ

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2013, 09:45     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort. Ich würde gerne eine allgemeine Sache klären, unabhängig von meinem Quellcode.
Wenn ich mit dem solve-Befehl eine quadratische Gleichung lösen will, wie mach ich das? Laut dokumentation in dieser form:
Code:
syms x
solve(x^2 + 4*x + 1 == 0)


Dies auf mein Problem würde so aussehen:
Code:
   for i=1:6;
        n=n+1;
        % wenn Zeit != maximale Zeit
        if n~=I
            syms x;
                x = solve(x^2-x*a*e+s(n)*a==0);
                v(n)=min(x);

, wobei I,a,e,s und v gegeben sind. I stellt einen Index dar, a einen skalaren Wert, e eine skalare Zeit und s und v einen Vektor mit 6 Einträgen.

Ich erhalte immer den Fehler:
Code:
Undefined function 'min' for input arguments of type 'sym'.

Error in synchronisierung (line 32)
                v(n)=min(x);


Wieso?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.09.2013, 09:54     Titel:
  Antworten mit Zitat      
Hallo,

das sagt die Fehlermeldung doch ganz deutlich: min ist für symbolische Variablen nicht definiert. Du müsstest also z.B. in double umwandeln:
Code:


Warum machst du es aber eigentlich so kompliziert? Bei einer quadratischen Gleichung kann man die Lösung doch einfach über die 'Mitternachtsformel' angeben.

Grüße,
Harald
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.