如何绘制三维图像:Plot3D NDSolve

h02*_*001 3 wolfram-mathematica

m = 10; c = 2; k = 5; F = 12;

NDSolve[{m*x''[t] + c*x'[t] + (k*Sin[2*Pi*f*t])*x[t] == F*Sin[2*Pi*f*t], 
         x[0] == 0, x'[0] == 0}, x[t], {t, 0, 30}] 
Run Code Online (Sandbox Code Playgroud)

{f,0,5}}(0 = <f <= 5)

如何绘制三维图像:

x = u(t,f)

............

如果f = 0.1,0.2,... 5,我们可以求解等式:

NDSolve[{m*x''[t] + c*x'[t] + (k*Sin[2*Pi*f*t])*x[t] == F*Sin[2*Pi*f*t], 
         x[0] == 0, x'[0] == 0}, x[t], {t, 0, 30}] 
Run Code Online (Sandbox Code Playgroud)

x是t和f的函数

...............

m = 10; c = 2; k = 5; F = 12;

f = 0.1

s = NDSolve[{m*x''[t] + c*x'[t] + (k*Sin[2*Pi*f*t])*x[t] == F*Sin[2*Pi*f*t], 
             x[0] == 0, x'[0] == 0}, x[t], {t, 0, 30}] 
Plot[Evaluate[x[t] /. s], {t, 0, 30}, PlotRange -> All]
Run Code Online (Sandbox Code Playgroud)

f = 0.1 在此输入图像描述

f = 0.2 在此输入图像描述

f = 0.3 在此输入图像描述

f = 5 在此输入图像描述

如何绘制三维图像:x = u(t,f)

Pla*_*iac 6

这是一个解决方案.

m = 10; c = 2; k = 5; F = 12;
NumberOfDiscrit$f = 20;(* Number of points you want to divide 0<=f<=5*)
NumberOfDiscrit$t = 100;(* Number of points you want to divide 0<=t<=30 *)
fValues = Range[0., 5., 5./(NumberOfDiscrit$f - 1)];
tValues = Range[0., 30., 30./(NumberOfDiscrit$t - 1)];
res = Map[(x /. 
  First@First@
    NDSolve[{m*x''[t] + c*x'[t] + (k*Sin[2*Pi*#*t])*x[t] == 
       F*Sin[2*Pi*#*t], x[0] == 0, x'[0] == 0}, x, {t, 0, 30}]) &,
fValues];
AllDat = Map[(#@tValues) &, res];
InterpolationDat = 
Flatten[Table[
Transpose@{tValues, 
  Table[fValues[[j]], {i, 1, NumberOfDiscrit$t}], 
  AllDat[[j]]}, {j, 1, NumberOfDiscrit$f}], 1];
Final3DFunction = Interpolation[InterpolationDat];
Plot3D[Final3DFunction[t, f], {t, 0, 30}, {f, 0, 5}, PlotRange -> All,
PlotPoints -> 60, MaxRecursion -> 3, Mesh -> None]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以使用Manipulate动态更改某些参数.顺便说一下,如果将f一个连续变量作为连续变量,上面的3D图像可能会产生误导u(t,f).你应该注意到,数值解似乎是爆炸的渐近值t>>30.见下图.

在此输入图像描述 在此输入图像描述

希望这可以帮助你.


Hei*_*ike 6

你也可以这样做

Clear[f]
m = 10; c = 2; k = 5; F = 12;

s = NDSolve[{m*Derivative[2, 0][x][t, f] + 
     c*Derivative[1, 0][x][t, f] + (k*Sin[2*Pi*f*t])*x[t, f] == F*Sin[2*Pi*f*t],
   x[0, f] == 0,
   Derivative[1, 0][x][0, f] == 0}, x, {t, 0, 30}, {f, 0, .2}]

Plot3D[Evaluate[x[t, f] /. s[[1]]], {t, 0, 30}, {f, 0, .2}, PlotRange -> All]
Run Code Online (Sandbox Code Playgroud)

3d图