我正在尝试使用MATLAB程序来近似锥体的体积,该程序使用半径减小的n个相等光盘(圆柱体)。底部是最大的圆盘,下面是最上面的圆盘,顶部是半径最小的圆盘。我没有麻烦获得输入,但我无法弄清楚如何使用光盘计算音量。对于循环或while循环?
顺便说一下光盘的音量是pi * r * r * h,h是高度,r是半径
下一步,我需要计算所需的光盘数量,以便错误百分比小于1%
这是我到目前为止所写的全部内容,使用有限数量的光盘计算音量效果很好,但我无法弄清楚如何计算光盘数量以使误差百分比小于1%。我很感激帮助。谢谢!!
h=input('Enter height: ');
if (h<=0)
disp('Height must be positive!');
else
r=input('Enter base radius: ');
if (r<=0)
disp('Base radius must be positive!');
else
n=input('Enter number of discs: ');
ne=n;
while n>0 || n~=0
if n>0 && (mod(n,1))==0
Vcone=(1/3)*(pi*r*r*h);
VTotal=0;
for i=n:-1:1
rEachDisc=r*(((i-1)*h)/n)/h;
VEachDisc=(pi*rEachDisc*rEachDisc)*(h/n);
VTotal=VTotal+VEachDisc;
end
Vapp=VTotal+((pi*r*r)*(h/n));
eror=abs((Vcone-Vapp)/Vcone*100);
fprintf('For n=%g, approximated volume: %g ; error: %g%%\n',n,Vapp,eror)
else
disp('This is not a positive integer!');
end
n=input('Enter number of discs: ');
end
end
end
VTotal=0;
t=1;
Vcone=(1/3)*(pi*r*r*h);
for i=ne:-1:1
rEachDisc=r*(((i-1)*h)/ne)/h;
VEachDisc=(pi*rEachDisc*rEachDisc)*(h/ne);
VTotal=VTotal+VEachDisc;
Vapp=VTotal+((pi*r*r)*(h/ne));
eror=abs((Vcone-Vapp)/Vcone*100);
if eror==1
fprintf('We need at least %g discs to approximate the volume with less than 1%% error.',ne);
break
end
end
答案 0 :(得分:1)
以上答案,特别是yoda告诉你如何计算近似值。
至于检测到您达到1%错误的时间,有两个选项:
V = pi/3 * r^2 * h
比较,其中r
是基本半径。由于这基本上不需要任何近似,这可能不是主意。在代码中:
r = h*(1:n)/n;
V = pi * r.^2 * h / n;
V = sum(V);
e = V(1);
re = e/(V-e);
现在V
包含对卷的估计,e
包含绝对错误的上限,re
包含相对错误的上限。
答案 1 :(得分:0)
使用for循环。
关键是要意识到锥体具有恒定的斜率,因此近似锥体中的每个圆盘将与半径中的最后一个圆盘的常数因子不同。 (或者等效地说,它与直径中的最后一个不同的是一个常数因子。它是一样的。)
要计算每张光盘的半径,您需要从前一个半径中减去一个固定数字。所以每次循环你都需要修改半径变量r。
答案 2 :(得分:0)
如果你打破问题,你可以更简单地编程,而你根本不必使用任何循环。 MATLAB的优势在于数组/向量操作,你应该充分利用它。以下是您应该尝试的步骤: