我必须用数字方法求解微分方程;所以说:
diff(y(x), x)+x^2-15*x = 5
初始条件:
inc := y(0) = 0
解决方案当然是:
sol := dsolve({f, inc}, numeric);
导致:
proc(x_rkf45)...结束
现在我想为y(x)
绘制x=0..2
。
我在做什么?
代码:
plot(sol(x), x = 0 .. 2);
不起作用!
警告,无法将函数计算为数值 区域;请参阅plotting命令的帮助页面以确保调用 顺序是正确的
答案 0 :(得分:0)
以下是三种不同的方法。
第一种是使用DEtools[DEplot]
命令,它既可以解决也可以绘制。它的输入是微分方程和一组或多组初始条件(与dsolve(...,numeric)
返回的东西相反)。
DEplot
命令有很多选项。例如,您可以关闭字段图的包含。
restart:
deq := diff(y(x), x)+x^2-15*x = 5:
ic := y(0) = 0:
DEtools[DEplot](deq, y(x), x=0..2, [ic]);
下一步是像你一样调用dsolve(...,numeric)
,并将它返回的内容传递给plots:-odeplot
命令。
sol := dsolve({deq, ic}, numeric):
plots:-odeplot(sol, x=0..2);
另一种方法是传递dsolve
附加output=listprocedure
选项,以便它返回一个程序列表。然后可以提取其中的任何一个并用于计算某个点或通过传递给通常的plot
命令来使用。
sollist := dsolve({deq, ic}, numeric, output=listprocedure):
Y := eval(y(x),sollist):
Y(1.0);
12.1666666666667
plot( Y, 0..2 );
有关自定义结果图的详细信息,请参阅DEtools[DEplot]
,plots:-odeplot
或plot,options的帮助页面。
如果您选择odeplot
方式并希望包含字段图,则可以使用plots:-display
和plots:-fieldplot
来扩充图表。