return0;
}
实验五Newton迭代法求根的算法实现
#include"stdio.h"
#include"math.h"
#definef(x)x*x*x-7.7*x*x+19.2*x-15.3
#defineg(x)3*x*x-15.4*x+19.2
voidmain()
{
inti,MAXSIZE;
doubleepsilon,x_k0,x_k1;
doublef0,f1;
printf("请输入控制精度:
");
scanf("%lf",&epsilon);
printf("\n请输入初始值:
");
scanf("%lf",&x_k0);
printf("\n请输入请输入最大迭代次数:
");
scanf("%d",&MAXSIZE);
for(i=1;i<=MAXSIZE;i++)
{
f0=f(x_k0);
f1=g(x_k0);
x_k1=x_k0-f0/f1;
printf("x_k1=%lf\n",x_k1);
if(fabs(x_k0-x_k1){
printf("输出满足给定精度的近似解x_k1=%lf\n",x_k1);
printf("算法结束!
!
!
\n");
return;
}
x_k0=x_k1;
}
printf("在初始值x_k0附近f(x)无根!
!
!
\n");
}
实验六Runge-Kutta方法的实现
#include
#include
#definef(x,y)(x/y)
voidmain()
{
inti,m;
doublexn,yn=1.0,yn1=0;
doublea,b,h;
doublek1,k2,k3,k4;
printf("请输入x的始末值:
\n");
scanf("%lf%lf",&a,&b);
printf("请输入m的值:
\n");
scanf("%d",&m);
h=(b-a)/m;
xn=a;
for(i=1;i<=m;i++)
{
k1=f(xn,yn);
k2=f((xn+h/2),(yn+h*k1/2));
k3=f((xn+h/2),(yn+h*k2/2));
k4=f((xn+h),(yn+h*k3));
yn1=yn+h/6*(k1+2*k2+2*k3+k4);
xn=xn+h;
printf("x%d=%lf,y%d=%lf\n",i,xn,i,yn1);
yn=yn1;
}
}
实验七用Gauss消元法解线性方程组
#include
voidmain()
{
inti,j,k;
doubles,t,x[4];
doublea[4][4]={7.2,2.3,-4.4,0.5,1.3,6.3,-3.5,2.8,5.6,0.9,8.1,-1.3,1.5,0.4,3.7,5.9},b[4]={15.1,1.8,16.6,36.9};
for(k=0;k<4;k++)
{
for(i=k+1;i<4;i++)
{
t=a[i][k]/a[k][k];
for(j=k+1;j<4;j++)
{
a[i][j]=a[i][j]-t*a[k][j];
}
b[i]=b[i]-t*b[k];
}
}
for(i=3;i>=0;i--)
{
s=b[i];
x[3]=b[3]/a[3][3];
for(j=i+1;j<4;j++)
{
s=s-a[i][j]*x[j];
x[i]=s/a[i][i];
}
}
for(i=0;i<4;i++)
cout<<"x["<
}
#include
/*voidmain()
{
inti,j,k;
doubles,t,x[4];
doublea[4][4]={7.2,2.3,-4.4,0.5,1.3,6.3,-3.5,2.8,5.6,0.9,8.1,-1.3,1.5,0.4,3.7,5.9},b[4]={15.1,1.8,16.6,36.9};
for(k=0;k<4;k++)
{
for(i=k+1;i<4;i++)
{
t=a[i][k]/a[k][k];
for(j=k+1;j<4;j++)
{
a[i][j]=a[i][j]-t*a[k][j];
}
b[i]=b[i]-t*b[k];
}
}
for(i=3;i>=0;i--)
{
s=b[i];
x[3]=b[3]/a[3][3];
for(j=i+1;j<4;j++)
{
s=s-a[i][j]*x[j];
x[i]=s/a[i][i];
}
}
for(i=0;i<4;i++)
cout<<"x["<
}*/
voidmain()
{
inti,j,k,r;
doublea[3][3]={2,1,2,-2,2,-1,2,4,6},b[3]={18,-39,24},c=0,d=0,e=0,f=0;
doubley[3],l[3][3],u[3][3],x[3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(il[i][j]=0;
if(i==j)
l[i][j]=1;
if(i>j)
u[i][j]=0;
}
for(k=0;k<3;k++)
{
for(j=k;j<3;j++)
{
for(r=1;rc+=l[k][r]*u[r][j];
u[k][j]=a[k][j]-c;
}
for(i=k+1;i<3;i++)
{
for(r=1;rd+=l[i][r]*u[r][k];
l[i][k]=(a[i][k]-d)/u[k][k];
}
for(i=0;i<3;i++)
cout<
}
/*for(i=0;i<3;i++)
{
for(j=0;j
e+=l[i][j]*y[j];
y[i]=b[i]-e;
}
for(i=2;i>=0;i--)
{
for(j=i+1;i<3;j++)
f+=u[i][j]*x[j];
x[i]=(y[i]-f)/u[i][i];
}*/
}
实验八用Jacobi迭代法解线性方程组
#include"stdafx.h"
#include"math.h"
#defineMAX128
intmain(intargc,char*argv[])
{
doublea[MAX][MAX];
doubleb[MAX];
intn,i,j;
doublex[MAX],m_x[MAX];
doubleh;
doubletemp=100.0;
printf("输入阶数:
");
scanf("%d",&n);
printf("\n输入精确到:
");
scanf("%lf",&h);
printf("\n输入系数:
\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%lf",&a[i][j]);
}
printf("\n输入常数列:
\n");
for(i=1;i<=n;i++)
{
scanf("%lf",&b[i]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
a[i][j]=-a[i][j]/a[i][i];
b[i]=b[i]/a[i][i];
a[i][i]=0;
}
for(i=1;i<=n;i++)
{
x[i]=0;
m_x[i]=1;
}
while(temp>h)
{
for(i=1;i<=n;i++)
{
x[i]=m_x[i];
m_x[i]=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
m_x[i]=m_x[i]+a[i][j]*x[i]+b[i];
}
}
temp=abs(m_x[1]-x[1]);
for(i=2;i<=n;i++)
{
if(abs(m_x[i]-x[i])>temp)
temp=abs(m_x[i]-x[i]);
}
}
for(i=1;i<=n;i++)
{
printf("\nx%d=%lf",i,m_x[i]);
}
return0;
}
实验九综合设计
实验一
实验名称:
男大学生的身高问题
实验目的:
有关统计资料表明,我国大学生男性群体的平均身高约为170cm,且该群体中约有99.7﹪的人身高在150cm至190cm之间。
如果将[150cm,190cm]等分成20个高度区间,试问该群体身高在每一高度区间的分布情况怎样?
特别地,身高中等(165cm至175cm之间)的人占该群体的百分比会超过60﹪吗?
实验步骤:
把大学生平均身高分布曲线作为正态分布进行计算,取步长为1,根据期望和方差的公式求解,最后确定身高中等的人会不会超过60%。
程序代码:
#include"stdio.h"
#include"math.h"
#include"string.h"
#definePI3.14159265
voidmain()
{
inti;
intu=170;//期望
doublea;//方差
a=20/3.0;
doublep[60]={0};
doubleb,c;
doubled=0;
b=1/sqrt(2*PI);
for(i=0;i<40;i++)
{
c=pow(i-19,2);
p[i]=b/a*exp((-c)/(2*a*a));
printf("%d到%d的概率是%f\t",i+150,i+151,p[i]);
if(i%2)
printf("\n");
}
for(i=15;i<25;i++)
{
d+=p[i];
}
printf("%f\n",d);
if(d>=0.6)
printf("身高中等的人超过60%\n");
else
printf("身高中等的人小于60%\n");
运行结果: