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

Einfacher Plot

 

justmarvel
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2014, 18:11     Titel: Einfacher Plot
  Antworten mit Zitat      
Hallo,
ich möchte folgenden Plot erstellen. Leider gibt mir Matlab eine Fehlermeldung aus. Wo liegt hier der Fehler? Vielen Dank!

x = 0: 0.01: 4;

f2(x>=0 & x<1) = 1;
f2(x>=1) = 0;


n1(x) = (1-x)*((1-x)*f2);

plot(x,n1);
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du brauchst elementweise Multiplikation, und eine Zuweisung an n1(x) ist nicht wirklich sinnvoll, da x hier als Index verstanden würde.
f2 sollte vorbelegt werden.

Code:
x = 0: 0.01: 4;

f2 = zeros(size(x));
f2(x>=0 & x<1) = 1;
f2(x>=1) = 0;


n1 = (1-x).*((1-x).*f2);
plot(x,n1);


Grüße,
Harald

P.S.: Bitte die Code-Umgebung verwenden und vor allem immer die Fehlermeldung posten.
Private Nachricht senden Benutzer-Profile anzeigen
 
justmarvel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2014, 18:53     Titel:
  Antworten mit Zitat      
Vielen Dank!

Aber warum kann ich keine normale Multiplikation durchführen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

weil die "normale" Multiplikation in MATLAB die Matrix-Vektor-Multiplikation ist und nicht die komponentenweise.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2014, 19:09     Titel:
  Antworten mit Zitat      
Alles klar. Danke nochmal für die schnelle Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
justmarvel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2014, 20:39     Titel:
  Antworten mit Zitat      
So ich habe das ganze jetzt erweitert. Der erste Plot funktioniert super.
Beim zweiten stimmt allerdings wieder etwas nicht.

Folgender Code:

Code:
x = 0: 0.01: 4;

f2 = zeros(size(x));
f2(x>=0 & x<1) = 1;

f3 = zeros(size(x));
f3(x>=1 & x<2) = 1;

f4 = zeros(size(x));
f4(x>=2 & x<3) = 1;

f5 = zeros(size(x));
f5(x>=3 & x<4) = 1;

n0 = (1-x).*((1-x).*f2);
n1 = x.*((1-x).*f2)+0.5.*((2-x).*(x.*f2+(2-x).*f3));
n2 = 0.5.*(x.*(x.*f2+(2-x).*f3))+0.5.*((3-x).*((x-1).*f3+(3-x).*f4));
n3 = 0.5.*((x-1).*((x-1).*f3+(3-x).*f4))+0.5.*((4-x).*((x-2).*f4+(4-x).*f5));
n4 = 0.5.*((x-2).*((x-2).*f4+(4-x).*f5))+(4-x).*((x-3).*f5);
n5 = (x-3).*((x-3).*f5);


plot(x,[n0;n1;n2;n3;n4;n5])
title('Basisfunktionen N(i,3)')
xlabel('u')
ylabel('N(i,3)')
legend({'N(0,3)','N(1,3)','N(2,3)','N(3,3)','N(4,3)','N(5,3)'},'Location','EastOutside')


x2 = 0: 0.01: 20;


p = [0.0;0.0]*n0+[2.0;4.0]*n1+[9.0;4.0]*n2+[16.0;8.0]*n3+[18.0;12.0]*n4+[20.0;14.0]*n5;

figure(2)
plot(x2,p)


Wenn ich das Intervall x2 auf 0:0.01:4 wie oben ändere zeigt er einen Plot an. Mit "20" als Grenze gibt Matlab folgende Fehlermeldung aus:

Error using plot
Vectors must be the same lengths.

Error in CAMPP_HA5 (line 36)
plot(x2,p)

Danke schon mal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

weil du n0 bis b5 für x1 ausgewertet hast.

Wenn du es abhängig von x2 plotten willst, musst du es auch für x2 auswerten.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2014, 19:03     Titel:
  Antworten mit Zitat      
Ok aber leider klappt es nicht so wie ich das will.

Der zweite Plot soll einen "Bspline" darstellen, falls dir das etwas sagt.
Die Werte in eckigen Klammern z.B. [20.0;14.0] sind die Knotenpunkte.
Die Funktion müsste also bei [20.0;14.0] enden. Ich denke ich Plote das ganze falsch, da die einzelnen Funktionen sich ja an den Knotenpunkten orientieren sollten. Die x Achse muss demnach bis 20 reichen. Ich hoffe ich habe mein Problem verständlich rüber gebracht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

welchen Code nutzt du denn aktuell?

Hast du auch daran gedacht, f2 bis f5 entsprechend umzudefinieren?

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2014, 16:34     Titel:
  Antworten mit Zitat      
Ja das habe ich zuerst ausprobiert, aber so kann ich es nicht machen,
da der Bspline laut Definition im Intervall 0-4 sein soll. Also wird die Funktion p
mit den x-Werten 0:0.01:4 berechnet. Wenn man dann beispielsweise 3.99 als x-Wert hätte müssten alle Summanden von Funktion p 0 ergeben, außer im letzten. Dort muss bei [20.0;14.0]*n5 die Funktion n5 = 1 sein, da sie so definiert ist: n5 = (x-3).*((x-3).*f5); f5 ist wiederum so definiert: f5 = zeros(size(x));
f5(x>=3 & x<4) = 1;

Also steht folgendes da bei einem x-Wert von 3.99:

p = [0.0;0.0]*0+[2.0;4.0]*0+[9.0;4.0]*0+[16.0;8.0]*0+[18.0;12.0]*0+[20.0;14.0]*1;

= [20.0;14.0]*1

Die Funktion soll also beim Punkt (20,14) enden. Die x-Achse muss also im Plot bis 20 gehen obwohl nur die x-Werte 0:0.01:4 zur Berechnung benutzt werden.
Die Kontrollpunkte müssen also den Graph "beeinflussen".
Irgendwas ist an der Art und Weise, wie ich die Funktion plotte falsch.


So habe ich es bis jetzt:

Code:
x = 0: 0.01: 4;

f2 = zeros(size(x));
f2(x>=0 & x<1) = 1;

f3 = zeros(size(x));
f3(x>=1 & x<2) = 1;

f4 = zeros(size(x));
f4(x>=2 & x<3) = 1;

f5 = zeros(size(x));
f5(x>=3 & x<4) = 1;

n0 = (1-x).*((1-x).*f2);
n1 = x.*((1-x).*f2)+0.5.*((2-x).*(x.*f2+(2-x).*f3));
n2 = 0.5.*(x.*(x.*f2+(2-x).*f3))+0.5.*((3-x).*((x-1).*f3+(3-x).*f4));
n3 = 0.5.*((x-1).*((x-1).*f3+(3-x).*f4))+0.5.*((4-x).*((x-2).*f4+(4-x).*f5));
n4 = 0.5.*((x-2).*((x-2).*f4+(4-x).*f5))+(4-x).*((x-3).*f5);
n5 = (x-3).*((x-3).*f5);


plot(x,[n0;n1;n2;n3;n4;n5])
title('Basisfunktionen N(i,3)')
xlabel('u')
ylabel('N(i,3)')
legend({'N(0,3)','N(1,3)','N(2,3)','N(3,3)','N(4,3)','N(5,3)'},'Location','EastOutside')


p = [0.0;0.0]*n0+[2.0;4.0]*n1+[9.0;4.0]*n2+[16.0;8.0]*n3+[18.0;12.0]*n4+[20.0;14.0]*n5;


figure (2)
plot(x,p)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

jetzt verstehe ich.

Zitat:
Irgendwas ist an der Art und Weise, wie ich die Funktion plotte falsch.

Jep, so siehts besser aus:
Code:
plot(p(1,:), p(2,:))
oder animiert:
Code:
comet(p(1,:), p(2,:))


Die 4 würde ich entweder aus dem betrachteten Intervall ausschließen oder f5 anpassen, dann ist auch der "Rücklauf" weg.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 02.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2014, 19:23     Titel:
  Antworten mit Zitat      
Vielen vielen Dank! So habe ich mir das vorgestellt.
Kannst du mir vielleicht noch erklären was genau der neue Plot macht und warum man ihn so verwenden muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

p(1,:) enthält die x-Werte deiner Datenpunkte, p(2,:) die entsprechenden y-Werte. x enthält nur die "Zeit", in der die Datenpunkte abgefahren werden - und die ist aus der Abbildung eines Splines ja nicht direkt ablesbar.

Grüße,
Harald
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.