Plotten einer Werte-Schar < Maple < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:57 Do 13.10.2011 | Autor: | zeju |
Hallo zusammen,
ich habe die Lösung für eine DGL's-System wie folgt berechnet:
t:= (i) [mm] \to \bruch{(v[i+2]-4*v[i+1]+6*v[i]-4*v[i-1]+v[i-2])}{h^{4}}+\bruch{4*v[i]}{L^4} [/mm] = [mm] \bruch{q0*i*h}{EI*l}
[/mm]
RB1 := v[0] = 0
RB2 := [mm] \bruch{v[1]-v[-1]}{2*h} [/mm] = 0;
RB3 := [mm] \bruch{v[n+1]-v[n-1]}{2*h} [/mm] = 0
RB4:= v[n]=0
v := (b) [mm] \to [/mm] v[b]
h := [mm] \bruch{l}{n}; [/mm] EI := [mm] 8*10^{8}; [/mm] k := 2; l := 100.00; q0 := 10; L := [mm] (4*\bruch{EI}{k})^{(1/4)}
[/mm]
solve({seq(t(m), m = 0 .. n),RB1, RB2, RB3, RB4}, {seq(v(b), b = -2 .. n+2)})
Das Ergebnis sieht dabei, wie folgt aus, für z.B. n=20:
v[-2] = 0.2318760660e-3,
v[-1] = 0.5211793322e-4,
v[0] = 0.,
v[1] = 0.5211793322e-4,
v[2] = 0.1850673998e-3,
v[3] = 0.3758346101e-3,
v[4] = 0.6021867355e-3,
v[5] = 0.8430622350e-3,
v[6] = 0.1078961127e-2,
v[7] = 0.1292335237e-2,
v[8] = 0.1467978455e-2,
v[9] = 0.1593417026e-2,
v[10] = 0.1659299904e-2,
v[11] = 0.1659789174e-2,
v[12] = 0.1592950582e-2,
v[13] = 0.1461144154e-2,
v[14] = 0.1271414927e-2,
v[15] = 0.1035883781e-2,
v[16] = 0.7721383566e-3,
v[17] = 0.5036240544e-3,
v[18] = 0.2600350665e-3,
v[19] = 0.7770542361e-4,
v[20] = 0.,
v[21] = 0.7770542361e-4,
v[22] = 0.3694208224e-3
Nun werden diese Werte nur als Schar angegeben.
Ich will diese Werte in einem Plot darstellen, aber egal wie ich es mache ich bekomme es nicht hin mit der Plot-Funktion.
Bin bis jetzt soweit das ich mir zwei Möglichkeiten ausgesucht habe, wie man das Problem lösen könnte.
1. Die Werte der Schar einzeln übergeben und dann mit einem einfachen Plot-Operator übergeben (offen ist das Problem der Wert-Übergabe)
2. Ein Plot-Operator, der die "solve"-Funktion als Plot ausgeben kann.
Hab leider für beide nichts im Internet gefunden.
Ich bedanke mich schonmal für jeden Hinweis.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
moin zeju,
Du willst also eine Menge von Werten plotten?
Versuch es so:
1: |
| 2: | with(plots):
| 3: | f := x -> x^2:
| 4: | p := [seq([x,f(x)],x=1..20)]:
| 5: | plot(p):
|
Nur eben f durch deine Funktion ersetzen. ;)
Übergibst du plot eine Liste in der Form:
[[a,f(a)],[b,f(b)],...]
(also eine Liste von Listen) so wird daraus ein schöner Plot gemalt.
lg
Schadow
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 19:26 Do 13.10.2011 | Autor: | zeju |
Welche Funktion meinst du denn?
Also t kann ich dort nicht einsetzen , denn er übergibt aus dem "solve" nicht die verschiedenen v's an den Kernel, weshalb ich entweder die erst übergeben muss, was normalerweise am Ende der solve-Funktion mit
: v[0]:=v[0];..
ja auch funktioniert nur halt nicht für n.
Nur will ich das Programm dynamisch gestalten, da ich das n immer wieder ändern möchte.
Und wenn ich die solve-Funktion für f einsetze, meckert er bei den Werten.
|
|
|
|
|
> Welche Funktion meinst du denn?
> Also t kann ich dort nicht einsetzen , denn er übergibt
> aus dem "solve" nicht die verschiedenen v's an den Kernel,
> weshalb ich entweder die erst übergeben muss, was
> normalerweise am Ende der solve-Funktion mit
> : v[0]:=v[0];..
> ja auch funktioniert nur halt nicht für n.
> Nur will ich das Programm dynamisch gestalten, da ich das
> n immer wieder ändern möchte.
>
> Und wenn ich die solve-Funktion für f einsetze, meckert er
> bei den Werten.
Hallo zeju,
wenn ich das von Schadowmaster angegebene Beispiel
1:
2: with(plots):
3: f := x -> [mm] x^2:
[/mm]
4: p := [seq([x,f(x)],x=1..20)]:
5: plot(p):
richtig verstehe, ist das darin vorkommende und zu plottende
p nicht eine Funktion, sondern eine Liste von Zahlenpaaren.
Du müsstest also in deinem Fall zunächst aus der Liste der
v(b) (oder v[b] ?), welche der solve-Befehl geliefert hat,
eine analoge Liste der Zahlenpaare machen, also etwa:
p:=[seq([b,v[b]],b=-2..n+2]:
um dann diese Liste plotten zu können.
LG Al-Chw.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:12 Fr 14.10.2011 | Autor: | zeju |
Hallo Al-Chwarizmi,
ich habe es jetzt probiert über:
with(plots):
v:= b [mm] \to [/mm] v[b]
p := [seq(v(b), b = 0 .. n)]:
plot(p):
Dabei komme ich folgende Fehlermeldung:
"Warning, unable to evaluate the functions to numeric values in the region; see the plotting command's help page to ensure the calling sequence is correct"
Weiterhin habe ich probiert über
with(plots):
p := [v(b), b = 0 .. n]:
plot(p):
Nun bekomm ich hier folgenden Fehler:
Error, (in plot) incorrect first argument [v[b], b = 0 .. 6]
Ich hab jetzt länger rumprobiert aber finde keinen Weg die Werte von v[b] auszulesen, ich denke immernoch, dass die solve-Methode die Werte nicht übergibt also nicht in die Variablen überschreibt, weil ich das nur hinbekommen habe, wenn ich:
assign(solve({RB1, RB2, RB3, RB4, seq(t(m), m = 0 .. n)}, {seq(v(b), b = -2 .. n+2)})):
v[0] := v[0]; v[1] := evalf(v[1], 6); v[2] := evalf(v[2], 6); v[3] := evalf(v[3], 6); v[4] := evalf(v[4], 6); v[5] := evalf(v[5], 6); v[6] := evalf(v[6], 6)
und hab dann folgendes Ergebnis bekommen:
0.
0.000584442
0.00147963
0.00198805
0.00173341
0.000821316
0.
Ich weiß leider nicht, ob es jetzt korrekt ist, was ich hier gemacht habe, aber wie gesagt ich weiß nicht , wie ich die Fehler oben bearbeite.
Vielen dank und LG
zeju
EDIT:
Ich habe jetzt wie du gesagt hast es als Zahlenpaar eingegeben:
p := [seq([v(b), b], b = 0 .. n)]
doch dabei passiert folgendes:
Warning, unable to evaluate the function to numeric values in the region; see the plotting command's help page to ensure the calling sequence is correct
Daher hilft das Zahlenpaar leider auch nicht.
|
|
|
|
|
> Hallo Al-Chwarizmi,
>
> ich habe es jetzt probiert über:
>
> with(plots):
> v:= b [mm]\to[/mm] v
> p := [seq(v(b), b = 0 .. n)]:
> plot(p):
>
> Dabei komme ich folgende Fehlermeldung:
> "Warning, unable to evaluate the functions to numeric
> values in the region; see the plotting command's help page
> to ensure the calling sequence is correct"
>
> Weiterhin habe ich probiert über
>
> with(plots):
> p := [v(b), b = 0 .. n]:
> plot(p):
> Nun bekomm ich hier folgenden Fehler:
> Error, (in plot) incorrect first argument [v, b = 0 .. 6]
>
> Ich hab jetzt länger rumprobiert aber finde keinen Weg die
> Werte von v auszulesen, ich denke immernoch, dass die
> solve-Methode die Werte nicht übergibt also nicht in die
> Variablen überschreibt, weil ich das nur hinbekommen habe,
> wenn ich:
>
> assign(solve({RB1, RB2, RB3, RB4, seq(t(m), m = 0 .. n)},
> {seq(v(b), b = -2 .. n+2)})):
> v[0] := v[0]; v[1] := evalf(v[1], 6); v[2] := evalf(v[2],
> 6); v[3] := evalf(v[3], 6); v[4] := evalf(v[4], 6); v[5] :=
> evalf(v[5], 6); v[6] := evalf(v[6], 6)
>
> und hab dann folgendes Ergebnis bekommen:
>
>
> 0.
> 0.000584442
> 0.00147963
> 0.00198805
> 0.00173341
> 0.000821316
> 0.
>
>
> Ich weiß leider nicht, ob es jetzt korrekt ist, was ich
> hier gemacht habe, aber wie gesagt ich weiß nicht , wie
> ich die Fehler oben bearbeite.
>
> Vielen dank und LG
> zeju
>
Hallo,
so wie ich sehe, hast du den hauptsächlichen Ratschlag,
wirklich eine Liste der Zahlenpaare [b,v(b)] zu
erzeugen anstatt nur eine Liste der Werte v(b), gar nicht
befolgt.
Im Detail kann ich aber bei Maple nicht helfen, da ich
damit nicht arbeite.
LG Al-Chw.
|
|
|
|
|
wie Al schon ganz richtig gesagt hat übergibst du eine Liste:
[v(1),v(2),....]
Das könnte plot unter Umständen mögen, bei dir aber scheinbar nicht.
Also übergib eine Liste von Wertpaaren der Form [ [1,v(1)],[2,v(2)],...]
Sollte das auch nicht klappen versuch es mal mit dem Befehl
unapply
Dieser sorgt dafür, dass erst ausgewertet und dann zugewiesen wird.
Also in deinem Fall würde v(1) erst tatsächlich ausgewertet werden und dann wird an die gewünschte Stelle die Zahl, die da rauskommt, geschrieben.
Ich hab mit unapply selbst noch nicht sooo viel gearbeitet, also guck dir den Befehl am besten mal mit
?unapply
an.
Ansonsten wäre vielleicht auch ein Programm ( proc(...) ), das n als Eingabe erhält und daraus die gewünschte Liste von Zahlenpaaren erzeugt, hilfreich.
Damit kannst du das Erzeugen der Liste in viele kleine (bewältigbare) Schritte zerlegen und dennoch musst du n nur an einer einzigen Stelle ändern (natürlich immer gesetz dem Fall dein Programm ist ausreichend dynamisch *g*)
lg
Schadow
|
|
|
|