- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试用不同的方式解这个方程,但没有成功:
求两个函数的点数。
f(x) = sin(x)
y = a
在给定的a。在这种情况下,我们可以说 a = 0.15
sin(x) = ax
= 0.15x
x = sin(x)/0.15
???
谁能帮忙解答一下这个问题吗?
这就是问题的原话:
编写一个 C 程序,读取值 a 并写出方程 sin(x) = a*x
的所有解(即根)
注意:该方程肯定有一个解:x = 0
。但是,对于 a
的低值,代表方程 y = a*x
的线足够接近水平线以多次穿过正弦波。您的程序应该计算并打印根的数量及其值。
提示:假设您要解方程 f(x) = 0
,其中f(x)
是连续函数。进一步假设您可以找到两个值 xlow
和xhigh
这样f(xlow) < 0
和f(xhigh) > 0
和函数 f(x)
在这些值之间的某个位置仅穿过 x 轴一次。您可以继续使用所谓的“二分搜索”技术,如下所示:
- Estimate the solution x as x = (xlow + xhigh) / 2.0
- If |f(x)| < epsilon then print x as solution and exit; else
- If f(x) < 0 then substitute xlow = x else substitute xhigh = x
- Go to (1)
使用 epsilon = 0.001
最佳答案
You could proceed using the so called "binary search" technique
这是解决问题的关键。实际上它就是解决方案。让我画两个函数:
f(x) g(x)
/ --
/ --
/ --
/ --
/--
-*
--/
-- /
-- /
^ ^
| |
xlow xhigh
您有xlow
和xhigh
作为对哪里 f(x)
的估计十字架g(x)
。在你的问题中,f(x) = ax
和g(x) = sin(x)
.
首先,让我们看看为什么 xlow
和xhigh
做出一个好的估计。如果您注意到,请访问xlow
,我们有f(x) < g(x)
并在 xhigh
我们有f(x) > g(x)
。由于函数是连续的,因此在 f(x) == g(x)
之间存在某个点.
现在让我们看看 xlow
之间的中间点和xhigh
:
f(x) g(x)
/ --
/ --
/ --
/ --
/--
-*
--/
-- /
-- /
^ ^ ^
| | |
xlow xmid xhigh
现在在xmid
,我们有f(x) > g(x)
(在本例中)。所以:
f(xhigh) > g(xhigh)
f(xmid) > g(xmid)
f(xlow) < g(xlow)
自xmid
之间和xlow
,函数改变了big-ness-ship(换句话说,f(x) - g(x)
改变了它的符号),那么答案肯定在xlow
之间。和xmid
(请注意, xmid
和 xhigh
之间仍然可能存在偶数个解,但我们目前无法真正判断)。
所以,如果我们分配 xhigh = xmid
,我们会有:
f(x) g(x)
/--
-*
--/
-- /
-- /
^ ^
| |
xlow xhigh
但这和之前的问题是一样的!只是我们将解的可能位置缩小了一半。重复我们有:
f(x) g(x)
/--
-*
--/
-- /
-- /
^ ^ ^
| | |
xlow xmid xhigh
f(xhigh) < g(xhigh)
f(xmid) > g(xmid)
f(xlow) > g(xlow)
这次是f(x) - g(x)
的标志xmid
之间的变化和xhigh
,所以我们会这样做xlow = xmid
切掉我们不感兴趣的范围的前半部分。我们得到:
f(x) g(x)
/--
-*
--/
^ ^
| |
xlow xhigh
同样的问题,只不过我们将解决方案可能的范围缩小了一半。
在 while 循环中重复此操作,会出现 |f(xmid) - g(xmid)|
的某个点。几乎为零(例如小于 0.000001(或 1e-6)(另请注意绝对值))。在这种情况下,我们停止搜索,并说那个特定的 xmid
就是答案。 (请参阅 here 了解为什么我们不检查相等性,而是检查接近性)。
还有一个问题。对于您的特定功能,可能会有许多横截面。我们如何找到xlow
和xhigh
?好吧,我们想要范围 [xlow, xhigh]
仅包含一种解决方案。因此我们可以逐步找到这些范围并找到它们之间的横截面。
假设a > 0
(以及 x > 0
的解决方案),图表如下所示:
----- f(x) = ax
_ _ __*__ _ g(x) = sin(x)
/ \ /_*___----- / \ /
/ *____---*- \ / \ /
|---- | | | | | |
| | | | | |
\ / \ / \ /
\_/ \_/ \_/
那么让我们看看解决方案在哪里。当然,这不是sin(x) < 0
的地方。 。然后上[2kπ, 2kπ + π/2]
和[2kπ + π/2, 2kπ + π]
每个可能有一个解决方案。初始[0, π / 2]
可能有也可能没有解决方案,具体取决于 a
。所以最安全的方法就是枚举所有这样的范围,计算f(x) - g(x)
对于两者xlow
和xhigh
并看看他们的标志。如果标志没有改变,就没有解决办法,我们可以继续前进。如果确实发生变化,我们将执行上面的二分搜索。
算法什么时候结束?我们知道g(x) = sin(x) <= 1
我们知道 a > 0
, f(x) = ax
总是在增加。所以当你有 f(xlow) > 1
,那么肯定没有更多的解决方案了。
该算法将是:
Main Algorithm:
for k = 0,1,...
xlow = 2kπ
xhigh = 2kπ + π/2
binary_search(xlow, xhigh)
xlow = 2kπ + π/2
xhigh = 2kπ + π
binary_search(xlow, xhigh)
binary_search:
if axlow-sin(xlow) and axhigh-sin(xhigh) have the same sign
return no result in this range
do
xmid = (xhigh + xlow) / 2
diff = axmid - sin(axmid)
if diff and axlow-sin(xlow) have the same sign
xlow = xmid
else
xhigh = xmid
while abs(diff) > epsilon
return xmid
对于 a < 0
的情况,解决方案类似(除了范围更改为 sin
周期的另一半)。顺便说一句,对于每个 x
您在上面找到的,-x
也是一个解决办法!
关于c - 如何解决这个: two functions x = sin(x)/a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377923/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!