
正文
用c语言用迭代法求函数值 c语言迭代计算求方程的解
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言:迭代法解方程和二分法解方程。
这段代码是求解方程f(x)=0在区间[-10,10]上的根的数值解。
方法的思想就是:一直选取区间中间的数值,如果发现中间的函数值与一侧函数值,异号,那么说明解在这个更小的区间中,采用eps=1e-5作为区间的极限大小,通过迭代的方法求解这个方程的数值解。
所以了解了上述思想,那么else
if(f(a)*f(c)0)
b=c;
说明的是
f(a)和f(c)异号,那么使用b=(a+b)/2缩小迭代区间,继续迭代;同理else
a=c;说明f(a)和f(c)同号,那么使用a(a+b)/2缩小迭代区间,继续迭代!
相关问答
Q1: c语言 迭代法
迭代法用c语言用迭代法求函数值,是一种不断用变量用c语言用迭代法求函数值的旧值递推新值用c语言用迭代法求函数值的过程。
fun函数设置循环用c语言用迭代法求函数值,当x0-x1的绝对值小于0.000001循环结束。
#include
stdio.h
#include
math.h
float
fun()
{float
x,n=0.0,root;
while(root=0.000001||root=-0.000001)
{
x=n;
n=cos(x);
root=x-n;
}
root=n;
return
root
;
}
void
main()
{
float
f=fun();
printf("root=%f\n",f);
}
Q2: c++ 用迭代法求
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在 17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n)) /f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
以上摘自百度百科 牛顿迭代法
立方根的近似公式如下:
如果y是x的立方根的一个近似值,那么下式将给出一个更好的近似值:
(x/(y^2)+2y)/3
#includeiostream
#include cmath
using namespace std;
float fun(float a,float n)
{
if(abs(n*n*n-a)0.000001)
{
return n;
}
else
{
return fun(a,(a/n/n+2*n)/3);
}
}
int main()
{
float n = 3.0;//3次方根
float a;//要开方的数
cina;
coutfun(a,3)endl;
system("pause");
return 0;
}
注意,此段代码不适合推广到N次方根
Q3: c语言 用牛顿迭代法求f(x);
#include "stdio.h"
#include "math.h"
main()
{float x,f,f1; //f代表 f(x)=2x^3-4x^2+5x-18,f1代表 f‘(x)=2*x^2-4*2x^+5 =6*x*x-8*x+5;
x=8; // x的初值可为任意值
do
{
f=2*x*x*x-4*x*x+5*x-18; //f(x)=2x3-4x2+5x-18
f1=6*x*x-8*x+5; //f(x)的导数: f‘(x)=2*3* x^2 - 4*2 *x+5 =6*x*x-8*x+5;
x=x-f/f1;
}while(fabs(f)0.00001);
printf("x=%f,f=%f\n",x,f);
}
Q4: c语言 用迭代法求解
#include
stdio.h
#include
math.h
int
main(void)
{//本程序已测试,完全可用
double
a;
printf("input
a:");
scanf("%lf",a);
if(fabs(a)1e-13){//需要注意为0的情况,double双精度精确到15位,这里设置下
printf("0");
return
0;
}
double
x,y;
x=a;
y=(2*x/3)+(a/(3*x*x));
while(fabs(y-x)0.000001){
x
=
y;
y=(2*x/3)+(a/(3*x*x));
printf("%.6f
%.6f\n",x,x*x*x);
}
}
第一个回答的同志有两个错误
1,倒数第三行while(fabs(xk2-temp)1e-6)中的应该改为才对
2,没有考虑输入的数很小为0的情况
Q5: C语言迭代法
while 和do while是不同地
第二个改成
#include math.h
#include stdio.h
main()
{float x,t,c;
int a;
scanf("%d",a);
x=1;
t=x;x=(1.0/2)*(x+a/x);c=x-t;
while(fabs(c)/x1e-5)
{
t=x;x=(1.0/2)*(x+a/x);c=x-t;
}
printf("%f",x);
getch();
}
才会等价于第一个程序
用c语言用迭代法求函数值的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言迭代计算求方程的解、用c语言用迭代法求函数值的信息别忘了在本站进行查找喔。






