数值分析中的各种公式C 代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二分法
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 程序流程图
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(1)0(2)0(1,...,,n x x x ,精度ε,最大容许迭代次数M,令k=1。
步骤2:对 i=1,2,…,n 依此计算)
0()1()
0()
1(01)0()1()
1().(i i i
i i ii
n
j j j ij i
i
x x x x e a x a x
x
→-=-=∑≠=
步骤3:求出 e=
}{max 1i n
i e ≤≤,若 e<ε,则输出 )
0(i x (i=1,2,..,n ),停止计算。否则执行步 步骤4:若k 高斯主元素消去法: 步骤1:det ←1,k=1,2,…,n-1,从第2步做到第7步; 步骤2: 按列主元素ik k ik a a n i k ,max ≤≤= 步骤3:如果 k ik a ,=0,则 det ←0,计算停止。 步骤4:若 k i k =,转步骤5,否则换行: det det ,),,...1,(,,←↔+=↔ik k j ik kj b b n k k j a a 步骤5:计算乘数ik m , kk ik ik ik a a m a /=← (i=k_1,…,n) 步骤6:消元计算 ) ,...,1(,),...,1,(,n k i b m b b n k j i a m a a i ik i i kj ik ij ij +=-←+=-← 步骤7:det kk a ←det; 步骤8:若 0det ,0←=nn a 计算停止。否则 det det nn a ← 步骤9:回代求解 ii j n i j ij ij i nn n n a b a a b a b b )(/1 ∑+=- ←← (i=n-1, (1) 2.3 程序流程图 3 实验结果分析高斯塞德尔迭代法: 高斯主元素消去法: 高斯塞德尔迭代法: #include #include #include #define M 10 int n; void Gauss_seidel(double x[],double x0[],double a[][M],double b[],double eps,int Nmax) { int i,j,s=0; double max; while(s { for(i=0;i { x[i]=b[i]; for(j=0;j if(j!=i) x[i]=x[i]-a[i][j]*x[j]; x[i]=x[i]/a[i][i]; } max=fabs(x[0]-x0[0]); for(i=1;i if(fabs(x[i]-x0[i])>max) max=fabs(x[i]-x0[i]); if(max break; for(i=0;i x0[i]=x[i]; s++; } if(s>=Nmax) cout<<"迭代发散!\n"< else { cout<<"原方程组的解为:\n"< for(i=0;i printf("X%d=%f\n",i+1,x[i]); } } void main() { double a[10][10]={{5,2,1},{-1,4,2},{2,-3,10}}; double b[10]={-12,20,3}; double x[10],x01[10]; double eps;// 精度 int i,j,s=0,Nmax; cout<<"方程组系数矩阵:"< n=3; for(i=0;i { for(j=0;j cout< cout< } cout<<"输入初始向量:"<