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

Matlab 2008a Problem grafische 3D Darstellung

 

MAC-User

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2008, 14:56     Titel: Matlab 2008a Problem grafische 3D Darstellung
  Antworten mit Zitat      
Hallo,
habe Matlab 2008a als Mac Version, bin Student und muss mich nun ein wenig in Matlab reinfinden.

Nun habe ich folgendes Problem, ich soll die Rosenbrock-Funktion mit Hilfe von surf grafisch darstellen. Aber egal was ich versuche, es kommt immer die Fehlermeldung: "too many input Arguments".

Ich habe dies auch mit den Beispielfunktion von Matlab und einigen aus dem Internet versucht--> leider mit dem selber Ergebnis.

Daher vermute ich beinahe einen Fehler in surf.m oder sowas? Kann mir da jemand helfen?


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.11.2008, 16:19     Titel:
  Antworten mit Zitat      
Hallo,

Man kann sehr schwer an dein Problem rangehen. Ich bin z.B kein Mathematiker
Bitte mache doch mehr Angaben, was übergibst du denn genau?
Beispiel wäre sehr hilfreich
Private Nachricht senden Benutzer-Profile anzeigen
 
Mac-User

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2008, 16:38     Titel:
  Antworten mit Zitat      
ja ist schwierig.
also so sieht die Hauptfunktion aus:
Zitat:

%%
y1=-2:4/25:2;
y2=-2:0.2:3;
z=rosenbrock(y1,y2);
size(z),
figure(6),
surf(y1,y2,z),


und das ist die rosenbrock funktion
Zitat:

function[z]=rosenbrock(x,y)
for i1=1:length(x)
for i2=1:length(y)
z=(1-x).^2+100*(y-x.^2).^2;
end
end

im moment nur das wesentlich.

aber ich auch das beispiel von Matlab versucht:
Zitat:

[X,Y,Z] = peaks(30);
surfc(X,Y,Z)
colormap hsv
axis([-3 3 -3 3 -10 5])

selbes Ergebnis:
Zitat:

??? Error using ==> surf
Too many input arguments.


Deshalb glaub ich da beinahe an einen bug.

Bin für jede Hilfe dankbar.
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 16.11.2008, 16:59     Titel:
  Antworten mit Zitat      
Die for schleifen in der Rosenbrockfunktion haben so wie sie jetzt ausgeführt werden, überhaupt keine Funktion und könnten also weggelassen werden. Dabei müsste man dann nochmal über den eigentlichen Sinn und die Ausgabe der Funktion reden.

Grundsätzlich glaube ich, dass du falsche Eingaben bei surf machst, denn X,Y,Z müssen Matrizen sein. Du kannst ja mal einfach eine Matrix Z erstellen und sie dann mit surf(Z) plotten, wenn das nicht geht, gibts ein Problem, wobei ich davon nicht ausgehe. Teste das einfach mal, dann sehen wir weiter.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.11.2008, 17:10     Titel:
  Antworten mit Zitat      
Genau, Maddy hat recht, die Eingaben müssen Matrizen sein.
sonst kommt folgende Fehlermeldung, zumindest unter R2007b
Zitat:

??? Error using ==> surf at 75
Z must be a matrix, not a scalar or vector.

Error in ==> testsurf at 8
surf(y1,y2,z),


Aber von anderer Seite stimmt etwas mit Matlab wirklich nicht
denn zumindest Beispiel aus Matlab - Hilfe müsste durchlaufen.

Code:

[X,Y,Z] = peaks(30);
surfc(X,Y,Z)
colormap hsv
axis([-3 3 -3 3 -10 5])
 


Hab im Moment zur Hand nur 2007b,
Über 2008a kann ich erst morgen eine Aussage machen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mac-User

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2008, 17:11     Titel:
  Antworten mit Zitat      
Ja danke für die Tipps. Eine Dozentin meinte, ich müsse dies einbauen...???

So hab deine Vorschlag versucht.

Zitat:

function test1
z=[1 2 3; 4 5 6; 7 8 9];
surf(z),


Ergebnis:
Zitat:

Error in ==> test1 at 3
surf(z),
??? Error using ==> surf
Too many input arguments.

Error in ==> test1 at 3
surf(z),
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.11.2008, 17:23     Titel:
  Antworten mit Zitat      
Hab jetzt etwas überlegt,
und bin eigentlich zu Schluß gekommen, dass eigentlich nicht möglich ist, dass der Fehler bei Matlab liegt. Denn Matlab hat in R2008a an dieser Funktionen ja nichts verändert.
Aber wie gesagt kann erst morgen mit Sicherheit das ausschliessen

Es kann noch daran liegen, dass du irgend wo eine Funktion (M-File) liegen hast. Welches gleichen Namen hat.

versuche in Matlab -Konsole mit which das abzufragen.
Code:


sollte aus folgenden Paketen stammen:

Zitat:

MATLAB\R2007b\toolbox\matlab\graph3d\surf.m
MATLAB\R2007b\toolbox\matlab\specgraph\surfc.m
Private Nachricht senden Benutzer-Profile anzeigen
 
Mac-User

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2008, 17:36     Titel:
  Antworten mit Zitat      
Ok.... ich glaub das war es...habe beim suchen dann 2 surf.m gefunden.
eine habe ich umbenannt, die mir nicht richtig schien.


Jetzt kommt der Fehler

Zitat:

??? Error using ==> surf at 70
Z must be a matrix, not a scalar or vector.


Muss jetzt also die Matrizen erzeugen lassen, damit die rosenbrock-funktion geplottet wird?

Danke erstmal für die super Hilfe!
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 16.11.2008, 17:44     Titel:
  Antworten mit Zitat      
Ich tippe mal stark darauf, dass du für jede Kombination aus x und y die Funktion berechnen willst. Dann sollte die Rosenbrook-Funktion wie folgt aussehen:

Code:

function[X,Y,Z]=rosenbrock(x,y)

[X,Y]=meshgrid(x,y); % Matrizen für x und y

Z=(1-X).^2+100.*(Y-X.^2).^2;

 


und dann einfach mittels surf(X,Y,Z) plotten.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mac-User

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2008, 17:55     Titel:
  Antworten mit Zitat      
Sieht schon gut aus.
Passt fast. Die Aufgabe lautet:

und das Bild sollte so aussehen:

Bild 3.png
 Beschreibung:
Und das Ziel der Abbildung

Download
 Dateiname:  Bild 3.png
 Dateigröße:  142.05 KB
 Heruntergeladen:  696 mal
Bild 2.png
 Beschreibung:
Die Aufgabe

Download
 Dateiname:  Bild 2.png
 Dateigröße:  41.69 KB
 Heruntergeladen:  686 mal
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.11.2008, 19:58     Titel:
  Antworten mit Zitat      
Einfach das Z-Matrix transponieren

Code:

function testsurf()
%%
y1=-2:4/25:2;
y2=-2:0.2:3;
[x,y,z]=rosenbrock(y1,y2);
size(z)
figure;

surf(x,y,z);


function[X,Y,Z]=rosenbrock(x,y)

[X,Y]=meshgrid(x,y); % Matrizen für x und y

Z=(1-X).^2+100.*(Y-X.^2).^2;
Z=Z';
 


Zuletzt bearbeitet von denny am 16.11.2008, 19:59, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 16.11.2008, 19:58     Titel:
  Antworten mit Zitat      
Einfach surf(Y,X,Z) und dann noch Achsenbeschriftung mittels der "...label"-funktionen. Grundsätzlich solltest du bei der Aufgabe lernen mit Matrizen in Matlab umzugehen bzw. diese zu Erzeugen.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mac-User

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2008, 21:50     Titel:
  Antworten mit Zitat      
Also ich bin begeistert! Hat wirklich super geklappt!!! Dankeschön. Da werde ich mich doch hier bei Gelegenheit gleich mal anmelden. Werd als Verfahrenstechniker sicher noch viel mehr mit Matlab arbeiten.

Danke!!!
 
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.