我有以下函数(维维亚尼曲线):
Phi = @(t)[ cos(t)^2, cos(t)*sin(t), sin(t) ]
只需检查它是否有效:
s = linspace(0,T,1000);
plot3(cos(s).^2, cos(s).*sin(s), sin(s));
如何推导函数Phi
(可能多次),代表维维亚尼曲线中的一个点t
where t
来自0
to 2*pi
?我定义了吗Phi
适合这样的衍生品吗?我试过了diff
,但它没有保留Phi
因为我需要它。
如果二阶导数是Phi_d2
,我需要获取它的值(例如t = 0
).
我怎样才能实现这个目标?
您可以通过以下三种方法来实现这一目标。第一个用途subs http://www.mathworks.com/help/symbolic/subs.html,第二个使用symfun http://www.mathworks.com/help/symbolic/symfun.html,第三个用途复杂步微分 http://blogs.mathworks.com/cleve/2013/10/14/complex-step-differentiation/:
% Using subs
syms t
Phi = [cos(t) cos(t).*sin(t) sin(t)];
Phi_d2 = diff(Phi,t)
double(subs(Phi_d2,t,0))
% Using symfun
syms t
Phi(t) = [cos(t) cos(t).*sin(t) sin(t)];
Phi_d2 = diff(Phi,t)
double(Phi_d2(0))
% Using complex step differentiation
Phi = @(t)[cos(t) cos(t).*sin(t) sin(t)];
h = 2^-28;
cdiff = @(f,x)imag(f(x(:)+1i*h))/h;
Phi_d2 = cdiff(Phi,0)
您可以找到一个用于执行一阶和二阶复杂步骤微分的函数在我的 GitHub 上:cdiff https://github.com/horchler/cdiff。请注意,复杂的阶跃微分对于高阶导数来说效果不佳。当只有不可微函数或需要快速数值一阶导数时最好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)