我正在尝试使用MATLAB
的{{1}}计算弓弦中的力,我有这个微分方程
ode45
我用ode45计算了微分方程,但我试图用这个代码计算力;
M(x)=d^2y/dx^2 * (1+(dy/dx)^2)^(-3/2)=-q * y where M(x) is the average torque in the bow, q=11.4716, and y(0)=0.3, y'(0)=0 and 0≤ x ≤0.3668
第6行计算所有读数的扭矩。我想M中的第一个元素是平均扭矩。
我正在使用这些功能
X=0.3668
tolerance=odeset('Abstol', 1e-9, 'Reltol', 1e-11);
[x,M]=diffekv45(tolerance,X)
force=zeros(length(x),1);
for i=1:length(x)
if x(i)==0
force(i)=0;
else
force(i)=(0.3-M(i,1))./x(i); %%% 0.3-M(i,1) is because it is equilibrium in the %%center of the bow
end
end
totalforce=sum(force);
当我用更高或更低的耐受力计算力时,我得到显着更高或更低的力值。这就是为什么我错了。那么如何计算弓弦中的力?
答案 0 :(得分:0)
根据位移,您有一个二阶方程,需要将其分成两个一阶方程,以便在orde45()
中使用。
使用状态向量h=[y; diff(y,x)]
并创建以下差异函数以在ode45()
function hp = deriv(x,h)
y = h(1); %First element of h is the deflection
v = h(2); %Last element of h is the slope
hp = [v; -q*y/(1+v^2)^(-3/2)];
end
然后致电
h0 = [0.3; 0];
ode45(deriv, [0,X], h0, tol);