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

Gleichung lösen

 

Roachnbua

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2014, 08:39     Titel: Gleichung lösen
  Antworten mit Zitat      
Hallo zusammen,

ich muss eine komplizierte Gleichung auf den Winkel Gamma auflösen und das alle fünf Grad Kurbelwinkel (Winkel(i,2)). Bekannt sind Winkel(i,2) und Winkel(i,4) und die ganzen Variablen R,L,K,S,Y. Erstens weiß ich nicht ob ich überhaupt so rechnen kann und zweitens kommt immer diese Fehlermeldung: FSOLVE requires the following inputs to be of data type double: 'X0'

syms R L K S X Y Gamma Winkel Delta

for i = [1:152]
f(i) = 'R*cos(Winkel(i,2))+ L*sin(Winkel(i,4))- K*cos(Gamma)+S*sin(acos(1/S*(X - K*sin(Gamma))))-Y'
Winkel(i,5) = fsolve(f(i),'Gamma')
end

Kann mir da jemand weiterhelfen? Danke


Harald
Forum-Meister

Forum-Meister


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

fsolve ist für die numerische Lösung von Gleichungen, kann also nicht mit syms verwendet werden.
Wenn du Gleichungen symbolisch lösen willst, musst du solve verwenden.

Sollten die Gleichungen symbolisch nicht lösbar sein, dann bleibt immer noch der Weg einer numerischen Lösung über fsolve. Dann musst du allerdings auch Werte für S, L, K etc. vorgeben.

Ich würde so oder so einen Blick in die Doku des Befehls empfehlen, da du veraltete Syntax verwendest.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2014, 09:48     Titel:
  Antworten mit Zitat      
Hallo,

die Sache ist, dass ich die Gleichung erst auf Gamma auflösen möchte und dann diese für mehrere Winkel Phi ausrechnen möchte. Prinzipiell funktioniert das symbolische auflösen der Gleichung, nur damit kann ich aber nichts anfangen, wenn ich damit nicht weiterrechnen kann. Ich müsste also erst die Gleichung auf eine Variable lösen und dann die resultierende Funktion mit allen verbleibenden Variablen lösen.

[code]% Hier ist mein ganzer Code:

%Auswertung Winkel
clear

dateipfad = 'Kinematische Berechnung.xlsx';
sheet = 3;
xlRange1 = 'C8:C152';
xlRange2 = 'B8:B152';
xlRange3 = 'B8:B152';
xlRange4 = 'H11';
xlRange5 = 'H4';
xlRange6 = 'H5';
xlRange7 = 'H6';
xlRange8 = 'H7';
xlRange9 = 'H8';
xlRange10 = 'H9';

Winkel(:,1) = xlsread(dateipfad, sheet, xlRange1);
Winkel(:,2) = xlsread(dateipfad, sheet, xlRange2);
KW = xlsread(dateipfad, sheet, xlRange3);
sheet = 1;
Lambda = xlsread(dateipfad, sheet, xlRange4);
R = xlsread(dateipfad, sheet, xlRange4);
L = xlsread(dateipfad, sheet, xlRange5);
K = xlsread(dateipfad, sheet, xlRange6);
S = xlsread(dateipfad, sheet, xlRange7);
X = xlsread(dateipfad, sheet, xlRange8);
Y = xlsread(dateipfad, sheet, xlRange9);

for i = [1:145]
Winkel(i,3) = abs(acos(sqrt(1-Lambda.^2*sin(Winkel(i,2))*sin(Winkel(i,2)))));
end
Winkel(:,4) = Winkel(:,3)*180/pi;

fig = figure(1);
subplot(2,1,1);
plot(KW,Winkel(:,4),'red');
title('Winkel Beta');
xlabel('Kurbelwinkel (°KW)');
ylabel('Winkel Beta (°)');
axis([0 720 -20 20]);

syms R L K S Y Phi Gamma

F = solve(R*cos(Phi)+ L*sin(asin(R*sin(Phi)/L))- K*cos(Gamma)+ S*sin(acos(1/S*(X - K*sin(Gamma))))-Y==0,Gamma)

for j = [1:145]
Winkel(j,6) = fsolve(F,Phi=Winkel(j,2));
end

Habe also erst versucht die Gleichung F symbolisch zu lösen und dann diese (nach Gamma aufgelöst) mit fsolve zu berechnen. Das funktioniert aber nicht. Kann mir da jemand weiter helfen?
 
Harald
Forum-Meister

Forum-Meister


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

F ist also ein symbolischer Ausdruck.
Es macht keinen Sinn, einen symbolischen Ausdruck an den numerischen Löser fsolve zu übergeben.
Mir ist auch nicht wirklich klar, was du damit überhaupt erreichen willst.

Insbesondere: was bedeutet
Zitat:
die resultierende Funktion mit allen verbleibenden Variablen lösen.

Man kann entweder Variablen in eine Funktion einsetzen oder eine Gleichung nach Variablen auflösen. Was von beiden meinst du?

was bedeutet
Zitat:
und dann diese [Gleichung] (nach Gamma aufgelöst) mit fsolve zu berechnen.

Du hast also einen symbolischen Ausdruck. Was soll daran nun "berechnet" werden?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2014, 09:50     Titel:
  Antworten mit Zitat      
Servus,

genau F ist ein symbolischer Ausdruck. Hab ich in der Anleitung von fsolve gefunden und dann probiert.

Ich versuchs nochmal besser zu beschreiben. Also folgende Gleichung ist die Ausgangsgleichung:

Y = solve(R*cos(Phi)+ L*sin(asin(R*sin(Phi)/L))- K*cos(Gamma)+ S*sin(acos(1/S*(X - K*sin(Gamma)))),Gamma)

Ich möchte diese Gleichung nun auf Gamma auflösen. Ob symbolisch oder auch sofort mit eingesetzten Werten, also numerisch, ist egal.

Ich möchte die Gleichung aber nicht nur für einen "Variablensatz" lösen, sondern da es sich um einen Kurbeltrieb handelt alle 5°Kurbelwinkel Phi. Deswegen habe ich versucht eine Schleife bei fsolve einzubauen, um bei jeder Schleife einen anderen Wert für Phi einzusetzen. Alle anderen Variablen bleiben über eine Umdrehung hin konstant.

Also zusammengefasst gibt es denk ich zwei Möglichkeiten:

- Gleichung umstellen und Werte einsetzten in einem Schritt oder
- Gleichung symbolisch lösen und in einem nächsten Schritt die Variablen einsetzen und numerisch lösen.

Die Frage ist jetzt wie ich das am besten realisieren kann. Danke
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
genau F ist ein symbolischer Ausdruck. Hab ich in der Anleitung von fsolve gefunden und dann probiert.

Ich habe nun in die Doku geschaut und nichts dergleichen gefunden. Hätte mich auch gewundert, da sich das im Grundgedanken (wie gesagt) widerspricht.
Falls du mit einer anderen Version arbeitest und sich dort tatsächlich so ein Beispiel findet, kopier es bitte mal hier rein (und bitte die Version angeben).

Zitat:
Ich möchte diese Gleichung nun auf Gamma auflösen. Ob symbolisch oder auch sofort mit eingesetzten Werten, also numerisch, ist egal.

Ich möchte die Gleichung aber nicht nur für einen "Variablensatz" lösen, sondern da es sich um einen Kurbeltrieb handelt alle 5°Kurbelwinkel Phi. Deswegen habe ich versucht eine Schleife bei fsolve einzubauen, um bei jeder Schleife einen anderen Wert für Phi einzusetzen. Alle anderen Variablen bleiben über eine Umdrehung hin konstant.

Dann solltest du dies komplett numerisch machen. D.h. insbesondere kein syms.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2014, 10:36     Titel:
  Antworten mit Zitat      
Hallo Harald,

hab das jetzt versucht mit folgender Gleichung:

for j = [1:145]
Winkel(j,6) = fsolve((R*cos(Phi(j,1))+ L*sin(asin(R*sin(Phi(j,1))/L))- K*cos(Gamma)+ S*sin(acos(1/S*(X - K*sin(Gamma))))-Y==0),Gamma);
end

Jetzt hab ich aber eine Frage. Ich möchte ja auf Gamma auflösen. Wie kann ich Gamma definieren, dass der Solver rechnet, denn beim lösen kommt immer die Meldung das Gamma nicht definiert ist. Versteh ich auch. Aber mit einem Wert kann ich Gamma nicht definieren. Ich möchte diesen ja eigentlich gerade berechnen.

Vielen Dank. Schöne Grüße,

Kevin
 
Harald
Forum-Meister

Forum-Meister


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

der erste Input muss ein Function Handle sein, der zweite ein Startwert für die Suche nach einer Lösung, also:

Code:
for j = [1:145]
Winkel(j,6) = fsolve(@(Gamma) (R*cos(Phi(j,1))+ L*sin(asin(R*sin(Phi(j,1))/L))- K*cos(Gamma)+ S*sin(acos(1/S*(X - K*sin(Gamma))))-Y), Gamma0);
end

wobei Gamma0 ein sinnvoller Startwert sein sollte. Alle beteiligten Variablen außer Gamma müssen zuvor mit numerischen Werten belegt werden.

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.