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

Einfache Gleichung mit einer Unbekannten iterativ lösen

 

Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2013, 20:25     Titel: Einfache Gleichung mit einer Unbekannten iterativ lösen
  Antworten mit Zitat      
Guten Abend,

ich schreibe ein ganz einfaches MatLab Programm, bei dem ich bisher kaum was, für mich, kompliziertes machen musste. Nun also kommt eine Gleichung vor, bei der die Unbekannte iterativ ermittelt werden muss.

Im Gegensatz zu den vielen existierenden Themen, schreibe ich mal eine gaaaaaanz simple Gleichung auf und hoffe ihr könnt mir helfen diese zu lösen...(Die Gleichung ist etwas komplexer, aber wie folgt aufgebaut)

35 = x + ((5^2)/5)

Herauskommen sollte möglichst x = 30 Wink

In der Vorlage, einem Beleg, den ich nutze und den ich via Taschenrechner damals gelöst habe, sieht das dann ungefähr so aus:

h | lsg
28 | 33
29 | 34
30 | 35
31 | 36
usw...

Ich habe keine Ahnung, ob ich das mit einer If Schleife oder While Schleife angehen soll, ob ich die Werte lieber doch auf eine Seite bringen soll und die Unbekannte dann links zBsp stehen bleibt, noch sehe ich bei den tollen Hilfeseiten für fsolve, bicgstab, etc durch und ehrlich gesagt, vergeht mir die Lust ;p
Letzte Hoffnung: gomatlab.de Wink

LG von nem Gast...


markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 19.03.2013, 20:38     Titel:
  Antworten mit Zitat      
Ich versteh dein Posting nicht so ganz. Auch deine Tabelle nicht wirklich (daran ist ja nichts iterativ (iterativ wäre Newton oder Intervallhalbierung), das ist eher try and error bruteforce mäßig).
Lösen mit solve geht so

Code:


>> syms x
>> solve(x + ((5^2)/5)  == 35)
 
ans =
 
30
 
>>

 



Oder willst du es selber Iterativ lösen? Dann eher eine while-Schleife und als Abbruchkriterium ein sicht nicht weiter veränderndes Ergebnis wählen.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2013, 20:46     Titel:
  Antworten mit Zitat      
In meiner "Tabelle" ist mir der Fehler unterlaufen die echte Variable "h", statt der erdachten "x" zu verwenden, sprich die Tabelle müsste links ein x haben, so dass am Ende bei x = 30 eine Lösung von 35 erscheint.

Nichtdestotrotz danke für die Hilfe. Leider mag mein MatLab sie nicht. (MatLab Version: 7.12.0.635 (R2011a))

Code:

>> syms x fsolve(x+((5^2)/5) == 35)
??? Error using ==> syms at 61
Not a valid variable name.


Ideen? =)
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 19.03.2013, 20:57     Titel:
  Antworten mit Zitat      
you're doing it wrong Wink

1. Wenn du es in einer Zeile haben willst, musst du z.b. ein Semikolon hinter den ersten Befehl setzen

Code:


>> syms x; solve(x+((5^2)/5) == 35)
 
ans =
 
30
 


2. Habe ich solve benutzt, nicht fsolve. solve kommt aus der "Symbolic Math Toolbox". fsolve aus der "Optimization Toolbox" und wird anders verwendet.

Aber das Forum ist eigentlich voll davon: z.B. http://www.gomatlab.de/gleichung-loesen-mit-fsolve-t1585.html
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2013, 21:08     Titel:
  Antworten mit Zitat      
Argh, aaaaaalso. Das mitm Semikolon hatte ich probiert, brachte den gleichen Fehler.
Mein nächster Versuch war fsolve statt solve, weil irgendwo stand, wie du es auch schriebst, dass das eine zum einen Packet gehoert und das andere zum anderen und ich das ausschliessen wollte. =)

Code:
>> syms x; solve(x+((5^2)/5) == 35)
??? Error using ==> char
Conversion to char from logical is not possible.

Error in ==> solve>getEqns at 189
   vc = char(v);

Error in ==> solve at 67
[eqns,vars] = getEqns(varargin{:});


Mein neuer Fehler =)
Fuer mich klingt das, als gaebe es diese Funktion nicht?


P.s.: "das Forum ist voll davon" ... ja und verwirrender als lösungsbringend (zumindest für mich =))
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 19.03.2013, 21:10     Titel:
  Antworten mit Zitat      
Tipp mal
Code:

ein, damit wir sehen was für Toolboxen dir zur verfügung stehen.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2013, 21:13     Titel:
  Antworten mit Zitat      
Code:

-------------------------------------------------------------------------------------
MATLAB Version 7.12.0.635 (R2011a)
MATLAB License Number:
Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1)
Java VM Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode
-------------------------------------------------------------------------------------
MATLAB                                                Version 7.12       (R2011a)
Simulink                                              Version 7.7        (R2011a)
Aerospace Blockset                                    Version 3.7        (R2011a)
Aerospace Toolbox                                     Version 2.7        (R2011a)
Bioinformatics Toolbox                                Version 3.7        (R2011a)
Communications System Toolbox                         Version 5.0        (R2011a)
Computer Vision System Toolbox                        Version 4.0        (R2011a)
Control System Toolbox                                Version 9.1        (R2011a)
Curve Fitting Toolbox                                 Version 3.1        (R2011a)
DO Qualification Kit                                  Version 1.4        (R2011a)
DSP System Toolbox                                    Version 8.0        (R2011a)
Data Acquisition Toolbox                              Version 2.18       (R2011a)
Database Toolbox                                      Version 3.9        (R2011a)
Datafeed Toolbox                                      Version 4.1        (R2011a)
EDA Simulator Link                                    Version 3.3        (R2011a)
Econometrics Toolbox                                  Version 2.0        (R2011a)
Embedded Coder                                        Version 6.0        (R2011a)
Filter Design HDL Coder                               Version 2.8        (R2011a)
Financial Derivatives Toolbox                         Version 5.7        (R2011a)
Financial Toolbox                                     Version 4.0        (R2011a)
Fixed-Income Toolbox                                  Version 2.1        (R2011a)
Fixed-Point Toolbox                                   Version 3.3        (R2011a)
Fuzzy Logic Toolbox                                   Version 2.2.13     (R2011a)
Global Optimization Toolbox                           Version 3.1.1      (R2011a)
IEC Certification Kit                                 Version 1.4        (R2011a)
Image Acquisition Toolbox                             Version 4.1        (R2011a)
Image Processing Toolbox                              Version 7.2        (R2011a)
Instrument Control Toolbox                            Version 2.12       (R2011a)
MATLAB Builder EX                                     Version 2.0        (R2011a)
MATLAB Builder JA                                     Version 2.2.2      (R2011a)
MATLAB Builder NE                                     Version 4.0        (R2011a)
MATLAB Coder                                          Version 2.0        (R2011a)
MATLAB Compiler                                       Version 4.15       (R2011a)
MATLAB Distributed Computing Server                   Version 5.1        (R2011a)
MATLAB Report Generator                               Version 3.10       (R2011a)
Mapping Toolbox                                       Version 3.3        (R2011a)
Model Predictive Control Toolbox                      Version 3.3        (R2011a)
Neural Network Toolbox                                Version 7.0.1      (R2011a)
Optimization Toolbox                                  Version 6.0        (R2011a)
Parallel Computing Toolbox                            Version 5.1        (R2011a)
Partial Differential Equation Toolbox                 Version 1.0.18     (R2011a)
Phased Array System Toolbox                           Version 1.0        (R2011a)
RF Toolbox                                            Version 2.8.1      (R2011a)
Robust Control Toolbox                                Version 3.6        (R2011a)
Signal Processing Toolbox                             Version 6.15       (R2011a)
SimBiology                                            Version 3.4        (R2011a)
SimDriveline                                          Version 2.0        (R2011a)
SimElectronics                                        Version 1.6        (R2011a)
SimEvents                                             Version 3.1.2      (R2011a)
SimHydraulics                                         Version 1.9        (R2011a)
SimMechanics                                          Version 3.2.2      (R2011a)
SimPowerSystems                                       Version 5.4        (R2011a)
SimRF                                                 Version 3.0.2      (R2011a)
Simscape                                              Version 3.5        (R2011a)
Simulink 3D Animation                                 Version 5.3        (R2011a)
Simulink Coder                                        Version 8.0        (R2011a)
Simulink Control Design                               Version 3.3        (R2011a)
Simulink Design Optimization                          Version 1.2.1      (R2011a)
Simulink Design Verifier                              Version 2.0        (R2011a)
Simulink Fixed Point                                  Version 6.5        (R2011a)
Simulink HDL Coder                                    Version 2.1        (R2011a)
Simulink PLC Coder                                    Version 1.2        (R2011a)
Simulink Report Generator                             Version 3.10       (R2011a)
Simulink Verification and Validation                  Version 3.1        (R2011a)
Spreadsheet Link EX                                   Version 3.1.3      (R2011a)
Stateflow                                             Version 7.7        (R2011a)
Statistics Toolbox                                    Version 7.5        (R2011a)
Symbolic Math Toolbox                                 Version 5.6        (R2011a)
System Identification Toolbox                         Version 7.4.2      (R2011a)
SystemTest                                            Version 2.6.1      (R2011a)
Wavelet Toolbox                                       Version 4.7        (R2011a)
xPC Target                                            Version 5.0        (R2011a)
xPC Target Embedded Option                            Version 5.0        (R2011a)
 
 
markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 19.03.2013, 21:21     Titel:
  Antworten mit Zitat      
Ich bin überfragt. Die Toolbox hast du. Das sollte also funktionieren.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2013, 21:27     Titel:
  Antworten mit Zitat      
Schade! Von der Art her sieht es genau nach dem aus, was ich brauchen könnte =/

Vll kommt ja noch ne Lösung, sonst fliegt es aus dem Programm raus und ich überleg mir was anderes oO.
 
Harald
Forum-Meister

Forum-Meister


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

probier mal das:
Code:
solve('x+((5^2)/5) = 35')

oder
Code:
syms x; solve(x+((5^2)/5) - 35)


Ich müsste das mal überprüfen, aber es kann sein, dass deine MATLAB-Version diese Syntax noch nicht unterstützt.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2013, 10:06     Titel:
  Antworten mit Zitat      
Guten Morgen!

Erstmal danke, beide Arten funktionieren! Die Arbeit hab ich jetzt ohne das Ganze verschickt, würde das Problem trotzdem gern noch lösen =)

Geht das auch irgendwie, wenn "x" zweimal vorkommt? Entgegen meinem ursprünglichen Vorhaben es möglichst "klein" zu halten, poste ich jetzt mal doch die Formel:

Original (geht um Wasserstauanlagen -> Dimensionierung eines Tosbecken):
Code:

if v0 < 0.5
    % Berechnung von h1 über die Bernoulli-Gleichung
    syms h1;solve('h0 + v0^2/(2*g) = h1 + (Q/(b*h1))^2/(2*g)');
    disp(['h1 = ',num2str(h1,'%7.2f')])
else
    disp('Rechnung folgt')
end
 


Im Command Window mit folgenden Eingaben probiert:

Code:

Q=540
h0=37.04
v0=0.49
g=9.81
b=30
h1=x
syms x;solve('37.04 + 0.49^2/(2*9.81) = x + ((540/30*x))^2/(2*9.81)');
 


Geht es, dass x zweimal in der Gleichung erscheint? Oder ist der Ansatz völlig falsch? =)

LG & danke!
 
Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2013, 10:10     Titel:
  Antworten mit Zitat      
Tschuldigt für den doppelten Eintrag (vll reg ich mich doch mal zum editieren Wink)

Doch bevor Ansagen kommen: Ja, die Ausgabe scheint mit sym nicht zu funktionieren.

Fehlermeldung:
Code:

Warning: Function is not defined for 'sym' inputs.
> In num2str>cellPrintf at 182
  In num2str at 140
  In dimensionierung at 25
  In Staumauer at 46
 


Bei
Code:

>> syms x;solve('37.04 + 0.49^2/(2*9.81) = x + ((540/30*x))^2/(2*9.81)');
>>
 

erscheint übrigens keine Fehlermeldung, aber auch keine Lösung Wink
 
Harald
Forum-Meister

Forum-Meister


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

ich habe verifiziert, dass der Ansatz mit == in 2011a noch nicht unterstützt war. Im Zweifelsfall sollte man sich die Beispiele in der Doku ansehen und sich daran orientieren.

Zitat:
Geht es, dass x zweimal in der Gleichung erscheint?

Warum sollte es nicht gehen? Das ist durchaus üblich ;)

Zitat:
Doch bevor Ansagen kommen: Ja, die Ausgabe scheint mit sym nicht zu funktionieren.

Fehlermeldung: [...]

Welcher Code erzeugt diese Fehlermeldung?

Zitat:
Bei [...]
erscheint übrigens keine Fehlermeldung, aber auch keine Lösung

Wie auch? Mit dem Strichpunkt unterdrückst du die Ausgabe, und du weist das Ergebnis keiner Variablen zu. So ist's besser:
Code:
xloesung = solve('37.04 + 0.49^2/(2*9.81) = x + ((540/30*x))^2/(2*9.81)'


Achte aber auf die Klammernsetzung. Wenn man nach deiner ursprünglichen Formel mit h0, v0 etc. geht, müsste das (30*x) in Klammern stehen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2013, 10:39     Titel:
  Antworten mit Zitat      
Zitat:

Welcher Code erzeugt diese Fehlermeldung?
Fehlermeldung:
[code]
Warning: Function is not defined for 'sym' inputs.
> In num2str>cellPrintf at 182
In num2str at 140
In dimensionierung at 26
In Staumauer at 46
[/code

[code]
if v0 < 0.5
% Berechnung von h1 über die Bernoulli-Gleichung
syms x;solve('37.04 + 0.49^2/(2*9.81) = x + ((540/(30*x)))^2/(2*9.81)');
disp(['h1 = ',num2str(x,'%7.2f')])
else
disp('Rechnung folgt')
end
[/code]

Von den Ergebnissen, die er ausgibt, ist nur eines passabel =) Wie bekomme ich das auf das reduziert?
Also
[code]
>> syms x;solve('37.04 + 0.49^2/(2*9.81) = x + ((540/(30*x)))^2/(2*9.81)')
ans =
5.1427877848475078473632223503473*10^(-39)*i + 0.67375298461183314007330483877141
- 5.0509522886895166358031648083768*10^(-39)*i - 0.66171650909376557802917402556546
37.040201037224032336019070002288 - 9.1835496157991211560057541970488*10^(-41)*i
[/code]
Die 0.67375298... ist die gesuchte Lösung. Den Rest würde ich gern abschneiden. Mit
[code] disp(['x = ',x,'%7.2f'])[/code] wollte ich den "Schwanz" abschneiden, aber die anderen Ergebnisse kann ich damit ja nicht ausblenden und es funktioniert ja nicht wegen der oben genannten Fehlermeldung =/
 
Newb190313

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2013, 10:41     Titel:
  Antworten mit Zitat      
Zitat:

Welcher Code erzeugt diese Fehlermeldung?
Fehlermeldung:
Code:

Warning: Function is not defined for 'sym' inputs.
> In num2str>cellPrintf at 182
  In num2str at 140
  In dimensionierung at 26
  In Staumauer at 46
 


Code:

if v0 < 0.5
    % Berechnung von h1 über die Bernoulli-Gleichung
   syms x;solve('37.04 + 0.49^2/(2*9.81) = x + ((540/(30*x)))^2/(2*9.81)');
    disp(['h1 = ',num2str(x,'%7.2f')])
else
    disp('Rechnung folgt')
end
 


Von den Ergebnissen, die er ausgibt, ist nur eines passabel =) Wie bekomme ich das auf das reduziert?
Also
Code:

>> syms x;solve('37.04 + 0.49^2/(2*9.81) = x + ((540/(30*x)))^2/(2*9.81)')
ans =
   5.1427877848475078473632223503473*10^(-39)*i + 0.67375298461183314007330483877141
 - 5.0509522886895166358031648083768*10^(-39)*i - 0.66171650909376557802917402556546
    37.040201037224032336019070002288 - 9.1835496157991211560057541970488*10^(-41)*i
 

Die 0.67375298... ist die gesuchte Lösung. Den Rest würde ich gern abschneiden. Mit
Code:
disp(['x = ',x,'%7.2f'])
wollte ich den "Schwanz" abschneiden, aber die anderen Ergebnisse kann ich damit ja nicht ausblenden und es funktioniert ja nicht wegen der oben genannten Fehlermeldung =/


// Da drueckt man einmal nicht auf Vorschau =/ bitte den obigen Post loeschen =/
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.