使用matlab计算弓弦的功率

时间:2013-11-30 14:38:49

标签: matlab physics

我正在尝试使用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);

当我用更高或更低的耐受力计算力时,我得到显着更高或更低的力值。这就是为什么我错了。那么如何计算弓弦中的力?

1 个答案:

答案 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);