① 编写C程序,用迭代法求x=a^(1/2)。求平方根的迭代公式为:Xn+1=1/2(Xn+a/Xn)
举个例子,假如你有1000个数字,你要找n。
你可这么做, 设 x1 = 500, x0 = 1000, 假如 n>x1 那么 重新设置 x1 = 750, x0 还是500
假如n<x1, 那么 x1 = 250, x0 =500 所以设 x1 为任何数,你得到的结果都是一样的。
假如想知道他们用什么方法算开根号的话。
用来算开根号的是 牛顿法
② Matlab用简单迭代法求f(x)=x^3-x-1
牛顿迭代法在数值分析中最简单迭代法的一种。
牛顿迭代法的迭代格式为
Xk+1=Xk—f(Xk)/f'(Xk)
根据牛顿迭代法的迭代格式,用matlab语言编程,可以求得
x = 1.32471795724475
③ 编译原理:优先函数 f和g 到底怎么看啊,不懂怎么构造的 求解...
求算符优先函数的方法—迭代法
若已知运算符之间的优先关系,可按如下步骤构造优先函数:
1、对每个运算符a(包括#在内)令f(a)=g(a)=1
2、如果a⋗b且f(a)<=g(b),令f(a)=g(b)+1
3、如果a⋖b且f(a)>=g(b),令g(b)= f(a)+1
4、如果a≐b而f(a) ≠g(b),令min{f(a),g(b)}=max{f(a),g(b)}
5、重复2~4,直到过程收敛。如果重复过程中有一个值大于2n,则表明不存在算符优先函数。
④ 求教:什么叫求数列通项公式的“迭代法”
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
如等差数列,an+1=an+d:
an=an-1+d=(an-2+d)+d=(an-3+d)+d+d……
=a1+(n-1)d
这就是迭代法,这里用了一个最简单的例子。
(4)编译原理迭代法求优先函数扩展阅读:
迭代法的主要研究课题是对所论问题构造收敛的迭代格式,分析它们的收敛速度及收敛范围。迭代法的收敛性定理可分成下列三类:
①局部收敛性定理:假设问题解存在,断定当初始近似与解充分接近时迭代法收敛;
②半局部收敛性定理:在不假定解存在的情况下,根据迭代法在初始近似处满足的条件,断定迭代法收敛于问题的解;
③大范围收敛性定理:在不假定初始近似与解充分接近的条件下,断定选代法收敛于问题的解。
选代法在线性和非线性方程组求解,最优化计算及特征值计算等问题中被广泛应用。
⑤ 用二分法.迭代法,牛顿法,求exp(x)+10*x-2=0的根(三段代码分开)
这分也太少了。
/***二分法***/
#include <stdio.h>
#include <conio.h>
#include <math.h>
float f(float x)
{
return exp(x)+10*x-2;
}
float Separate(float a,float b,float eps)
{
float f(float);
float c,fa,fb,fc;
if (a>b)
{c=a;a=b;b=c;}
fa=f(a);
fb=f(b);
c=(b+a)/2;
fc=f(c);
/*printf("a=%f b=%f mid=%f fa=%f fb=%f fc=%f\n",a,b,c,fa,fb,fc);*/
if (b-a<eps)
return c;
if (fa*fb>0)
{
printf("error:f(a)*f(b)>0");
getch();
return -1;
}
if (fabs(fc)<eps)
return c;
if (fa*fc<0)
return Separate(a,c,eps);
else
return Separate(c,b,eps);
}
int main()
{
float x;
float Separate(float a,float b,float eps);
x=Separate(0,1,0.5e-3);
printf("%f\n",x);
getch();
return 0;
}
/***迭代法***/
#include <stdio.h>
#include <conio.h>
#include <math.h>
float f(float x)
{
return (2-exp(x))/10;
}
float Iter(float x,float eps)
{
float xnew;
float f(float);
int itern=0;
while(itern<1000) /*最大迭代次数*/
{
xnew=f(x);
printf("itern=%d\tx=%f\n",itern,xnew);
if (fabs(xnew-x)<=eps)
return xnew;
x=xnew;
itern++;
}
printf("Divergence\n");
return xnew;
}
int main()
{
float x;
float Iter(float x,float eps);
x=Iter(0,0.5e-3);
printf("%f\n",x);
getch();
return 0;
}
/***牛顿迭代法***/
#include <stdio.h>
#include <conio.h>
#include <math.h>
float f(float x)
{
return exp(x)+10*x-2;
}
float df(float x)
{
return exp(x)+10;
}
float Newton(float x,float eps)
{
int itern=0;
float xnew;
float f(float);
float df(float);
while(itern<1000) /*最大迭代次数*/
{
xnew=x-f(x)/df(x);
printf("itern=%d\tx=%f\n",itern,xnew);
if (fabs(xnew-x)<=eps)
return xnew;
x=xnew;
itern++;
}
printf("Divergence\n");
return xnew;
}
int main()
{
float x;
float Newton(float x,float eps);
x=Newton(0,0.5e-3);
printf("%f\n",x);
getch();
return 0;
}
⑥ 试述编译原理中优先函数有何好处与不足之处
构造算符优先分析表时使用的优先函数,其等价于矩阵表,但存储量校 定义两个函数,其对应元素的值为优先值,通过循环比较各元素的两个值,每次将优先级大的值改为小的值+1,若相等则都赋为目前较大的值,循环直至结果没有变化,构造OK
⑦ C++问题:迭代法求x=a^(1/3),为什么调用函数pow(a,1/3)结果都是1如下为什么错
对于Pow函数只有
这些重载。
你得把第一个参数转换成以上所需要的类型。不同编译器要求不一样,可能是你编译器要求比较严格,我用codeblocks,像你那样用是不会报错的。
⑧ 计算机科学与技术《编译原理》求解题
1、错
2、对
3、错
4、对
5、错
6、对
7、对
8、对
9、对
10、错