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

Funktionen als Vektor speichern

 

Enduro2
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 19:33     Titel: Funktionen als Vektor speichern
  Antworten mit Zitat      
Hallo,

ich bin neu hier und habe auch mit Matlab noch sehr wenig Erfahrung...

Ich will ein Programm schreiben, dass die Ableitung einer Funktion mit der Richardson Extrapolation und der 3-Punkte-Formel berechnet. Die Richardson Extrpolation soll 4 Schritte umfassen. Mein Code:
Code:
h=input('Gib die 1. Schrittweite ein: ');
x=input('Gib x ein: ');
f=@(x) sin((x)^1/2);
N(1)=@(h) (1/(2*h))*(f(x+h)-f(x-h));
for j=2:1:4
    A=N(j-1)
    N(j)=@(h) A(h/2)+(A(h/2)-A(h))/(4^(j-1)-1);
end


Die N_j sollen als Vektor gespeichert werden, das Ergebnis soll dann N_4 (in diesem Beispiel) sein.

Allerdings kriege ich dann folgende Fehlermeldung:
Conversion to cell from function_handle is not possible.

Wer kann mir helfen?

Gruß
Enduro2
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 20:08     Titel:
  Antworten mit Zitat      
Hallo Enduro2,

wo tritt denn der Fehler auf?
Und was ist N an der Stelle?

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Enduro2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 21:05     Titel:
  Antworten mit Zitat      
Hallo,

der Fehler tritt in der vorletzten Zeile auf, also bei N(j)=...
N(j) soll nicht ausgewertet werden, sondern als Funktion gespeichert werden, damit im nächsten Schritt N(j+1) berechnet werden kann.

Gruß
Enduro2
Private Nachricht senden Benutzer-Profile anzeigen
 
Enduro2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 21:13     Titel:
  Antworten mit Zitat      
ich habs gerade nochmal versucht, jetzt bekomme ich den Fehler

"Nonscalar arrays of function handles are not allowed; use cell arrays
instead."

Die obige Fehlermeldung bezog sich auf einen anderen Code Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 21:28     Titel:
  Antworten mit Zitat      
Dann solltest du cell arrays verwenden Wink
Code:
h=input('Gib die 1. Schrittweite ein: ');
x=input('Gib x ein: ');
f=@(x) sin((x)^1/2);
N{1}=@(h) (1/(2*h))*(f(x+h)-f(x-h));
for j=2:1:4
    A=N{j-1}
    N{j}=@(h) A(h/2)+(A(h/2)-A(h))/(4^(j-1)-1);
end


Code nicht getestet, müsste aber so laufen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Enduro2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 21:41     Titel:
  Antworten mit Zitat      
Hallo,

danke für die Hilfe, aber das liefert mir
N{4}=

@(h)A(h/2)+(A(h/2)-A(h))/(4^(j-1)-1)

Das Ergebnis soll aber wieder in der Form wie N{1} sein, also mit x als Variable, damit ich dann die Ableitung auswerten kann.

Das Problem ist, dass das N{j-1} in der Schleife nicht läuft, als Ausgabe für N{2} N{3} N{4} erhalte ich immer das gleiche, nämlich
"ans =

@(h)N{j-1}(h/2)+(N{j-1}(h/2)-N{j-1}(h))/(4^(j-1)-1)"

Aber warum steht da noch j? Aus N{1} soll N{2} berechnet werden usw.

Gruß
Enduro2
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 23:31     Titel:
  Antworten mit Zitat      
Hallo Enduro,

da x ja auch variabel sein soll, muss es wohl
Code:
N{1}=@(x,h)(1/(2*h))*(f(x+h)-f(x-h));


Alle Variablen, die nicht als Parameter übergeben werden behalten
ihren Wert bei, den sie bei der Definition des Funktionshandels hatten.
Dass die Darstellung das nicht wiedergibt ist für das Rechnen damit
kein Problem.

Bespiel:
Code:
>> A=@(x)x    

A =

    @(x)x

>> for k=2:4;A=@(x)A(x)*k;end
>> A

A =

    @(x)A(x)*k

>> A(1)

ans =

    24

>> A(2)

ans =

    48
 


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Enduro2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2012, 09:46     Titel:
  Antworten mit Zitat      
Hallo,

also dann sieht mein Code so aus:
Code:
h=input('Gib die 1. Schrittweite ein: ');
x=input('Gib x ein: ');
f=@(x) sin((x)^1/2);
N{1}=@(x,h) (1/(2*h))*(f(x+h)-f(x-h));
for j=2:4
    N{j}=@(x,h) N{j-1}(x,h/2)+(N{j-1}(x,h/2)-N{j-1}(x,h))/(4^(j-1)-1);
end
N{4}


Das Ergebnis ist dann
ans =

@(x,h)N{j-1}(x,h/2)+(N{j-1}(x,h/2)-N{j-1}(x,h))/(4^(j-1)-1)

Aber da wurde ja das j nicht verändert, das soll ja von 1 bis 4 laufen und dann eine Formel rauskommen, die nur von x und h abhängt

Gruß
Enduro2
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2012, 17:42     Titel:
  Antworten mit Zitat      
Nochmals,

N{4} ist eine Funktion in der j als Konstante den Wert 4 hat.
Dass es weiterhin als j dargestellt wird. ist egal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Enduro2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2012, 18:13     Titel:
  Antworten mit Zitat      
Hallo,

ok, danke. Also kann ich mein N{4} dann nur als Funktion in x und h darstellen lassen? Denn wenn j=4 ist, dann steht in der Formel für N{4} ja N{3} drin. Das N{3} soll aber explizit als Funktion in x und h da stehen, wofür N{2} als Funtion von x und h dargestellt sein muss.

Schonmal vielen Dank für die Geduld die ihr mit mir habt. Confused

Gruß
Enduro2
Private Nachricht senden Benutzer-Profile anzeigen
 
Enduro2
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2012, 21:28     Titel:
  Antworten mit Zitat      
Hallo,

hat sich erledigt, ich habs hinbekommen. Die resultierende Funktion habe ich mit feval ausgewertet und geplottet. Das habe ich zwar vorher schon versucht, aber da kam nur Müll raus. Der Fehler war in der Definition der Funktion: Es muss natürlich sin(x^(1/2)) heißen... Embarassed

Vielen Dank an alle, die mir geholfen haben!

Gruß
Enduro2
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.