没有合适的资源?快使用搜索试试~ 我知道了~
数值分析部分算法C语言版
需积分: 14 8 下载量 157 浏览量
2011-11-30
22:40:35
上传
评论 1
收藏 291KB DOC 举报
温馨提示
试读
26页
自己写的小程序,比较毛糙,希望对你有所帮助。 其中含有gauss消去法,列主元素消去法,doolittle分解法,平方根分解法, 追赶法,Jacobi迭代法,Gauss_Seidel迭代法,SOR迭代法,Romberg求积法,复合梯形、simpose、cotes求积法。
资源推荐
资源详情
资源评论
1,gauss 消去法。
程序如下:
#include<stdio.h>
#include<math.h>
#define n 3
void gauss(double A[n][n],double B[n],double C[n][n+1][n],double U[n][n],double f[n]);//gauss 消
元
void huidai(double U[n][n],double f[n],double x[n]);//回代求解
void main()
{
printf(" ***该程序使用 gauss 消元法求方程组的解***");
double A[n][n],B[n],C[n][n+1][n],U[n][n],f[n],x[n];
int i,j;
printf("请输入系数矩阵 A:");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%lf",&A[i][j]);
printf("请输入 B 矩阵:");
for(i=0;i<n;i++)
scanf("%lf",&B[i]);
gauss(A,B,C,U,f);
huidai(U,f,x);
printf("该方程组的解为:");
for(i=0;i<n;i++)
printf("x%d=%-12.6lf",i+1,x[i]);
}
void gauss(double A[n][n],double B[n],double C[n][n+1][n],double U[n][n],double f[n])//gauss 消
元
{
int i,j,k;
double temp;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n+1;j++) //初始化为 0
C[i][j][k]=0;
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
{
if(j==n) C[i][n][0]=B[i];//讲 A,B 矩阵合二为一
else C[i][j][0]=A[i][j];
}
for(k=1;k<=n-1;k++)
{
if(C[k-1][k-1][k-1]==0)//第 k 步 a[k][k]=0 的情况处理
{
for(i=k+1;i<=n;i++)
if(C[i-1][k-1][k-1]!=0)//找到了 a[i][k]!=0
{
for(j=k;j<=n+1;j++) //将 a[i][k]与 a[k][k]所对应的行互换
{
temp=C[k-1][j-1][k-1];
C[k-1][j-1][k-1]=C[i-1][j-1][k-1];
C[i-1][j-1][k-1]=temp;
}
}
}
for(j=k+1;j<=n+1;j++)//进行顺序消元
for(i=k+1;i<=n;i++)
C[i-1][j-1][k]=C[i-1][j-1][k-1]-(C[i-1][k-1][k-1]/C[k-1][k-1][k-1])*C[k-1][j-1][k-
1];
}
for(i=0;i<n;i++)
for(j=0;j<n;j++) //初始化为 0
U[i][j]=0;
for(i=1;i<=n;i++)
for(j=i;j<=n+1;j++)
{
if(j==n+1) f[i-1]=C[i-1][n][i-1];
else U[i-1][j-1]=C[i-1][j-1][i-1];
}
printf("消元后对应的增广矩阵为:\n");//打印消元后的增广矩阵
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%12.6lf",U[i][j]);
printf("%12.6lf",f[i]);
printf("\n");
}
}
void huidai(double U[n][n],double f[n],double x[n])//回代求解
{
int k,j;
double sum;
for(k=n;k>=1;k--)
{
for(j=k+1,sum=0;j<=n;j++)
sum=sum+U[k-1][j-1]*x[j-1];
x[k-1]=(f[k-1]-sum)/U[k-1][k-1];
}
}
调式如图:
2,列主元素消去法:
程序如下:
#include<stdio.h>
#include<math.h>
#define n 3 //矩阵的大小或未知元个数
void gauss(double A[n][n],double B[n],double C[n][n+1][n],double U[n][n],double f[n]);//gauss 消
元
void huidai(double U[n][n],double f[n],double x[n]);//回代求解
void main()
{
printf(" ***该程序使用列主元素消去法求方程组的解***\n\n\n");
double A[n][n],B[n],C[n][n+1][n],U[n][n],f[n],x[n];
int i,j;
printf("请输入系数矩阵 A:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%lf",&A[i][j]);
printf("请输入 B 矩阵:\n");
for(i=0;i<n;i++)
scanf("%lf",&B[i]);
gauss(A,B,C,U,f);
huidai(U,f,x);
printf("该方程组的解为:\n");
for(i=0;i<n;i++)
printf("x%d=%-12.6lf\n",i+1,x[i]);
}
void gauss(double A[n][n],double B[n],double C[n][n+1][n],double U[n][n],double f[n])//gauss 消
元
{
int i,j,k,m;
double temp,max;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n+1;j++) //初始化为 0
C[i][j][k]=0;
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
{
if(j==n) C[i][n][0]=B[i];//将 A,B 初步合成增广矩阵 C
else C[i][j][0]=A[i][j];
}
for(k=1;k<=n-1;k++)
{
for(max=fabs(C[k-1][k-1][k-1]),m=k,i=k+1;i<=n;i++)//查找第 K 列绝对值最大元素,
用 m 返回其行序数
if(max<fabs(C[i-1][k-1][k-1]))
{
max=fabs(C[i-1][k-1][k-1]);
m=i;
}
for(j=k;j<=n+1;j++) //将 a[m][k]与 a[k][k]所对应的行互换
{
temp=C[k-1][j-1][k-1];
C[k-1][j-1][k-1]=C[m-1][j-1][k-1];
C[m-1][j-1][k-1]=temp;
}
for(j=k+1;j<=n+1;j++)//进行顺序消元
for(i=k+1;i<=n;i++)
{
C[i-1][j-1][k]=C[i-1][j-1][k-1]-(C[i-1][k-1][k-1]/C[k-1][k-1][k-1])*C[k-1][j-1][k-
1];
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++) //初始化为 0
U[i][j]=0;
for(i=1;i<=n;i++)
for(j=i;j<=n+1;j++)
{
if(j==n+1) f[i-1]=C[i-1][n][i-1];
else U[i-1][j-1]=C[i-1][j-1][i-1];
}
printf("消元后对应的增广矩阵为:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%12.6lf",U[i][j]);
printf("%12.6lf",f[i]);
printf("\n");
}
}
void huidai(double U[n][n],double f[n],double x[n])//回代求解
{
int k,j;
double sum;
for(k=n;k>=1;k--)
{
for(j=k+1,sum=0;j<=n;j++)
剩余25页未读,继续阅读
资源评论
limtianle
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于STM32使用HAL库实现USB组合设备之多路CDC源码+说明文档.zip
- 金融贸易项目springboot
- mybatis动态sqlSQL 映射 XML 文件是所有 sql 语句
- 基于基于STM32的智能家居系统源码+qt上位机源码.zip
- 深圳房地产资源数据报告
- 基于stm32的智能门禁系统源码+设计文档+演示视频.zip
- cef + chromium 完整源码支持h265和h264
- 基于SpringBoot的API管理平台源代码+数据库,以项目的形式管理API文档,可以进行API的编辑、测试、Mock等操作
- protobuf 3.11版本,静态编译
- 2023NOC创客智慧编程赛项真题图形化-选拔赛(有解析)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功