当前位置:首页 » 编程语言 » 弦截法c语言

弦截法c语言

发布时间: 2022-07-03 10:39:16

1. c语言编程——用弦截法求一元三次方程的根。要求:由主函数调用求根子函数。最好是调试过的,谢谢了

代码如下,其中代码中系数已指定
#include <stdio.h>
#include <math.h>
void main()
{
float f(float x);
float root(float x1, float x2);

float xpoint(float x1,float x2);
float x1,x2,f1,f2,x;
do
{
printf("input x1,x2:\n");
scanf("%f,%f",&x1,&x2);
f1=f(x1);
f2=f(x2);
}while(f1*f2>=0);
x=root(x1,x2);
printf("A root of equation is %8.4f\n",x);

}
float root(float x1, float x2)
{
float xpoint(float x1,float x2);
float f(float x);
int i;
float x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if(y*y1>0)
{
y1=y;
x1=x;
}else
x2=x;
}while(fabs(y)>=0.0001);
return (x);
}
float f(float x)
{
float y;
y=((x-5.0)*x+16)*x-80;
return (y);
}
float xpoint(float x1,float x2)
{
float y;
y=(x1*f(x2)-x2*f(x1)) / (f(x2) - f(x1));
return (y) ;
}

2. c程序设计,用弦截法求方程的根。

#include <stdio.h>
#include <math.h>
void main()
{
float x0,x1,x2,y0,y1,y2;
printf("please input x1,x2:\n");
loop: scanf("%lf %lf",&x1,&x2);
y1=2*pow(x1,3)-4*pow(x1,2)+3*x1-6;
y2=2*pow(x2,3)-4*pow(x2,2)+3*x2-6; if (y1+y2>=y1)
{
printf("请重新输入");
goto loop;
}
else
{
do
{ x0=(x1*y2-x2*y1)/(y2-y1);
y0=2*pow(x0,3)-4*pow(x0,2)+3*x0-6; if(y0*y1>0)
{
x1=x0;
y1=y0;
}
else
{
x2=x0;
y2=y0;
}
}
while(fabs(y0)>1e-6);
printf("%f",x0) ;
}
}

3. C语言弦截法求方程的根,实在是不知道错哪了,求看看

fabs(f(xp))>=0.000001

精度太高算不出来,把0.000001改为0.001就可以了,或者把程序中所有的float改为double也行。

4. 弦截法的数学原理是什么!!看了C语言里的一个例子,我实在不能理解谢谢

你知道一个方程的根的大致范围[a,b],要求得更加确切的根。
1)你在[a,b] 之间找一个数 c。
2)如果你认为 数 c 已经足够作为方程的根了(一般是精度够了),那就找到了方程的根,退出。
3)否则,用找到的数字 c 分割区间 [a,b] , 于是有两个新的范围 [a,c],[c,b]。你进一步判断方程的根是在 [a,c] 还是在 [c,b]之中。
如果判断出方程的根是在 [a,c]之中,那么另 b=c ,得到新的寻找根的范围 [a,b] 回到 步骤1 。
如果判断出方程的根是在 [c,b]之中,那么另 a=c ,得到新的寻找根的范围 [a,b] 回到 步骤1。

上面两种情况,不论判断出方程的根是在新的范围 [a,c] 还是在 [c,b]之中,相比原来范围 [a,b] ,寻找方程根的【范围都缩小】了,也就更加容易找到方程的根了。这就是“极限“的思想。

具体是程序算法是这么实现的:
有函数f(x)。
任取两个数x1、x2,求得对应的函数值f(x1)、f(x2)。
如果两函数值f(x1)、f(x2)同号,则重新取数,直到这两个函数值异号为止。
因为 f(x1)、f(x2) 如果异号,那么函数f(x) 在 [x1,x2] 的范围内肯定和 x 轴相交,也就是
[x1,x2] 之间有方程的根。

1)连接(x1,f(x1))与(x2,f(x2)) 这两点形成的直线与x轴相交于一点x‘,求得对应的f(x’)。
2) 判断 x' 是否已经能作为方程 f(x) 的根了(精度足够了),如果是,退出。
3)否则判断 f(x') 与f(x1)、f(x2)中的哪个值同号。
如f(x‘)与f(x1)同号,则f(x’)为新的f(x1)。回到 步骤1。
如f(x‘)与f(x2)同号,则f(x’)为新的f(x2)。回到 步骤1。

程序的步骤 1,2,3 和上面的说明中的1,2,3是一一对应的。

5. c语言设计程序用弦截法求根

#include<math.h>
#include<stdio.h>
float f(float x)
{ //计算f(x)的值
return 2*x*x*x-4*x*x+3*x-6;
}
float point(float x1,float x2)
{
//计算与x轴交点的x值
return (x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
}
int main()
{
//输入两个数x1,x2
float x1,x2,x;
do
{
printf("输入两个数x1,x2:");
scanf("%f%f",&x1,&x2);
}while (f(x1)*f(x2)>= 0); // 当输入两个数大于0为真时,继续重新输入
//关键循环步骤:
do
{
x=point(x1,x2);//得到交点的值
if(f(x)*f(x1)>0)
x1=x;//新的x1
else
x2=x;
}while (fabs(f(x)) > 0.0001); //0.0001为取值精度
printf("一个解为%f\n",x);
}

6. 请问c语言中弦截法怎么理解

先说方程的根,x^3-5x^2+16^x-80=0,左侧看成一个关于x的函数f(x),因此求方程的根就是在求函数f(x)图像与x轴交点(即f(x)=0时x的取值)
然后是斜截法,其思想就是 f(x)是一段弧线,用一段线段代替它求得近似根,再以这个根作为线段的起点求一个更近似的根。图中第二步的那个公式是用解析的方法表示线段的根,如果这个你也看不懂建议跳过这段或者先学习数学解析几何
再说最后那段代码,((x-5)*x+16)*x-80在数学上与x^3-5x^2+16^x-80完全相等,这难道不是显然的吗?至于为什么不写成x^3的形式,是因为前者运算量更小,运算更快(不信自己拿纸笔算一算试试),顺便一提,这个叫做秦九韶算法,是多项式求值的最快算法

7. C语言弦截法与二分法求方程的解的比较

共同点:
针对求方程根,都是极限的思想
最后的值不断靠近真值
但是方程有整数根,二分法和弦截法求得的值仍然是极限值,得不到整数
弦截法选取的x1和x2必须包含真值
二分法的区间(a,b)也必须包含真值
速度其实差不多
用精度来确定最后的值,不能f(x)==0来确定最后值,
因为不是int型,极限的思想也不能是int型
不同点:
弦截法只针对本方程问题
而二分法的思想却有很多应用
因为它就是把问题一切为2,那边靠近答案往那边走
这样解决问题就很快
比如二分法查找

8. 用弦截法求解一元三次方程的根(利用c语言实现)

我只看了你的第二个
你定义的f函数只有一个形参x,所以在main函数中输入的你所认为的实参abcd 的值无法转给f函数 所以运行时会出错 只要赋给abcd确定的值或增加f函数的形参
scanf("%f,%f,%f,%f",&d,&d,&d,&d);这句也错了应该是scanf("%f,%f,%f,%f",&a,&b,&c,&d);

9. c语言 弦截法求根

算法没有问题
问题出在精度上
float精度不足 导致计算到一定精度时进入浮点陷阱
把所有的float定义改为double 输入输出对应用%lf 就可以得到正确结果了

热点内容
帝豪换压缩机 发布:2024-05-08 05:42:15 浏览:900
java文件时间 发布:2024-05-08 05:32:04 浏览:266
空气压强算法 发布:2024-05-08 05:29:47 浏览:292
c语言中double的范围 发布:2024-05-08 04:53:29 浏览:121
脏小豆服务器怎么加入 发布:2024-05-08 04:40:40 浏览:551
万立存储介质 发布:2024-05-08 04:33:02 浏览:637
ftppro特效复制方法 发布:2024-05-08 04:06:05 浏览:927
平板电脑编译软件 发布:2024-05-08 04:05:46 浏览:478
荣耀v6平板扩展存储 发布:2024-05-08 03:41:12 浏览:423
安卓手机为什么半年一更新 发布:2024-05-08 03:36:52 浏览:661