Funktion plotten < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:17 Do 25.04.2013 | Autor: | mikexx |
Aufgabe | Hallo, es ist gegeben [mm] $f(x)=x\cdot\sin(x)$ [/mm] und man soll in Matlab die Funktion [mm] $F(x)=\int\imits_0^x f(\xi)\, d\xi$ [/mm] plotten. |
Ich habe das eigentlich so vorgehabt:
1: | t=linspace(0,2*pi,100);
| 2: | h=@(t)quad(@(m)m.*sin(m),0,t);
| 3: | plot(t,h(t)); |
Aber das geht nicht...
Die Fehlermeldung lautet:
1: | Error using quad
| 2: | The limits of integration must be scalars.
| 3: |
| 4: | Error in @(t)quad(@(m)m.*sin(m),0,t) |
Kann mir jemand helfen, bitte?
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:25 Do 25.04.2013 | Autor: | mikexx |
Offenbar ist doch der Fehler, daß t Vektor ist, aber Skalar sein muss, weil t die obere Integrationsgrenze ist und diese muss Skalar sein.
Dann muss ich die Funktion F wohl doch anders setzen?
|
|
|
|
|
Hallo mikexx,
da ich von Matlab keine Ahnung habe, aber integrieren kann, würde ich wie folgt vorgehen:
> Hallo, es ist gegeben [mm]f(x)=x\cdot\sin(x)[/mm] und man soll in
> Matlab die Funktion [mm]F(x)=\int\imits_0^x f(\xi)\, d\xi[/mm]
> plotten.
Einfach das bestimmte Integral ausrechnen:
[mm] F(x)=\sin{(x)}-x\cos{(x)}
[/mm]
Und dann kannst Du plotten.
> Ich habe das eigentlich so vorgehabt:
>
> 1: | t=linspace(0,2*pi,100);
| 2: | > h=@(t)quad(@(m)m.*sin(m),0,t);
| 3: | > plot(t,h(t)); |
>
> Aber das geht nicht...
>
> Die Fehlermeldung lautet:
>
> 1: | Error using quad
| 2: | > The limits of integration must be scalars.
| 3: | >
| 4: | > Error in @(t)quad(@(m)m.*sin(m),0,t) |
...da dann ja keine Variablen als Integrationsgrenzen mehr auftauchen.
Ich lasse die Frage halboffen, falls noch jemand eine für Matlab spezifische Vorgehensweise weiß.
Grüße
reverend
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:43 Do 25.04.2013 | Autor: | mikexx |
> ...da dann ja keine Variablen als Integrationsgrenzen mehr
> auftauchen.
>
Wie meinst Du das?
|
|
|
|
|
Hallo nochmal,
> > ...da dann ja keine Variablen als Integrationsgrenzen mehr
> > auftauchen.
>
> Wie meinst Du das?
Entweder Du hast meine Antwort nicht überlegt oder ich verstehe Deine Frage nicht oder beides.
Bisher war das Problem, das Matlab von Dir eine "Zahl" als Integrationsgrenze haben wollte. Da jetzt keine Integral mehr vorliegt, gibt es das Problem auch nicht mehr, Du hast einfach nur noch eine Funktion von x.
Grüße
reverend
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:29 Do 25.04.2013 | Autor: | mikexx |
Okay, ich glaub aber nicht, daß wir das so machen dürfen.
Der Witz ist ja grad, daß man nicht irgendwie erst integrieren soll und daß Matlab das für einen macht...
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:40 Do 25.04.2013 | Autor: | reverend |
Hallo nochmal,
> Okay, ich glaub aber nicht, daß wir das so machen
> dürfen.
Bedauerlich.
> Der Witz ist ja grad, daß man nicht irgendwie erst
> integrieren soll und daß Matlab das für einen macht...
Dann würde ich eine Schleife über x laufen lassen, in hinreichend kleinen Intervallen. Das sollte doch in jedem Fall gehen.
Grüße
reverend
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:51 Do 25.04.2013 | Autor: | mikexx |
Ich warte lieber auf meine matlabspezifischere Antwort.
|
|
|
|
|
Moin
> Ich habe das eigentlich so vorgehabt:
>
> 1: | t=linspace(0,2*pi,100);
| 2: | > h=@(t)quad(@(m)m.*sin(m),0,t);
| 3: | > plot(t,h(t)); |
Weißt du überhaupt, was linespace macht?
>
> Aber das geht nicht...
Stimmt!
>
> Die Fehlermeldung lautet:
>
> 1: | Error using quad
| 2: | > The limits of integration must be scalars.
| 3: | >
| 4: | > Error in @(t)quad(@(m)m.*sin(m),0,t) |
>
Du übergibst der Funktion h einen Vektor. Bei den eigen definierten Funktionen wirkt die Funktion nicht auf die Einträge einzeln.
Meintest du vielleicht:
1: |
| 2: | h=@(t)quad(@(m)m.*sin(m),0,t);
| 3: | t=1:1:100;
| 4: | for i=1:100, j(i)=h(t(i));end
| 5: | plot(t,j);
|
?
Eigentlich sollte (Maple)
[Dateianhang nicht öffentlich]
herauskommen. Matlab erstellt
[Dateianhang nicht öffentlich]
.
Dateianhänge: Anhang Nr. 1 (Typ: png) [nicht öffentlich] Anhang Nr. 2 (Typ: PNG) [nicht öffentlich]
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:18 Do 25.04.2013 | Autor: | mikexx |
So meinte ich das schon.
Zwei Fragen habe ich aber noch:
Wieso eignet sich denn linespace(0,2*pi,100) nicht?
Das erzeugt doch einen Vektor, beginnend mit dem Eintrag 0, endend mit dem Eintrag 0 und insgesamt 100 Punkte mit identischem Abstand.
Oder hast Du die for-Schleife genommen, damit man die Einträge besser durchzählen kann (mit dem Zähler)?
----
Kann man das Ganze irgendwie auch anders machen?
Dieses function-handling ist vielleicht hier viel zu übertrieben und unnötig?
|
|
|
|
|
Es geht noch:
n=100;t=[1;1]*linspace(0,2*pi,n);for i=1:n,t(2,i)=quad(@(m)m.*sin(m),0,t(2,i));end;plot(t(1,:),t(2,:))
Da brauchst du kein h und hast dein Linespace drin.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:19 Do 25.04.2013 | Autor: | mikexx |
Ich dank Dir!
|
|
|
|