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轴的位置。
不胜感激啊! 展开
1,用gnuplot画出图。
2,找到最少一个存在的零点(其实就是找一个,用二分法)
3,用二分法找到零点精确到小数点后5位。
4,找到上述零点的所在x轴的位置。
不胜感激啊! 展开
1个回答
展开全部
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;
}
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询