数值分析中的各种公式C 代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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//控制输入的格式,如下边setw(6),1.234567控制了小数点后六位#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<<"输入初始向量:"<

相关文档
最新文档