我制作了一个程序来求解公式{f(y)=面积/ y},该公式计算矩形的高度和宽度[X和Y]以使其具有特定的面积,同时,高度和宽度之间有特定的比例{1.0539435519260202716443150560307}。
程序在Y的公式上应用数字[Xmin,Xmax]的范围,并在一行中打印出Y,X和X / Y比,并且循环增加了将要应用的数字。 ”。每次循环结束。
所以问题是,为了找到最准确的比率(最接近我需要的比率),我需要将步长做得太小,但这给了我成千上万的结果,这对我来说是无法手动完成的搜索它,所以我希望程序只打印比率至少包含数字{1.053}的行,以便确保它太接近我想要的原始比率,我尝试了很多搜索,但是看起来所有可用的方法仅适用于字符串,因此有人可以向我建议解决方法/逻辑,甚至可以采用完全不同的方法吗?加上我尝试过vb.net语言,但相同,它仅适用于字符串。
这是代码:-
(变量声明没有被stackoverflow突出显示,因此我将其删除,但是我为四个变量设置了“ double”数据类型)。
cout << "Enter Area" << endl;
cin >> area;
cout << "Enter Xmin" << endl;
cin >> Xmin;
cout << "Enter Xmax" << endl;
cin >> Xmax;
cout << "Enter Step" << endl;
cin >> step;
double x, y, multi, ratio;
for (double i = Xmin; i <= Xmax; i += step)
{
x = i;
y = area / x;
multi = x * y;
ratio = x / y;
cout << "y = " << y << " X = " << x << " Ratio = " << ratio << endl;
}
system("pause");
这是没有办法的,还有其他支持这种简单任务的编程语言吗?
答案 0 :(得分:2)
这可以通过一些简单的代数来完成:
我们有x * y = area
和x / y = ratio
。您可以通过两种方法来求解此方程组,例如将两个方程相乘得到x^2 = area * ratio
。 x = sqrt(area * ratio)
这样。将两个方程式相除得到y^2 = area / ratio
,所以y = sqrt(area / ratio)
。
答案 1 :(得分:0)
尝试一下:
const double requestedRatio = 1.0539435519260202716443150560307;
while(Xmax - Xmin >= 0.00000000001)
{
x = (Xmax + Xmin) * 0.5;
y = area / x;
multi = x * y;
ratio = x / y;
if (ratio < requestedRatio) Xmin = x;
else Xmax = x;
}
cout << "y = " << y << " X = " << x << " Ratio = " << ratio << endl;
这是经典的二进制搜索。您从搜索范围Xmin:Xmax
开始。将其分成两半,然后选择与您的预期结果“更接近”的部分。结果,您可以根据需要找到x
接近所需比率-只需修改while
条件。