① 編寫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、錯