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

Werte Ploten

 

Nasenbär
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2016, 16:51     Titel: Werte Ploten
  Antworten mit Zitat      
Hallo Zusammen,
Vielleicht kann mir jemand einen Tip geben, denn wenn ich nochmal dieses Error Geräusch von Matlab höre, beiß ich in den Laptop Confused
Ich möchte im Grunde nur die Werte die im Integral nach und nach berechnet werden, als logarithmische Kurve in Abhängigkeit von n darstellen. Also nur wie sich die Kurve langsam einem Grenzwert nähert. Nicht als Punkte, wie bei mir, sondern als Kurve.
Aber er macht es nicht... Evil or Very Mad

Danke wenn jemanden einen Tip dazu hätte.

Code:

function [integral] = Trapez(a, b, F, n)    % Integral von a bis b       F = Funktion    n = stuetzstellen
format long; hold on;
E=1:n;
q=quad(F,0,pi,1.e-15);
h=(b-a)/(n);                    % Teilintervalllänge
Stuetz=(a:h:a+n*h);             % Stützstellen
integral = (h/2)*(feval(F,a)+feval(F,b));
 for i=2:1:n
 integral = integral+h*feval(F,Stuetz(i));
 E(n)=integral;
 k1=log(abs(E(n)-q));                 % Da sitzt mein Feind
 plot(k1,n);                                % und hier
end;
disp('Ergebnis von quad minus dem Ergebnis =');
l=(abs(q-integral));
disp(l);
disp(' ');
disp('Lösung quad mit 15 Nachkommastellen =');
disp(q);
disp('Lösung =');
disp('test log');
k=log10(l);
disp(abs(k));

 
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: 16.06.2016, 19:11     Titel:
  Antworten mit Zitat      
Hallo,

Vorschlag:
Code:

 E(i)=integral; % <-- hier war auch schon einer
 k1(i)=log(abs(E(i)-q));                 % und hier gleich zwei
end
% Der plot-Befehl ist jetzt außerhalb der Schleife
plot(k1,n);


Ich würde zudem integral nicht als Variablenname verwenden, da es auch ein Funktionsname ist und die Funktion dadurch nicht mehr aufrufbar ist.

Grundsätzlich ist bei einer Funktion auch ein Beispielaufruf hilfreich, der das unerwünschte Verhalten erzeugt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2016, 19:45     Titel:
  Antworten mit Zitat      
Hallo Harald,
Danke Dir für die Antwort.
Ich habe den plot mit einem * erweitert damit man sehen kann was er zeichnet. Nur will ich ja das Matlab eine Kurve draus macht also die Punkte miteinander verbindet. Müssten die Punkte nicht eigentlich auch gegen einen minus Wert laufen, da ich quad ja von dem Integral abziehe ?
Code:

function [iral] = Trapez(a, b, F, n)
format long;hold on;
E=1:n;
q=quad(F,0,pi,1.e-15);
h=(b-a)/(n);                    % Teilintervalllänge
Stuetz=(a:h:a+n*h);             % Stützstellen
iral = (h/2)*(feval(F,a)+feval(F,b));
 for i=2:1:n
 iral = iral+h*feval(F,Stuetz(i));
 E(i)=iral;
 k1(i)=(E(i)-q);
 end;
plot(k1,n,'*');
 


inte_log.jpg
 Beschreibung:

Download
 Dateiname:  inte_log.jpg
 Dateigröße:  54.14 KB
 Heruntergeladen:  381 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: 16.06.2016, 21:56     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

Ich habe den plot mit einem * erweitert damit man sehen kann was er zeichnet. Nur will ich ja das Matlab eine Kurve draus macht also die Punkte miteinander verbindet.

Im Zweifelsfall hilft ein Blick in die Doku:
Zitat:
If you omit the line style and specify the marker character, then the plot shows only the marker and no line.

Wenn du also eine Linie haben möchtest, musst du das explizit angeben: '-*'

Und wie gesagt:
Zitat:
Grundsätzlich ist bei einer Funktion auch ein Beispielaufruf hilfreich, der das unerwünschte Verhalten erzeugt.


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2016, 22:19     Titel:
  Antworten mit Zitat      
Hallo Harald,
Das ist ja mein Problem, dass er egal ob ich '-' angebe oder auch nichts, er zeichnet mir keinen Graphen sondern nur Punkte. Ohne '*' macht er nur extrem kleine Punkte.
Danke dir trotzdem !
Grüße
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: 16.06.2016, 22:24     Titel:
  Antworten mit Zitat      
Hallo,

Gib bitte an, wie du die Funktion aufrufst, damit man das Problem nachvollziehen kann - ein viertes Mal werde ich nicht fragen.

Eben noch bemerkt: wenn du Integralgrenzen a und b flexibel übergibst, solltest du die flexiblen Grenzen auch bei quad verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2016, 22:36     Titel:
  Antworten mit Zitat      
Achso ich dachte du meinst damit den Plot als Beispiel...
Ich gebe an:

Trapez(0,pi,@f1,100)

Code:

function f1=f1(x)
f1=sin(3*x).*exp(cos(x).^2)./(x+1);
 
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: 17.06.2016, 09:09     Titel:
  Antworten mit Zitat      
Hallo,

plot-Befehl anpassen zu:
Code:
plot(k1,n*ones(size(k1)),'-*');


Die Frage ist zudem, ob du immer gegen n plotten willst. Wäre es nicht z.B. hilfreicher, gegen die Iteration zu plotten?

Grüße,
Harald

P.S.: quad ist veraltet. Wenn du nicht eine entsprechend alte MATLAB-Version nutzt, sollte man integral statt quad verwenden. Das wird ja auch im Editor entsprechend angezeigt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2016, 14:12     Titel:
  Antworten mit Zitat      
Hallo Harald,
Danke dir für die Antwort. Du hast recht, so macht der Graph keinen Sinn. Ich dachte wenn er gegen n läuft, dann zeigt sich wie sich langsam der Fehler einem Grenzwert nähert. Nur jetzt zeichnet er einen "unmotivierten" Strich hin.
Wenn ich aber "Stuetz" nehme, zeichnet er nur einen Punkt hin.
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: 17.06.2016, 14:17     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wenn ich aber "Stuetz" nehme, zeichnet er nur einen Punkt hin.
Sorry, aber wie soll ich ahnen, was du damit meinst?

Wie wäre es hiermit?
Code:
plot(1:n, k1, '-*');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2016, 15:01     Titel:
  Antworten mit Zitat      
Hallo,
Ich möchte gerne, dass der Graph im Logarithmus des absoluten Fehlers,also
log10(quad-Trapez), gegen die Anzahl der Stützstellen läuft.
Der Graph mir also zeigt, ab welche Stützstelle ich welchen Fehler noch habe. Damit ich erkennen kann, wieviele Stützstellen ich brauche um meinen gewünschten Genauigkeitswert zu erreichen.
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: 17.06.2016, 15:21     Titel:
  Antworten mit Zitat      
Hallo,

wenn du das möchtest, dann solltest du die komplette Berechnung für unterschiedliche n durchführen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2016, 21:22     Titel:
  Antworten mit Zitat      
Hallo Harald,
Danke für deine bisherige Hilfe nur bin ich leider noch nicht viel weiter. Vielleicht darf ich dir kurz beschreiben was ich meine: Ich lass mit quad einen Wert der Integralrechnung berechnen als Referenzwert. Bei der Trapezregel möchte ich in der Schleife diesen Referenzwert von dem bisher von der Trapezregel berechneten abziehen. Dieser Wert nähert sich somit immer mehr der Null an. Und genau diesen Verlauf möchte ich als Graph darstellen.
Grüße
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: 17.06.2016, 22:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Dieser Wert nähert sich somit immer mehr der Null an.

Du meinst vermutlich, wenn h verringert bzw. n erhöht wird. Du rechnest aber gegenwärtig nur für ein h bzw. n.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nasenbär
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2016, 22:20     Titel:
  Antworten mit Zitat      
Hallo,
Also er zeichnet mir schon alle Punkte hin nur nicht als richtige Kurve. Wie kann ich das ändern ?
Code:

function [iral] = Trapez(a, b, F, n)
format long;hold on;
%E=1:n;
q=quad(F,a,b,1.e-15);
h=(b-a)/(n);                    % Teilintervalllänge
Stuetz=(a:h:a+n*h);             % Stützstellen
iral = (h/2)*(feval(F,a)+feval(F,b));
 for i=2:1:n
 iral = iral+h*feval(F,Stuetz(i));
 E=(abs(iral-q));
 plot(n,E,'.');
 end;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

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