有没有一种方法可以对变化的变量进行积分?Matlab

mgdq6dx1  于 2023-05-18  发布在  Matlab
关注(0)|答案(1)|浏览(160)

我试着取(从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');

由此产生的力矩和剪力图在我看来不对。我做的积分对吗?

vcirk6k6

vcirk6k61#

看起来没有什么明显的问题。在这种情况下,一个好的方法是尝试一个更简单的问题,在那里你知道解决方案(或可以分析计算)。例如,您可以将pz = p0*x;作为测试用例。
但是为了回答标题中的问题-执行集成的方式非常低效,如果您打算提高分辨率,它将很快成为问题。事实上,对于每个x,你都在重新计算之前所有x值的解。Matlab确实有一个用于这种类型的数值积分的内置函数,称为cumtrapz,它运行得更快。下面是在我的系统上使用你的方法和cumtrapz计算不同点数N的被积函数所需时间的比较。

相关问题