为什么如图定义的函数,其导数行为异常?
mathematica吧
全部回复
仅看楼主
level 1
hanna_yao 楼主
v = 0.55;
pts = {{1, 0}, {1, v}, {v, 1}, {0, 1}};
f = BezierFunction[pts];
x[t_?NumericQ] := f[t][[1]]
y[t_?NumericQ] := f[t][[2]]
Plot[{y[t], x[t], x'[t]}, {t, 0, 1}]
如题,f是由四个点控制的三阶BezierFunction,x[t],y[t]分别是以t为参数的横纵坐标。然后x'[t]的行为就出现了异常,请问这是为什么?
2020年12月01日 13点12分 1
吧务
level 10
NumericQ去掉就好。
不是什么地方都要用这个的。
2020年12月04日 14点12分 2
……对问题症结的判断是对的,但是单单去掉NumericQ是不行的。具体参3楼。(这会儿还是仅自己可见状态,啥时候显示不知道。)
2020年12月05日 02点12分
吧务
level 15
……NumericQ在这里确实导致了问题,对于用这个方法造出的黑箱,Derivative(也就是 ' )会使用一个不那么精确的方法来计算导数,参看:
mathematica.stackexchange.com/q/29329/1871
但是,直接去掉?NumericQ也是不行的,那样就彻底错了:
f[t][[1]]
(*
Out[24]= t
*)
这个问题的一个可能解法是:
x[t_?NumericQ] := f[t][[1]]
y[t_?NumericQ] := f[t][[2]]
Derivative[n_][x][t_?NumericQ] := Derivative[n][f][t][[1]]
Plot[{y[t], x[t], x'[t]}, {t, 0, 1}]
或者干脆就别引入中间函数:
Plot[{f[t][[1]], f[t][[2]], f'[t][[1]]}, {t, 0, 1}]
2020年12月05日 02点12分 3
1