|
|
Einfache Gleichung mit einer Unbekannten iterativ lösen |
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 20:25
Titel: Einfache Gleichung mit einer Unbekannten iterativ lösen
|
 |
|
 |
|
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
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
LG von nem Gast...
|
|
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 20:38
Titel:
|
 |
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
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
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 20:46
Titel:
|
 |
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))
Ideen? =)
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 20:57
Titel:
|
 |
you're doing it wrong
1. Wenn du es in einer Zeile haben willst, musst du z.b. ein Semikolon hinter den ersten Befehl setzen
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
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 21:08
Titel:
|
 |
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. =)
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
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 21:10
Titel:
|
 |
Tipp mal
ein, damit wir sehen was für Toolboxen dir zur verfügung stehen.
_________________
DIY OR DIE
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 21:13
Titel:
|
 |
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 21:21
Titel:
|
 |
Ich bin überfragt. Die Toolbox hast du. Das sollte also funktionieren.
_________________
DIY OR DIE
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 21:27
Titel:
|
 |
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
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 19.03.2013, 22:53
Titel:
|
 |
Hallo,
probier mal das:
oder
Ich müsste das mal überprüfen, aber es kann sein, dass deine MATLAB-Version diese Syntax noch nicht unterstützt.
Grüße,
Harald
|
|
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.03.2013, 10:06
Titel:
|
 |
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):
Im Command Window mit folgenden Eingaben probiert:
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: ---
|
 |
|
|
 |
|
Verfasst am: 20.03.2013, 10:10
Titel:
|
 |
Tschuldigt für den doppelten Eintrag (vll reg ich mich doch mal zum editieren )
Doch bevor Ansagen kommen: Ja, die Ausgabe scheint mit sym nicht zu funktionieren.
Fehlermeldung:
Bei
erscheint übrigens keine Fehlermeldung, aber auch keine Lösung
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.03.2013, 10:19
Titel:
|
 |
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:
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
|
|
|
Newb190313 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.03.2013, 10:39
Titel:
|
 |
|
 |
|
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: ---
|
 |
|
|
 |
|
Verfasst am: 20.03.2013, 10:41
Titel:
|
 |
Zitat: |
Welcher Code erzeugt diese Fehlermeldung?
Fehlermeldung:
|
Von den Ergebnissen, die er ausgibt, ist nur eines passabel =) Wie bekomme ich das auf das reduziert?
Also
Die 0.67375298... ist die gesuchte Lösung. Den Rest würde ich gern abschneiden. Mit
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 =/
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|