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

Funktion in einem m.File ausgeben

 

Ovid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2012, 18:32     Titel: Funktion in einem m.File ausgeben
  Antworten mit Zitat      
Hallo, ich hab hier folgendes Problem:

Ich sollte partielle Ableitungen von ein paar Aufgaben bilden. Das hab ich auch geschafft, nur bekomme ich die Ableitungen nicht auf den Bildschirm.

Hier erstmal das was ich schon gemacht habe:

Code:

function [Abl1x,Abl2x,Abl1y,Abl2y,Ablxy]=Ableitungxy(z1,z2,z3)

syms x y
z1=@(x,y)(sqrt(x^2-2*x*y));
Abl1x=diff(z1,x);
Abl2x=diff(z1,x,2);
Abl1y=diff(z1,y);
Abl2y=diff(z1,y,2);
Ablxy=diff(diff(z1,x),y);
fprintf('%f',Abl1x)
 


Dann kommt dieser Fehler:

"??? Error using ==> fprintf
Function is not defined for 'sym' inputs.

Error in ==> Ableitungxy at 10
fprintf('%f',Abl1x)"

Was muss ich an fprintf verändern, dass er mir den Wert ausgibt, der in Abl1x, Abl2x etc. steckt?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

was spricht gegen die Verwendung von DISP?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 18:06     Titel:
  Antworten mit Zitat      
Disp hatte ich auch probiert, jedoch weiß ich nicht, wie ich gleichzeitig Text und den Wert mehrerer Variablen mit disp ausgeben kann, in der Hilfe und bei doc hab ich nicht viel dazu gefunden.
Ich möchte nämlich Abl1x, Abl2x, Abl1y, Abl2y und Ablxy auf den Bildschirm ausgeben, aber am besten alles mit einem disp Befehl und nicht mit mehreren.

Grüße
Ovid
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mit char kannst du den symbolischen Ausdruck in einen String umwandeln.
Dann z.B. so:
Code:
fprintf('Erste Ableitung ist %s', char(Abl1x))


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2012, 17:41     Titel:
  Antworten mit Zitat      
Ah, danke! Genau das habe ich gesucht und gemeint Smile
Allerdings habe ich noch ein kleines Problem. Und zwar zeigt er ein Ergebnis an, obwohl er das gar nicht anzeigen sollte und ich weiß nicht, wieso...

Hier erstmal der Code:
Code:

function [Abl1x,Abl2x,Abl1y,Abl2y,Ablxy]=Ableitungxy(z1,z2,z3)

syms x y
z1=sqrt(x^2-2*x*y);
Abl1x=diff(z1,x);
fprintf('Erste Ableitung in Abhängigkeit von x ist: %s\n\n',char(Abl1x))
Abl2x=diff(z1,x,2);
fprintf('Zweite Ableitung in Abhängigkeit von x ist: %s\n\n',char(Abl2x))
Abl1y=diff(z1,y);
fprintf('Erste Ableitung in Abhängigkeit von y ist: %s\n\n',char(Abl1y))
Abl2y=diff(z1,y,2);
fprintf('Zweite Ableitung in Abhängigkeit von y ist: %s\n\n',char(Abl2y))
Ablxy=diff(diff(z1,x),y);
fprintf('Die gemischte Ableitung in Abhängigkeit von x und y: %s\n\n',char(Ablxy))

ende
 


Und das Ergebnis zeigt Matlab an:

ans =

(2*x - 2*y)/(2*(x^2 - 2*x*y)^(1/2))

Nur Warum??


Grüße

Ovid
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

; am Zeilenende beim Aufruf oder keine Argumente zurückgeben.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2012, 18:59     Titel:
  Antworten mit Zitat      
Das Semikolon hab ich gesetzt, wo es gesetzt werden muss. Aber das Ergebnis wird immer noch ausgegeben. Komischerweise immer das Ergebnis von der 1. Ableitung. Und was meinst du mit keine Argumente zurückgeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Das Semikolon hab ich gesetzt, wo es gesetzt werden muss.

Beim Aufruf der Funktion offensichtlich nicht.

Ohne Rückgabeargumente:
Code:
function Ableitungxy(z1,z2,z3)


Das von dir beobachtete Verhalten ist dasselbe, als ob du z.B.
Code:

eingibst.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2012, 15:29     Titel:
  Antworten mit Zitat      
Also am Semikolon hats nicht gelegen, es lag tatsächlich an den Rückgabeargumenten. Hatte ich die ausgeblendet, zeigte er mir keine doppelten Ergebnisse an. Komisch war nur, dass Matlab mir nur die ersten Ableitungen nach x, y und z angezeigt hatte. Aber okay, die Wege Matlabs sind manchmal unergründlich Wink
Auf jeden Fall funktioniert das jetzt so wie ich wollte, danke für deine Hilfe Harald Smile
Nur noch ne kurze Frage hintenran, kann ich in Matlab ein Boolean Vergleich (Wahr und Falsch) zwischen zwei Werten machen und das dann ausgeben?
Dazu hab ich in den Tuts nicht viel gefunden, nur alles mit while, if oder switch...

Grüße
Ovid
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2012, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

ich behaupte, das hat alles seine Logik. Genauer erklären könnte ich das aber nur, wenn ich es genau sehe, was du machst.

Mit == , strcmp oder auch isequal -- je nachdem, was du vergleichst.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2012, 15:58     Titel:
  Antworten mit Zitat      
Alles klar! Ich habs gleich mit strcmp versucht und es hat geklappt!

=> strcmp(DeltaU,'0')

Und das Ergebnis ist 0, klasse ^^

So und jetzt hab ich noch ne andere klitzekleine Frage zum verschönern des Textes aus fprintf, kann ich die Textfarbe irgendwie ändern?

Ich suche seit einer halben Stunde im Netz, aber ich finde nichts was mir weiterhilft. Anscheinend gabs mal sowas wie cprintf, aber das funktioniert bei mir gar nicht, Matlab kennt den Befehl bei mir gar nicht.
Und mit fprintf(2,'Text') kann ich die Textfarbe nur in rot ändern, aber das wars auch schon...gibts da noch andere Möglichkeiten, wie ich den Text andersfarbig ausgeben könnte?

Grüße

Ovid
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.01.2012, 17:12     Titel:
  Antworten mit Zitat      
Hallo Ovid,

Ausser fprintf(2, 'Hello') ist in Matlab eine Änderung der Text-Farbe nicht vorgesehen. Yair Altman hat in den FileExchange-Seiten von MathWorks "cprintf" veröffentlicht, mit dem man es trotzdem hinbekommt. Von dort kannst Du es herunterladen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2012, 17:25     Titel:
  Antworten mit Zitat      
Schade! Dass mit cprintf hatte ich inzwischen auch gefunden, allerdings ist das ja ein riesen Skript, wenn man bedenkt, dass ich "nur" die Textfarbe ändern möchte ^^
Und "cprintf" kennt mein Matlab nicht, was etwas komisch ist, aber okay.
Aber Danke erstmal.
Wenigstens funktioniert jetzt alles.

Schöne Grüße

Ovid
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.01.2012, 23:18     Titel:
  Antworten mit Zitat      
Hallo Ovid,

Was genau bedeutet dies:
Zitat:
Und "cprintf" kennt mein Matlab nicht, was etwas komisch ist, aber okay.

Hast Du cprintf.m runtergeladen und in einem Ordner gespeichert, der im Matlab PATH enthalten ist?
Ist die Tatsache, dass CPRINTF groß ist, irgendwie nachteilig?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Ovid
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 25.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2012, 22:50     Titel:
  Antworten mit Zitat      
^^ nein, cprintf.m hab ich noch nicht runtergeladen, hatte aber mal einen Blick drauf geworfen. Und dafür, dass es eigentlich nur die Farbe des ausgegebenen Textes ändern soll fand ich das Skript ziemlich lang. Aber ich finde das nicht nachteilig, ich hab mich nur gewundert, das ist alles Smile
Und mit "cprintf kennt mein Matlab nicht" sollte nur bedeuten, als ich "cprintf" als Befehl eingegeben hatte, kam eine Fehlermeldung, dass Matlab "cprintf" nicht kennt. Ich hatte in einem anderen Forum mal gelesen, dass man cprintf verwenden sollte, von daher war ich nur etwas überrascht, dass das nicht funktionierte.

Grüße

Ovid
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 - 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.