数值分析 算法C语言程序
更新时间:2023-07-23 12:24:01 阅读量: 实用文档 文档下载
- 数值是什么意思推荐度:
- 相关推荐
数值分析 各个算法的C语言程序
一、 拉格朗日插值
#include<stdio.h> #include<stdlib.h> #include<math.h> void Lagrange(float s) {
double x[5]={0.2,0.4,0.6,0.8,1.0},y[5]={0.98,0.92,0.81,0.64,0.38},f,L=0; int i,j; for (i=0;i<5;i++) { f=1; for (j=0;j<5;j++) if(j!=i) f=(s-x[j])/(x[i]-x[j])*f; L+=f*y[i]; } printf("输出:%f\n",L); }
void main() { float x; printf("输入插值点:"); scanf("%f",&x); Lagrange(x);
}
二、 牛顿插值
#include<stdlib.h> #include<stdio.h> #include<math.h> int ND(float s) { double x[5]={0.2,0.4,0.6,0.8,1.0},y[5]={0.98,0.92,0.81,0.64,0.38},p=0,g,f; int i,j,k;
for (i=0;i<5;i++) {
for (j=4;j>i;j--) { f=x[j]-x[j-i-1];y[j]=(y[j]-y[j-1])/f;} g=y[i+1];
for (k=0;k<=i;k++) g=g*(s-x[k]); p=p+g; }
printf("输出插值点函数值:%f\n",p+y[0]); return 1; }
数值分析 各个算法的C语言程序
void main() { float x; printf("输入插值点:"); scanf("%f",&x); ND(x);
}
三、 埃尔米特插值
#include<stdio.h> #include<stdlib.h> #include<math.h> void Hermite(float s) { double x[3]={0.25,1,2.25},y[3]={0.125,1,3.375},z[3]={0.75,1.5,2.25}; double H=0.0,a,b,f,g; int i,j; for (i=0;i<3;i++) { f=1.0;g=0.0;
for (j=0;j<3&&j!=i;j++) {f=f*(s-x[j])/(x[i]-x[j]);g=g+1/(x[i]-x[j]);} a=(1-2*(s-x[i])*g)*f*f;b=(s-x[i])*f*f; H=H+y[i]*a+z[i]*b; }
printf("%f\n",H); }
void main() { float x; printf("输入插值点:"); scanf("%f",&x); Hermite(x);
}
四、 三次样条插值
#include <math.h> #include <stdio.h> #include <stdlib.h>
数值分析 各个算法的C语言程序
void main() {
int N=7,R=2,i,k; double p1,p2,p3,p4;
double x[8]={0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9};
double y[8]={0.4794,0.6442,0.7833,0.8912,0.9636,0.9975,0.9917,0.9463}; double P0=-0.4794,Pn=-0.9463,u[3]={0.6,0.8,1.2},s[3]; double h[7],a[8],c[7], g[8],af[8],ba[7],m[8]; for(k=0;k <N;k++) h[k]=x[k+1]-x[k];
for(k=1;k <N;k++) a[k]=h[k]/(h[k]+h[k-1]); for(k=1;k <N;k++) c[k]=1-a[k];
for(k=1;k <N;k++) g[k]=3*(c[k]*(y[k+1]-y[k])/h[k]+a[k]*(y[k]-y[k-1])/h[k-1]); c[0]=a[N]=1;
g[0]=3*(y[1]-y[0])/h[0]-P0*h[0]/2;
g[N]=3*(y[N]-y[N-1])/h[N-1]+Pn*h[N-1]/2; ba[0]=c[0]/2; g[0]=g[0]/2; for(i=1;i <N;i++)
{ af[i]=2-a[i]*ba[i-1]; g[i]=(g[i]-a[i]*g[i-1])/af[i]; ba[i]=c[i]/af[i]; } af[N]=2-a[N]*ba[N-1];
g[N]=(g[N]-a[N]*g[N-1])/af[N]; m[N]=g[N];
for(i=N-1;i>=0;i--) m[i]=g[i]-ba[i]*m[i+1]; for(i=0;i <=R;i++) { k=0;
while(u[i]> x[k+1])
k++;
p1=(h[k]+2*(u[i]-x[k])*pow((u[i]-x[k+1]),2)*y[k])/pow(h[k],3); p2=(h[k]-2*(u[i]-x[k+1])*pow((u[i]-x[k]),2)*y[k+1])/pow(h[k],3); p3=(u[i]-x[k])*pow((u[i]-x[k+1]),2)*m[k]/pow(h[k],2); p4=(u[i]-x[k+1])*pow((u[i]-x[k]),2)*m[k+1]/pow(h[k],2); s[i]=p1+p2+p3+p4; }
printf( "\nx= "); for(i=0;i <=N;i++) printf( "%8.1f ",x[i]); printf( "\ny= "); for(i=0;i <=N;i++) printf( "%8.4f ",y[i]); printf( "\n\nu= "); for(i=0;i <=R;i++) printf( "%9.2f ",u[i]);
printf( "\n插值点:s= "); for(i=0;i <=R;i++)
数值分析 各个算法的C语言程序
printf( "%9.5f ",s[i]); printf("\n");
}
五、 复合梯形公式
#include<stdio.h> #include<stdlib.h> #include<math.h>
double FTX(int n,float a,float b) { double f=0,t,h,*x,*y; int i; x=(double*)malloc((n+1)*sizeof(double)); y=(double*)malloc((n+1)*sizeof(double)); h=(b-a)/n;
for(i=0;i<n+1;i++) {x[i]=a+i*h;y[i]=sin(x[i]);} for(i=1;i<n;i++) f=f+2*y[i]; t=h/2*(y[0]+f+y[n]); printf("输出函数值:%f\n",t); return 1; }
void main() { float a,b; int n;
printf("输入区间上,下限:"); scanf("%f %f",&a,&b); printf("输入等分区间数:"); scanf("%d",&n); FTX(n,a,b);
}
六、 复合辛普森求积公式
数值分析 各个算法的C语言程序
#include<stdio.h> #include<stdlib.h> #include<math.h>
double FSP(int n,float a,float b) { double f1=0,f2=0,h,*x1,*y1,*x2,*y2; int i; x1=(double*)malloc((n+1)*sizeof(double)); y1=(double*)malloc((n+1)*sizeof(double)); x2=(double*)malloc(n*sizeof(double)); y2=(double*)malloc(n*sizeof(double)); h=(b-a)/n;
for(i=0;i<n+1;i++) {x1[i]=a+h*i;y1[i]=sin(x1[i])*x1[i];} for(i=0;i<n;i++) {x2[i]=x1[i]+h/2;y2[i]=sin(x2[i])*x2[i];} for(i=1;i<n;i++) f1=f1+2*y1[i]; for(i=0;i<n;i++) f2=f2+4*y2[i];
printf("输出函数值:%f\n",h/6*(y1[0]+f1+f2+y1[n])); return 1; }
void main() { float a,b; int n; printf("输入区间上,下限:"); scanf("%f %f",&a,&b); printf("输入等分区间数:"); scanf("%d",&n); FSP(n,a,b);
}
七、 直接三角分解法
#include<stdio.h> #include<stdlib.h> #include<math.h> void main() {double
A[3][3]={0.25,0.2,0.166667,0.3333,0.25,0.2,0.5,1,2},x[3],y[3],b[3]={9,8,8},L[3][3],U[3][3],f1=0,
数值分析 各个算法的C语言程序
f2=0; int i,j,k;
for(i=0;i<3;i++) for(j=0;j<3;j++)
{U[i][j]=0;L[i][j]=0;} for(i=0;i<3;i++)
{U[0][i]=A[0][i];L[i][0]=A[i][0]/U[0][0];L[i][i]=1;} for(i=1;i<3;i++) for(j=i;j<3;j++)
{for(k=0;k<=i-1;k++){f1=f1+L[i][k]*U[k][j];f2+=L[j][k]*U[k][i];} U[i][j]=A[i][j]-f1;L[j][i]=(A[j][i]-f2)/U[i][i];f1=0;f2=0;} y[0]=b[0];
for(i=1;i<3;i++)
{for(j=0;j<=i-1;j++) f1+=L[i][j]*y[j];y[i]=b[i]-f1;f1=0;} x[2]=y[2]/U[2][2]; for(i=1;i>=0;i--)
{for(j=i+1;j<3;j++) f2+=U[i][j]*x[j];x[i]=(y[i]-f2)/U[i][i];f2=0;} printf("输出L矩阵:\n"); for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%f ",L[i][j]); printf("\n");}
printf("输出U矩阵:\n"); for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%f ",U[i][j]); printf("\n");}
printf("输出求解结果:\n"); for(i=0;i<3;i++)
printf("%f ",x[i]); printf("\n");
}
八、 改进的平方法
#include<stdio.h>
数值分析 各个算法的C语言程序
#include<stdlib.h> #include<math.h> void main() {
double A[3][3]={2,-1,1,-1,-2,3,1,3,1},x[3],y[3],b[3]={4,5,6},d[3],L[3][3],U[3][3],f1=0,f2=0; int i,j,k,n=3; for(i=0;i<n;i++)
for(j=0;j<n;j++) {U[i][j]=0;L[i][j]=0;} d[0]=A[0][0];L[0][0]=1; for(i=1;i<n;i++) {
L[i][i]=1;
for(j=0;j<=i-1;j++) {for(k=0;k<=j-1;k++) f1+=U[i][k]*L[j][k];
U[i][j]=A[i][j]-f1;L[i][j]=U[i][j]/d[j];f2+=U[i][j]*L[i][j];f1=0;} d[i]=A[i][j]-f2;f2=0;} y[0]=b[0];
for(i=1;i<n;i++) {for(j=0;j<=i-1;j++) f1+=L[i][j]*y[j];y[i]=b[i]-f1;f1=0;} x[n-1]=y[n-1]/d[n-1];
for(i=n-2;i>=0;i--) {for(j=i+1;j<n;j++) f2+=L[j][i]*x[j];x[i]=y[i]/d[i]-f2;f2=0;} printf("输出L矩阵:\n"); for(i=0;i<n;i++)
{for(j=0;j<n;j++) printf("%f ",L[i][j]); printf("\n");} printf("输出U矩阵:\n"); for(i=0;i<n;i++)
{for(j=0;j<n;j++) printf("%f ",U[i][j]); printf("\n");} printf("输出求解结果:\n");
for(i=0;i<n;i++) printf("%f ",x[i]); printf("\n");
}
九、 追赶法
#include<stdio.h> #include<stdlib.h> #include<math.h> void main()
数值分析 各个算法的C语言程序
{
double A[5][5]={2,-1,0,0,0,-1,2,-1,0,0,0,-1,2,-1,0,0,0,-1,2,-1,0,0,0,-1,2},f[5]={1,0,0,0,0}; double x[5],y[5],U[5][5]; int i,j,n=5;
for(i=0;i<n;i++)
for(j=0;j<n;j++) U[i][j]=0; U[0][0]=U[n-1][n-1]=1; U[0][1]=A[0][1]/A[0][0]; for(i=1;i<n-1;i++)
{ U[i][i]=1;U[i][i+1]=A[i][i+1]/(A[i][i]-A[i][i-1]*U[i-1][i]);} y[0]=f[0]/A[0][0]; for(i=1;i<n;i++)
y[i]=(f[i]-A[i][i-1]*y[i-1])/(A[i][i]-A[i][i-1]*U[i-1][i]); x[n-1]=y[n-1];
for(i=n-2;i>=0;i--) x[i]=y[i]-U[i][i+1]*x[i+1]; printf("输出U矩阵:\n"); for(i=0;i<n;i++)
{ for(j=0;j<n;j++) printf("%f ",U[i][j]); printf("\n");} printf("输出求解结果:\n");
for(i=0;i<n;i++) printf("%f ",x[i]); printf("\n");
}
十、 雅可比迭代法
#include<stdio.h> #include<stdlib.h> #include<math.h> void main() {
double A[3][3]={5,2,1,-1,4,2,2,-3,10},x[50][3],b[3]={-12,20,3},f=0,L=1; int n=3,i,j,k=1;
for (i=0;i<3;i++) x[0][i]=0;/*初始值*/ while(L<0.003)
{
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
数值分析 各个算法的C语言程序
if(j!=i) f=f+A[i][j]*x[k-1][j]; x[k][i]=(b[i]-f)/A[i][i];} L=x[k][0]-x[k-1][0]; for(i=1;i<n;i++)
if((x[k][i]-x[k-1][i])/(x[k][i-1]-x[k-1][i-1])>1||(x[k][i]-x[k-1][i])/(x[k][i-1]-x[k-1][i-1])<-1) L=x[k][i]-x[k-1][i]; k++; }
printf("输出每次迭代求得的X值:\n"); for(i=1;i<k;i++) { printf("第%d次迭代:",i); for(j=0;j<n;j++)
printf("%f ",x[i][j]); printf("\n"); }
printf("\n输出迭代次数:%d\n",k-1);
}
十一、 高斯—塞德尔迭代法
#include<stdio.h> #include<stdlib.h> #include<math.h> void main() {
数值分析 各个算法的C语言程序
double A[3][3]={5,2,1,-1,4,2,2,-3,10},x[50][3],b[3]={-12,20,3},f1=0,f2=0,L=1; int i,j,k=1,n=3;
for (i=0;i<3;i++) x[0][i]=0; while(L>0.00001||L<-0.00001) {
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{if(j<i) f1+=A[i][j]*x[k][j];
else if(j>i) f2+=A[i][j]*x[k-1][j];} x[k][i]=(b[i]-f1-f2)/A[i][i];}
L=x[k][0]-x[k-1][0];
for(i=1;i<n;i++)
if((x[k][i]-x[k-1][i])/(x[k][i-1]-x[k-1][i-1])>1||(x[k][i]-x[k-1][i])/(x[k][i-1]-x[k-1][i-1])<-1) L=x[k][i]-x[k-1][i]; k++;
}
printf("输出迭代X矩阵:\n"); for(i=1;i<k;i++)
{for(j=0;j<n;j++) printf("%f ",x[i][j]); printf("\n");} printf("\n输出迭代次数:%d\n",k-1);
}
十二、 超松弛迭代法
#include<stdio.h> #include<stdlib.h> #include<math.h> void main() {
数值分析 各个算法的C语言程序
double A[3][3]={5,2,1,-1,4,2,2,-3,10},x[30][3],b[3]={-12,20,3},f1=0,f2=0,L=1,w=0.9; int i,j,k=1,n=3;
for(i=0;i<3;i++) x[0][i]=0; while(L>0.0001||L<-0.0001)
{
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{if(j<i) f1+=A[i][j]*x[k][j];
else if(j>i) f2+=A[i][j]*x[k-1][j];} x[k][i]=w*(b[i]-f1-f2)/A[i][i];} L=x[k][0]-x[k-1][0]; for(i=1;i<n;i++)
if((x[k][i]-x[k-1][i])/(x[k][i-1]-x[k-1][i-1])>1||(x[k][i]-x[k-1][i])/(x[k][i-1]-x[k-1][i-1])<-1) L=x[k][i]-x[k-1][i]; k++;
}
printf("输出迭代X矩阵:\n"); for(i=1;i<k;i++)
{for(j=0;j<n;j++) printf("%f ",x[i][j]); printf("\n");}
printf("\n输出迭代次数:%d\n",k-1);
}
数值分析 各个算法的C语言程序
数值分析算法程序
班级:计算08Q2班 姓名:甄彦福
正在阅读:
数值分析 算法C语言程序07-23
与“大叔”谈恋爱的七大好处02-27
《项目管理软件》实践考核报告09-25
在语文教学中巧妙地融入读写结合实践训练06-16
昆明理工大学课程设计 - 图文12-22
2022年新疆发声亮剑讲话发言稿(22篇优秀范文)07-31
我最喜欢的明星作文450字06-27
含羞草的奥秘作文400字06-15
学校“七五”普法工作总结12-03
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 语言程序
- 数值
- 算法
- 分析
- 食品化学考试 名词解释
- 教你慧眼识骗融资贷款骗局
- 金地_深圳龙岗豪宅项目发展策划及营销推广策略报告2010年112P
- DS4000系列操作指导书之串口连接DS4000的配置操作说明
- BES516-324-E4-C-03_接近开关
- 医院实习生管理规定
- 九年级物理全册 第十一章 多彩的物质世界《多彩的世界》单元总结基础测试 新人教版
- 常见饮料中防腐剂及其测定
- 成村学校纪律作风整顿自查自纠报告
- 塑造纤细手臂 塑造气质美女
- 浅谈数学试题的命制(zhy)
- 2013年经济法基础第七章考点汇总三
- 山东省农业农村经济发展
- 教师工作调动申请书(实用)
- 国内外关于用户创新的研究综述及未来展望
- COM编程入门(整理)
- 质量通病专项防治施工方案
- 低聚木糖生产可行性报告
- 2015-2022年中国光学玻璃制造行业分析及发展前景预测报告
- 二极管三极管测定