分别用牛顿迭代法、弦截法和二分法求根.现在没空学了,所以直接给答案吧,不要让我自己做了 30

更详细的题目要求PS我,题目中带图的,帮做出来感激不尽,麻烦大家了,这是我有的最高分了二、目的与要求1.目的:(1)通过采用牛顿迭代法、弦截法和二分法求根的程序设计,使学... 更详细的题目要求PS我,题目中带图的,帮做出来感激不尽,麻烦大家了,这是我有的最高分了
二、目的与要求
1. 目的:
(1)通过采用牛顿迭代法、弦截法和二分法求根的程序设计,使学生更加系统地理解和掌握C++语言的函数间参数传递方法和指针的应用等编程技巧。培养学生综合利用C++语言进行科学计算,使学生将所学知识转化为分析和设计数学中的实际问题的能力,学会查资料和工具书。
(2)提高学生建立程序文档、归纳总结的能力。
(3)进一步巩固和灵活运用先修课程《计算机文化基础》有关文字处理、图表分析、数据归整、应用软件之间图表、数据共享等信息技术处理的综合能力。
2. 基本要求:
(1)要求用模块化设计和C++的思想来完成程序的设计;
(2)要求分别编写牛顿迭代法、弦截法和二分法求根的函数;
(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。
(4)程序调试通过后,完成程序文档的整理,加必要的注释。
三、设计方法和基本原理
1. 课题功能描述
采用常用的典型算法牛顿迭代法、弦截法和二分法等解一元方程,并进行比较。
2. 问题详细描述
一般,常用采用的方法有:牛顿迭代法、弦截法和二分法等。
(1) 牛顿迭代法求根
几何意义:
f(x)=a0xn+a1xn-1+….+an-1x+an=0
求f(x)在X0附近的根
计算公式:Xn+1=Xn-f(Xn)/f’(Xn)
精度:ε= |Xn+1-Xn|<1.0e-m,m=6。
所求的根:满足精度的Xn
或判f(Xn+1)<1e-6。因为此时Xn+1使f(Xn+1)≈0。
(2) 二分法
任取两点x1和x2,判断(x1,x2)判断(x2,x2)
有无实根。如右图所示,如果f(x1)和f(x2)付号相
反,说明(x1,x2)之间有一实根。取(x1,x2)的
中点x,检查f(x)和f(x1)是否同符号,如果不同号,说明实根在(x1,x)区间,x作为新x2,舍弃(x,x2)区间;若同号,则实根在(x,x2)区间,x作为新x1, 舍弃(x1,x)区间。再根据新的x1,x2,找中点,重复上述步骤。直到|x1-x2|<10-6时,x=(x1+x2)/2为所求。
(3)弦截法
其思路是,取f(x1)与f(x2)连线与x轴的交点x,
从(x1,x)和(x,x2)两个区间中取舍的方法与二分法相同。
计算公式为:

判断f(x1)与f(x2)是否同符号的方法与二分法采
用的方法相同。直到先后两次求出的x(弦截典)的值
之差小于10-6为止。
3. 设计要求:
分别用牛顿迭代法、弦截法和二分法求下列方程的根,分析比较各种方法的迭代次数及精度。
f(x)=x3-2x2+7x+4=0
牛顿迭代法的初值:x=0.5;
弦截法x1,x2的初值:-1,1;
二分法x1,x2的初值:-1,1;
精度要求: | x1-x2|<10-6
四、创新要求
在基本要求达到后,进行创新设计:
使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明。
展开
 我来答
流o离o蓝
2011-06-16
知道答主
回答量:16
采纳率:0%
帮助的人:7.9万
展开全部
嘿嘿 这三十分是我的了 给你找了个最好的!!!
#include<stdio.h>

#define F(x) (x*x*x-2*x*x+7*x+4)
#define FL(x) (3*x*x-4*x+7)

float DD_qj(void); //声明函数DD_qj(),用牛顿迭代法求根
float EF_qj(void); //声明函数EF_qj(),用二分法求根
float XJ_qj(void); //声明函数XJ_QJ(),用弦截法求根

int main(void)
{
float a,b,c;

a=EF_qj();
printf("x=%f 时 F(x)=0\n",a,a);

b=XJ_qj();
printf("x=%f 时 F(x)=0\n",b,b);

c=DD_qj();
printf("x=%f 时 F(x)=0\n",c,c);

getchar();
getchar();
return 0;

}

float EF_qj(void) //定义EF_QJ()函数
{
int n=0;
printf("\n\n……用二分法求方程的根……\n\n");
float x1,x2;
printf("请输入X1的初始值:\n");
scanf("%f",&x1);
printf("请输入X2的初始值:\n");
scanf("%f",&x2);
if(x1>x2)
{
float t;
t=x1;
x1=x2;
x2=t;
}

while(x2-x1>0.000006)
{
n++;
if(F(x1)*F(x2)<0)
if(F(x1)*F(x2)==0)
{
if(F(x1)==0)
return x1;
else
return x2;
break;
}
else
{
if(F(x1)*F((x1+x2)/2)<0)
x2=(x1+x2)/2;
else
x1=(x1+x2)/2;
}

else
{
printf("x1-x2之间无解");
return 0;
}
}
printf("循环%d次,计数出结果\n",n);
return (x2+x1)/2;
}

float XJ_qj(void) //定义XJ_qj()函数
{
int n=0;
printf("\n\n……用弦截法求方程的根……\n\n");
float x,x1,x2;
printf("请输入X1的初始值:\n");
scanf("%f",&x1);
printf("请输入X2的初始值:\n");
scanf("%f",&x2);
if(x1>x2)
{
float t;
t=x1;
x1=x2;
x2=t;
}
x=x2-(x2-x1)/(F(x2)-F(x1))*F(x2);

while(F(x)>0.000006)
{
n++;
if(F(x1)*F(x2)<0)
{
x=x2-(x2-x1)/(F(x2)-F(x1))*F(x2);

if(F(x1)*F(x)<0)
x2=x;
else
x1=x;

}
else
{
printf("x1-x2之间无解\n");
return 0;
break;
}
}
printf("循环%d次,计数出结果\n",n);
return x;
}

float DD_qj() //定义DD_qj()函数
{
int n=0;
float x1,x2,g=1;
printf("\n\n……用牛顿迭代法求方程的根……\n");
printf("请输入牛顿迭代法的初值:\n");
scanf("%f",&x1);
while(g>0.000006)
{
n++;
x2=x1-F(x1)/FL(x1);
g=x2-x1;
if(g<0)
g=-g;
x1=x2;
}
printf("循环%d次,计数出结果\n",n);
return x2;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式