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

Variable im Plot darstellen lassen

 

gadì

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 17:24     Titel: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo Zusammen!

Ich möchte gerne bei diesem untenstehenden Code die Variable n mit der Variablen y plotten. Dabei sollte n von 1 bis 1000 in einer Schritten verlaufen auf der x-Achse und y die y-Achse darstellen. Leider kann ich n nicht als linspace implementieren oder sonst wie als Vektor. Beziehungsweise sonst wie als Vektor, es kommt immer ein Fehler.
Kann mir jemand helfen?

Herzlichen Dank

Gadì


Code:
Dies ist mein Code:
clc
clear all
close all

Q = 1;
E = 15500000;
G = 6750000;
h = 0.08;
b = 0.05;
n = 10;
%n = Number of elements
L = 1;
%L = Length of beam
l = 1/n;
%l = Length of element

A = h*b;
Aq = 5/6*A;
I = b*h^3/12;


for i=1:n
    fprintf('element %g \n', i);
    l(i)=L/n;
end

if n == 1
    le = l(i);
    K = [G*Aq/le -1/2*G*Aq -G*Aq/le -1/2*G*Aq;-1/2*G*Aq 1/3*G*Aq*le+E*I/le 1/2*G*Aq 1/6*G*Aq*le-E*I/le; -G*Aq/le 1/2*G*Aq G*Aq/le 1/2*G*Aq; -1/2*G*Aq 1/6*G*Aq*le-E*I/le 1/2*G*Aq 1/3*G*Aq*le+E*I/le];
else
    for i = 1:n-1
        if (i == 1)
            le = l(i);
            k = [G*Aq/le -1/2*G*Aq -G*Aq/le -1/2*G*Aq;-1/2*G*Aq 1/3*G*Aq*le+E*I/le 1/2*G*Aq 1/6*G*Aq*le-E*I/le; -G*Aq/le 1/2*G*Aq G*Aq/le 1/2*G*Aq; -1/2*G*Aq 1/6*G*Aq*le-E*I/le 1/2*G*Aq 1/3*G*Aq*le+E*I/le];
            K = wextend(2, 'zpd',k,2, 'r');
        else
            K = wextend(2, 'zpd',K,2, 'r');
        end
        le = l(i+1);
        k = [G*Aq/le -1/2*G*Aq -G*Aq/le -1/2*G*Aq;-1/2*G*Aq 1/3*G*Aq*le+E*I/le 1/2*G*Aq 1/6*G*Aq*le-E*I/le; -G*Aq/le 1/2*G*Aq G*Aq/le 1/2*G*Aq; -1/2*G*Aq 1/6*G*Aq*le-E*I/le 1/2*G*Aq 1/3*G*Aq*le+E*I/le];
        K1 = wextend(2, 'zpd',k,2*i, 'l');
        K = K+K1;
    end
end
K2 = K;

for i = n+1:-1:2
    l = 0;
    if (l == 1)
        K2((i-1)*2+1,:) = [];
        K2(:,(i-1)*2+1) = [];
    end
end
K2(1:2,:) = [];
K2(:,1:2) = [];

r = size(K2,1);

if n == 1
    F = [0;Q];
else
    for i = 1:n-1
        if (i == 1)
            F = [0;Q];
            F = wextend('ar', 'per',F, r/2-1);
        else
            F = wextend('ar', 'per',F, r/2-1);
        end
         F = [0;Q];
         F = wextend('ar', 'per',F, r/2-1);
    end
end

fprintf(' the displacement at the nodes are: ')
dis = K2\F

y = dis(2*n-1,1);

fprintf(' the displacement at the end node is: ')
w = Q*L^3/(3*E*I)+Q*L/(G*Aq)

 


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.04.2013, 23:32     Titel: Re: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo gadì,

Die Variable "n" wird in Deinem Code auf 10 gesetzt. Ich verstehe nicht, wo Du nun n auf 1:1000 setzen möchtest und wo genau wleche Fehler auftreten. Kannst Du das konkreter erklären? Kopien der Fehlermeldungen sind immer hilfreich, genauso wie sich auch den relevanten Code zu beschränken.


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gadì

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2013, 08:18     Titel: Re: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo Jan

Ja, ich habe sie auf 10 gesetzt. Eigentlich möchte ich jedoch, dass die variiert wird, so dass ich die Variation der n's und die dis Funktion miteinander darstellen kann.

Wenn ich dies versuche, gibt es mir diesen Fehler:
Error using /
Matrix dimensions must agree.

Error in assignment31 (line 15)
l = 1/n;

Dies, weil ich für n mehrere Zahlen reingeschrieben habe...
Danke schön für deine Antwort!!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.04.2013, 08:41     Titel: Re: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo gadì,

Für elementweise Funktionen benötigt man .* und ./ statt der Matrix-Multiplikation * und / .

Bemerkung: "clear all" löscht alle funktionen aus dem Speicher und das Neu-Laden von der Festplatte verschwendet eine Menge Zeit. Ausserdem werden alle Breakpoint gelöscht, was das Debuggen absichtlich erschwert. Sinnvoll ist das nicht, im Gegenteil. Es gibt allerdings eine Menge Dozenten, die das immer noch empfehlen, weil es ihnen bereits empfohlen worden ist. Aber die Mehrheit muss nicht unbedingt recht haben.
Besser: "clear variables" oder "clear".
Noch besser: Verwende Funktionen, da die alle ihren eigenen Satz von Variablen haben. Dann gibt es fgar keinen Bedarf für ein clearing.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gadì

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2013, 09:04     Titel: Re: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo Jan
Nun eigentlich möchte ich nur n variieren. Im Moment ist n nur eine Zahl, die ich gewählt habe.
Wie kann ich nun aber n vergrössern bzw. so verändern, dass ich n und y in einem Plot darstellen lassen kann? Mit Linspace oder n als Vektor gibt mir eine Fehlermeldung.
Meine Frage ist, ob es nicht eine Funktion in Matlab gibt, mit der ich Matlab sagen kann, stelle n nicht als Vektor dar, sondern nimm immer eine neue Zahl und setze sie für n ein, so dass ein y resultiert. Die Zahlen für n sollten von 2 mit einer Schritten bis 100 gehen. Schlussendlich wäre ein Graph mit n und y als Achsen nützlich.
Freundliche Grüsse
gadì
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.04.2013, 09:31     Titel: Re: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo gadì,
Zitat:
Mit Linspace oder n als Vektor gibt mir eine Fehlermeldung.

Das ist für eine Frage im forum zu allgemein. Wenn Du den Code und eine Kopie der vollständigen Fehlermeldung postest, kann man wahrscheinlich in wenigen Sekunden einen Verbesserungsvorschlag machen.

Ich vermute wirklich, dass wie bereits gesagt eine Änderung von * zu .* und von / zu ./ ausreicht.

Matlab kann hervorragend mit Vektorenb rechnen, die ja eine Untermenge der Matrizen sind. Matlab wurde ja gerade designed, um Matrizen effizient bearbeiten zu können, daher ja auch der Name "Mat"rix"Lab".
Also ist "n = 2:100" der richtige Ansatz, obwohl das auch mit einer FOR-Schleife machbar ist: "for n = 2:100". Die starke Ähnlichkeit zwischen den beiden Ansätzen ist augenfällig und beabsichtigt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gadì

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2013, 10:28     Titel: RE:RE: Variable im Plot darstellen lassen
  Antworten mit Zitat      
Hallo Jan

Danke für deine Hilfe!
Nun aber habe ich es geschafft:


[code]
elemente = 20;
for n=1:elemente
.....

y(n) = dis(2*n-1,1);
anzahl(n) = n
plot(anzahl,y)

[code]

So kann ich nun für n Zahlen von 1-100 einsetzen ohne dass es ein Dimensionsproblem gibt.

Freundliche Grüsse

Gadì
 
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.