c++有个问题,不胜感激~

有一个方程:fx=(x^3-x^2-x-1)^3,定义域是[-1,2]1,用gnuplot画出图。2,找到最少一个存在的零点(其实就是找一个,用二分法)3,用二分法找到零... 有一个方程: fx=(x^3-x^2-x-1)^3, 定义域是[-1,2]
1,用gnuplot画出图。
2,找到最少一个存在的零点(其实就是找一个,用二分法)
3,用二分法找到零点精确到小数点后5位。
4,找到上述零点的所在x轴的位置。
不胜感激啊!
展开
 我来答
philafox
2012-06-20 · TA获得超过253个赞
知道小有建树答主
回答量:124
采纳率:100%
帮助的人:94.2万
展开全部
gnuplot 绘图:
set xrange [-1:2]
plot (x**3-x**2-x-1)**3

计算方法忘的差不多了,下面程序能凑活能算出来,试算值是根据 gnuplot 的图来设置的,如果设置不对算不出结果。
#include <stdio.h>
#include <math.h>
#include <deltas.h>

double func(double x)
{
double t = x * x * x - x * x - x - 1;
return t * t * t;
}

int main()
{
double x, y;
double start_x = 1.8, end_x = 1.9; /* 试算值 */
long count = 0; /* 计算次数 */
char found = 0; /* 是否找到 */
const double delta = 0.000001;

while (count < LONG_MAX)
{
double start_y = func(start_x);
double end_y = func(end_x);
x = (start_x + end_x) / 2.0;
y = func(x);

if (fabs(y) < delta &&
fabs(start_y) < delta &&
fabs(end_y) < delta)
{
found = 1;
break;
}

++count;

/* 二分 */
if (fabs(start_y) > fabs(end_y))
start_x += (end_x - start_x) / 2.0;
else
end_x -= (end_x - start_x) / 2.0;
}

if (found)
{
printf("start_x = %lf, end_x = %lf\n", start_x, end_x);
printf("x = %.5lf, y = %.5lf\n", x, y);
} else {
printf("not found\n");
}

return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式