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

beliebige Funktion über input eingeben und verarbeiten

 

willi_vintage
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2014, 19:35     Titel: beliebige Funktion über input eingeben und verarbeiten
  Antworten mit Zitat      
ich möchte einen beliebige Funktion (Polynom, gebr. rationial etc.) über die input einlesen und die daraus erzeugte Zeichenkette vektoriell weiterverarbeiten. Geht sowas überhaupt (bin Neuling)? Die Suchfunktion gab mit nur die Möglichkeit von inline aus.....aber damit komme ich nicht klar.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

bitte immer dazu sagen, was du genau versucht hast.
inline ist veraltet und würde ich meiden.

Eine Möglichkeit:
Code:
f = input('Funktion f(x) eingeben: ', 's');
f = str2func(['@(x) ' f]);
f(1:5)


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2014, 20:23     Titel:
  Antworten mit Zitat      
Hallo Harald,

Danke erstmal....
naja, du wirst lachen, ber ich vesuche mich nun seit etwa 3 Stunden daran, eine einfache Funktion im Script einzulesen.... also f=input('Funktion eingeben:'). Hier meckert er natürlich immer, dass die Variable x unbekannt sei.....tja, und weiter komme ich nicht. Lediglich ne olle switch case für die Menue-Gestaltung steht. mit der eigentlichen Progtammierung komme ich überhaupt nicht weiter....
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hast du denn mal meinen Vorschlag versucht?
Inkl. der Option 's' bei input, damit die Eingabe als Zeichenkette interpretiert wird (siehe auch Dokumentation)?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2014, 21:05     Titel:
  Antworten mit Zitat      
ja, so funktionierts, allerdings str2func nicht. Handle ist mir unbekannt und die Erklärungen in der Literatur dazu helfen mir nicht...

Momentan siehts so aus:

Code:
xStart=input('Startwert')
xEnd=input('Endwert')
Schrittweite=input('Schrittweite')
f=input('Funktion f(x) eingeben:', 'S')
f=str2func('@(x)', f)
funktest(f, y)


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]

Zuletzt bearbeitet von willi_vintage am 01.11.2014, 21:17, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2014, 21:16     Titel:
  Antworten mit Zitat      
Hallo,

was genau versuchst du, und was funktioniert daran nicht? Eventuelle Fehlermeldungen bitte kopieren, nicht interpretieren.

Mit welcher MATLAB-Version arbeitest du denn?

Zu Function Handles:
http://www.mathworks.de/help/matlab.....handles.html?refresh=true
http://www.gomatlab.de/tutorial-kei.....function-handle-t545.html

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2014, 21:28     Titel:
  Antworten mit Zitat      
Fehler:

Error using ==> str2func
Too many input arguments.

hatte ich mir bereits durchgelesen. Die Frage ist, wie man sowas einsetzt?
Meine Version ist die 2011a.
Im oberen Post sind die aktuellen Eingaben drin.
Die gestellte Aufgabe umfasst die Nullstellenberechnung beliebiger Funktionen. Zudem soll die Genauigkeit, Schrittweite, Start- und Endwert vom User abgefragt werden. Als Ausgabe sollen ein Plott und die Nullstellen ausgegeben werden.
Vorwissen meinerseits kaum. Wir haben in der Vorlesung mehr mit Simulink und wie man Dateien speichert und aufruft rumgespielt, aber das relevante ausgelassen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bitte geb die Sachen doch so ein, wie ich sie vorschlage. Ich mache die eckigen Klammern ebensowenig zum Spaß hin wie das 's'.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2014, 22:15     Titel:
  Antworten mit Zitat      
aaaah-Danke
war wohl einfach zu lange heute. So funktioniert auf jeden Fall!
Private Nachricht senden Benutzer-Profile anzeigen
 
willi_vintage
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2014, 07:48     Titel:
  Antworten mit Zitat      
nur kann ich mit dem Vorschlag nichts anfangen. Die Syntax ist mir absolut nicht klar. Es muss doch irgendwie eine Möglichkeit geben, eine beliebige Funktion in Matlab eingeben zu können, also z.B. y=2*x
Daraus weiterführend Nullstellen berechnen (x- Wert und y-Abschnitt). Die Tutorials habe ich durch, wirkliche sinnvolle Erklärungen werden nirgends gegeben Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

der Vorschlag ist im Grunde äquivalent zu f(x) = ..., wenn du mit der Funktion dann numerisch arbeiten willst (Zahlen einsetzen, Nullstellen numerisch bestimmen etc.).

Eine Alternative ist das symbolische Arbeiten mit der Funktion. Die Ergebnisse sind exakt statt numerisch angenähert, manche Gleichungen können aber auch einfach nicht symbolisch gelöst werden.
Code:
f = input('Funktion f(x) eingeben: ', 's');
f = sym(f)
solve(f)

Die Entscheidung liegt bei dir bzw. der Komplexität der Funktion.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2014, 14:00     Titel:
  Antworten mit Zitat      
das hilft mir alles nicht weiter, da mir die Syntax nicht bekannt ist. Mein Wissensstand entspricht dem eines kurzes Einstiegstutorials. Die Aufgabenstellung verlangt aber Wissen, das mir unbekannt und unverständlich ist (brauche quasi ne Erklärung, was die Syntax macht).
Und zu machen ist (nein, ich erwate keine Lösung, aber es wäre nett wenn jemand mit mir die Vorgehensweise durchgehen könnte):

Es soll für belieige Funktionen die Nullstellen berechnet werden. Die Nullstellen sollen reell sein. Durch eine Benutzereingabe wird die x-Achse festgelegt (und somit auch nur die Nullstellen in diesem Bereich). Die Genauigkeit dieses Schnittpunktes soll ebenso festgelgt werden (Mittelwert zwischen zwei x-Werten - das sollte ich auch noch hinbekommen). Die zugehörigen y-Werte zu den Schnittpunkten sollen auch ausgegeben werden.
Das einzige was ich bislang selbst hinbekomme ist ne switch/case für das Menue und die input-Abfrage (mehr Wissensstand geht nicht aus den Vorlesungen hervor):

Code:

menue=input('Druecken Sie 1 um die Funktion einzugeben, 2 um zu beenden');
switch menue
    case 1
 
        xStart=input('Startwert:');
        XEnd=input('Endwert:');
        Schrittweite=input('Schrittweite:');
        f=input('Funktion f(x) eingeben', 'S');
        x=xStart: Schrittweite: XEnd;
     case 2
        exit
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2014, 21:03     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
das hilft mir alles nicht weiter, da mir die Syntax nicht bekannt ist.

Pragmatisch gesagt: Dann wirst du dich entweder damit vertraut machen oder Code verwenden müssen, ohne ihn im Details zu verstehen. Helfen kann man dir beim Verständnis jedenfalls nur bei konkreten Fragen zum Code, und davon habe ich keine gesehen.

Sollen die Nullstellen numerisch oder analytisch bestimmt werden?
numerisch --> fsolve oder fzero
analytisch --> solve
Für letzteres habe ich sogar das fertige Beispiel hingeschrieben,
für das erstere ginge z.B.
Code:
fzero(f, [xStart, xEnd])

Die Genauigkeit kann über das dritte Argument angegeben werden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2014, 22:10     Titel:
  Antworten mit Zitat      
die Nullstellen sollen mittels Bisektion ermittelt werden....aber egal...10 Tage und kein Stück weiter Sad so sieht das heutige Studentleben aus.

Code:
function [ f, Nullstellen, y] = F_SCHNITTPUNKTE(x, genauigkeit)
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here

%  f=0.5*x.^3-5*x.^2+2*x+10;
 f=x.^2-4.1;
       
        Schnittstellen=(f(1:end-1).*f(2:end))
        vzw=find(Schnittstellen<=0)
        xStartNeu=x(vzw)
        xEndNeu=x(vzw+1)

           
        while (xEndNeu-xStartNeu)>=genauigkeit
           
%             if (????) wie kann f der neue x-Wert zugewiesen werden?
                xStartNeu=(xEndNeu+xStartNeu)/2
            else
                xEndNeu=(xEndNeu+xStartNeu)/2
            end    
        Nullstellen=xStartNeu
        end

        plot(x, f)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.11.2014, 21:30     Titel:
  Antworten mit Zitat      
Hallo,

wenn du dich 10 Tage lang nicht meldest, kann man dir in der Zeit leider auch nicht weiterhelfen. Dies ist zudem das erste Mal, dass du Bisektion erwähnst.

Hier findest du z.B. eine Implementation der Bisektion in MATLAB:
http://www.mathworks.com/matlabcent.....e/33748-bisection-method/

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3, 4  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.