二分法
2.2 算法步骤
步骤 1: 准备 计算 f(x)在有根区间[a,b]端点处的值 f(a),f(b).
步骤 2: 二分 计算 f(x)在区间中点 (a+b)/2 处的值 f((a+b)/2).
步骤 3: 判断 若 f((a+b)/2)=0,则(a+b)/2 即是根,计算过程结束,否则检验;
若 f((a+b)/2)f(a)<0,则以(a+b)/2 代替 b,否则以(a+b)/2 代替 a.
反复执行步骤 2 和步骤 3,直到区间[a,b]的长度小于允许误差 e,此时中点(a+b)/2 即为所
求近似根。
2.3 程序流程图
开始
a,b,e
k=0
x0=(a+b)/2
f (a)f(x0)=c
N
Y
c<0
Y
c=0
x0=b
输出 x0,k
x0=b
STOP
N
k+1=k
b-a<=e
Y
输出 x0,k
STOP
3 实验结果分析
#include"stdio.h"
void main()
{
float a,b,e,x,c;
int k=0,n=1;
scanf("%f,%f,%f",&a,&b,&e);
while(n==1)
{
x=(a+b)/2;c=(x*x*x-x-1)*(a*a*a-a-1);
if(c<0)
{
b=x;
if(b-a<=e)
{
printf("%f,%d\n",x,k);
break;}
else k++;}
else
{
if(c==0)
{
printf("%f,%d\n",x,k);
break;}
else
{
a=x;
if(b-a<=e)
{
printf("%f,%d\n",x,k);
break;}
else k++;
}}}}
高斯塞德尔迭代法求方程组解
高斯主元素消去法求方程组解
2.2 算法步骤
高斯塞德尔迭代法:
步骤 1:给定初值
)0(
x
1
,
x
)0(
2
,...,
)0(
nx
1
,精度,最大容许迭代次数 M,令 k=1。
x
)1(
i
(
x
)1(
i
xa
ij
)0(
j
).
a
ii
n
1
0
j
j
)0(
i
步骤 2:对 i=1,2,…,n 依此计算
x
e
i
x
)1(
i
)1(
x
i
x
)0(
i
步骤 3:求出 e=
}{max1
e
i
ni
,若 e<,则输出 )0(
ix
(i=1,2,..,n ),停止计算。否则执行步
步骤 4:若 k
步骤 3:如果
kika , =0,则 det 0,计算停止。
步骤 4:若
ik ,转步骤 5,否则换行:
k
a
kj
a
ik
(,,
j
j
,
kk
,...1
),
bn
k
b
ik
,
det
det
步骤 5:计算乘数 ikm ,
a
ik
m
ik
a
ik
/
a
kk
(i=k_1,…,n)
a
ij
b
i
步骤 6:消元计算
步骤 7:det
kka det;
ama
ij
ik
kj
(,
ibmb
i
ik
i
,(,
i
j
k
k
,...,1
n
)
,...,1
)
n
步骤 8:若
nna
,0
det
0
计算停止。否则
det
nna
det
b
n
/
ab
n
nn
a
(
ij
步骤 9:回代求解
b
i
2.3 程序流程图
n
)
aba
ij
1
i
j
j
(i=n-1,…,1)
ii
高斯塞德尔迭代法:
开始
输 入
ija ,
ib ,
ix 及
k=1,M,1
0->e
i=1,n,1
(
b
i
i
1
j
1
xa
ij
j
n
xa
ij
1
i
j
/)
a
ij
j
,
xx
i
i
t
y
xi
t
e
xi
t
e
i
e<
k
y
n
输 出 迭 代 失 败
结束
输出
, 2
xx
1
,...,
nx
高斯主元素消去法:
开始
输入系数矩阵 A 常数项 b 及
det<-1
k=1,n-1,1
调选列主元子程序
i=k+1,n,1
a
ik
a
ij
a
ik
/
a
kk
j=k+1,n,1
a
ik
a
ij
a
ik
/
a
kj
j
b
i
b
i
ba
ik
k
i
det
kka det
k
①
消
元
过
程
①
b
n
/
ab
n
m
i=n-1,1,-1
S<-0
j=i+1,n,1
s
s
ijba
j
j
ib
(
ib -s)/
ija
i
det
nna det
输出 b 及 det
结束
3 实验结果分析
高斯塞德尔迭代法:
回
代
过
程