我正在尝试绘制我在mathematica表格中创建的点,但由于某种原因,我的点的一个组成部分似乎有围绕它的双括号,而另一个只有一个如下:
{{x},y},{{x1},y1}....{{xn},yn}
并且列表图不会将这些识别为点,也不会绘制它们。 这是我的mathematica代码:
Remove["Global`*"]
b = .1;
w = 1;
Period = 1;
tstep = 2 Pi/Period;
s = NDSolve[{x''[t] + b x'[t] - x[t] + x[t]^3 - .5 Cos[w t] == 0,
x'[0] == 0, x[0] == 0}, x[t], {t, 0, 1000}, MaxSteps -> Infinity];
x[t_] = x[t] /. s
data = Table[Evaluate[{x'[t], .5}], {t, 0, 1000, tstep}]
ListPlot[data]
我也尝试过使用命令
ListPlot[Flatten[Table[Evaluate[{x'[t], .5}], {t, 0, 1000, tstep}]]]
无效以及
ListPlot[Table[Evaluate[{Flatten[x'[t]], .5}], {t, 0, 1000, tstep}]]]
如何删除{}
?
答案 0 :(得分:2)
你可以尝试这些方法:
Clear["Global`*"]
b = .1;
w = 1;
s = NDSolve[{x''[t] + b x'[t] - x[t] + x[t]^3 - .5 Cos[w t] == 0,
x'[0] == 0, x[0] == 0}, x[t], {t, 0, 1000}, MaxSteps -> Infinity];
xr[u_] := ((x[t] /. s[[1]]) /. t -> u)
Plot[(xr'[u]), {u, 0, 30}]
但我不确定你想从{x'[t], .5}
部分获得什么
答案 1 :(得分:1)
x'[t]
很可能会返回{x_i}
形式的内容。尝试用此
data=Table...
行
data = Table[Evaluate[{First[x'[t]], .5}], {t, 0, 1000, tstep}]
另一种方法是
data=data /. {{x_}, y_} :> {x, y};
使用ReplaceAll
(/.
)将所有{{x_i},y_i}
替换为{x_i,y_i}
示例:强>
答案 2 :(得分:1)
可以说有更好的方法来完成你正在做的事情,但这不是你所要求的。
要删除额外的{}
,请认识到这来自NDSolve
的结果,因此请使用:
s = First @ NDSolve[{x''[t] + b x'[t] - x[t] + x[t]^3 - .5 Cos[w t] == 0,
x'[0] == 0, x[0] == 0}, x[t], {t, 0, 1000}, MaxSteps -> Infinity];
答案 3 :(得分:1)
我的同事们是对的,但我认为可以说更多。首先,对你的实际问题。 NDSolve
的输出是表单
{{x[t]->InterpolatingFunction[...]}, {x[t]->InterpolatingFunction[...]}, ...}
如果存在多个解决方案,则仅存在第二个和后续替换规则。我从未遇到过使用NDSolve
的案例,但这样做的答案与Solve
一致,其中多个解决方案并不少见。因此,只有一个解决方案,你有一个双重列表,即
{{x[t]->InterpolatingFunction[...]}}
根据Mr. Wizard,您可以使用First
,也可以使用Part
,即
NDSolve[ ... ][[ 1 ]]
这是我首选的方法,虽然它稍微难以阅读并且可能会模糊您的意图。您应该知道NDSolve
返回的InterpolatingFunction
是一个函数,它将直接接受变量。那么,声明左侧的变量
x[t_] = x[t] /. s
xr[u_] := ((x[t] /. s[[1]]) /. t -> u)
充其量是多余的,第二个要求每次使用xr
时都要进行替换。相反,您可以声明
x = x[t] /. s
然后再写x[t]
将返回IntepolatingFunction[t]
,完全符合您的要求。然后,当Belisarius指出时,您可以直接在Plot
中使用它或其衍生物,而不是首先构建值表并将它们输入ListPlot
。
修改:当我第一次发布此内容时,我没有注意到NDSolve
的怪癖。如果您明确解决了x[t]
而不是x
,那么NDSolve
会返回InterpolatingFunction[...][t]
,但如果您只是求解x
,则会得到我发布的内容。这个怪癖允许OP和Belisarius的解决方案发挥作用,否则不应该进行替换。