请问怎么用MATLAB推导浮力公式?
发布网友
发布时间:2024-04-09 22:34
我来回答
共1个回答
热心网友
时间:2024-11-30 18:07
参考代码(公式推导过程也以注释的形式写在代码中了):
% 1)导出h和r、s之间的关系式;
% 设浮球半径为r,浸入水中的深度h,则水面处的浮球截面半径为
% R = sqrt( r^2 - (r-h)^2 ) = sqrt( 2*r*h - h^2 )
% 则浸入水中那部分浮球的体积为
% V = int(pi*R^2, h, 0, h) = PI * h^2 * (r-h/3)
% 整个球的体积为
% V1 = int(pi*R^2, h, 0, 2*r) = 4/3 * PI * r^3
% 所以方程为
% h^3 / 3 - r*h^2 + 4/3 * r^3 * s = 0
% 推导完毕。下面是推导公式时用到的代码:
syms r h real;
R=sqrt(2*r*h-h^2);
V = int(pi*R^2, h, 0, h)
V1 = int(pi*R^2, h, 0, 2*r)
% 2)程序要求能处理0<s<1范围内的所有值,按照防错程序设计机制,
% 程序要测试输入值s<0和s>0的情况,在程序中要解一个关于h三
% 次多项式方程,要求所编的函数能识别出正确的根;
prompt = {'浮球半径 r', '比重 s'};
a = inputdlg(prompt, '输入参数', 1, {'10' '0.6'});
if ~isempty(a)
r = str2num(a{1});
s = str2num(a{2});
if s<0 || s>1 || r<=0
msg = '输入超出合理范围(比重应在0-1之间,半径应为正)';
errordlg(msg, '输入有误');
else
% 解方程,并去除不合理根(复数、负数或超出浮球直径)
h = roots([1/3 -r 0 4/3*r^3*s]);
h = h( imag(h) <= eps );
h = h( h>0 & h<2*r );
% 输出结果
info = sprintf('浮球浸入水中的深度 h = %.4g', h);
msgbox( info, '结果');
end
end
% 3)画出h~s的函数关系图。
% 方程两端同除以r^3,则可改写为
% 1/3 * (h/R)^3 - (h/R)^2 + 4/3 * s = 0
% 以s为横坐标,h/r为纵坐标,则可以使用ezplot函数绘图:
ezplot('1/3*y^3-y^2+4/3*x',[0 1],[0 2])
xlabel('比重s')
ylabel('入水深度与浮球半径之比 h/R')
title('1/3 (h/R)^3 - (h/R)^2 + 4/3 s = 0')
h~s的函数关系图: