如何编写正确的代码来求解 C 中的方程


Help me write a program in C that will fit the values of k into the equation.

公式 = 5/1+k + 9/2+k + 13/3+k + 17/4+k -16

The value of k can be negative and an integer; in the case of the above selection method, the result should come out to 0.250000000.

我尝试过的:

I tried giving k an initially negative value, and using a loop to add 0.000001 at a time, but for some reason I don’t get the correct value when k is negative or not an integer

解决方案1

我认为你写得不正确。 难道不应该是 5/(1+k) + 9/(2+k) …每个分母项都用括号括起来吗? 这个细节非常非常重要。 我会在每个求和项周围添加括号,这样您就不必依赖于优先级列表的解释。

我首先尝试牛顿拉夫森方法,如下所述: 快速稳定的多项式求根器 – 第二部分[^] 虽然我不确定它是否适用于这个方程。

如果这不起作用,您可以尝试二分搜索方法。 首先尝试一系列值来查找两个数字,其中一个答案给出的结果高于零,下一个答案给出的结果低于零,反之亦然。 然后你尝试这两个中间的结果,然后继续尝试其他两个之间的中间值,直到你得到一个在你的容忍范围内的答案,即我之前的回复中描述的 epsilon。 如果我没记错的话,在上一个问题中,您尝试了 -10000 到 10000 之间的连续值。 您尝试使用此方法作为两个初始猜测。 如果他们给出的结果具有相反的符号,那么这些就是合理的初步猜测。 然后继续尝试猜测之间的中间值。

这种方法的关键是选择正确的值来检查下一步。 我的意思是,如果先尝试 -10000 和 10000,结果符号相反,然后再尝试 0。 0 检查的结果将决定您接下来尝试哪个值。 举个例子,假设检查 -10000 的结果是负数,而 10000 的结果是正数,那么接下来检查 0。 如果零处的值为负数,则接下来尝试+5000。 如果零处的值为正数,则接下来尝试 -5000,并继续像这样分割差值,直到您将结果归零为止。

ETA:正如我的评论所述,我决定尝试一下,但我不确定我是否正确理解了公式。 问题是,按照我上面的写法,在 -1、-2、-3 和 -4 处有四个趋向无穷大的渐近线。 我最终使用二分搜索找到了 -1 处的那个。

我的问题是“将 k 的值拟合到方程中”真正意味着什么?如果找到 k 使得公式为零,那么我认为由于渐近线,这是不可能的。

コメント

タイトルとURLをコピーしました