我试着取(从x到B/2的积分pz(zeta)d(zeta)),这是升力产生的剪力,和-(从x到b/2的积分(zeta-x)*pz(zeta)d(zeta)),这是升力产生的力矩
% Create a spanwise distance vector
x = linspace(0, b/2, 100);
% Calculate lift distribution pz(x)
pz = p0 * sqrt(1 - (x / (b/2)).^2);
% Preallocate arrays for shear force and moment distributions
Vz_lift = zeros(size(x));
My_lift = zeros(size(x));
% Calculate shear force and moment distributions
for i = 1:length(x)
Vz_lift(i) = trapz(x(i:end), pz(i:end), 2);
My_lift(i) = -trapz(x(i:end), (x(i:end) - x(i)) .* pz(i:end),2);
end`
% Plot shear force distribution
subplot(3,1,2)
plot(x, Vz_lift);
xlabel('Spanwise Distance (x)');
ylabel('Shear Force Distribution (N)');
title('Shear Force Distribution due to Lift over Half Span');
% Plot moment distribution
subplot(3,1,3)
plot(x, My_lift);
xlabel('Spanwise Distance (x)');
ylabel('Moment Distribution (N*m)');
title('Moment Distribution due to Lift over Half Span');
由此产生的力矩和剪力图在我看来不对。我做的积分对吗?
1条答案
按热度按时间vcirk6k61#
看起来没有什么明显的问题。在这种情况下,一个好的方法是尝试一个更简单的问题,在那里你知道解决方案(或可以分析计算)。例如,您可以将
pz = p0*x;
作为测试用例。但是为了回答标题中的问题-执行集成的方式非常低效,如果您打算提高分辨率,它将很快成为问题。事实上,对于每个x,你都在重新计算之前所有x值的解。Matlab确实有一个用于这种类型的数值积分的内置函数,称为cumtrapz,它运行得更快。下面是在我的系统上使用你的方法和cumtrapz计算不同点数N的被积函数所需时间的比较。