计算实习报告怎么写?( 九 )


*(c+i*(n+2)+j)=0;
for(t=0;t*(c+i*(n+2)+j)+=power(i+j,x[t]);
}
*(c+i*(n+2)+n+1)=0;
for(j=0;j *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);}ColPivot(c,n+1,a);delete c; }
void ColPivot(float *c,int n,float x[]) {int i,j,t,k;float p;for(i=0;ik=i;
for(j=i+1;j if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
k=j;
if(k!=i)
for(j=i;j {
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j {
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t }}for(i=n-1;i>=0;i--){
for(j=n-1;j>=i+1;j--)
(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} }
float power(int i,float v) {float a=1;while(i--)a*=v;return a; } (2)实验结果
2、最小二乘拟合 (1)程序设计 #include #include void main() {int i,n;float a[2];float x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8},z[15];float y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15};for(n=0;n //增加了数组z;
{z[n]=log(y[n]/x[n]);}void Approx(float[],float[],int,int,float[]);Approx(x,z,15,1,a);
//变成一次拟合;
//for(i=0;i//printf("a[%d]=%f\\\\n",i,a[i]);printf("a=exp(a[0])=%f\\\\n",exp(a[0]));printf("b=-a[1]=%f\\\\n",-a[1]); } void Approx(float x[],float y[],int m,int n,float a[]) {int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;ifor(j=0;j{
*(c+i*(n+2)+j)=0;
for(t=0;t*(c+i*(n+2)+j)+=power(i+j,x[t]);
}
*(c+i*(n+2)+n+1)=0;
for(j=0;j *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);}ColPivot(c,n+1,a);delete c; }
void ColPivot(float *c,int n,float x[]) {int i,j,t,k;float p;for(i=0;ik=i;
for(j=i+1;j if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
k=j;
if(k!=i)
for(j=i;j {
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j {
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t }}for(i=n-1;i>=0;i--){
for(j=n-1;j>=i+1;j--)
(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} }
float power(int i,float v) {float a=1;while(i--)a*=v;return a; } (2)实验结果
四、总结
通过曲线拟合,最小二乘法的基本原理的学习,我学会了利用计算机解决现实实际问题中的曲线拟合 。
习题六:
6数值积分
一、实验目的
(1)通过实际计算体会各种方法的精确度; (2)会编写用龙贝格算法求定积分的程序 。
二、实验内容
编写复化柯特斯求积分公式,并计算例题1例题2,观察n为多少时有6位有效数字 。
三、程序设计、实验结果及分析 (1)程序设计 #include #include float Cotes(float(*f)(float),float a,float b,int n) {int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;kc1+=(*f)(a+k*h);
c2+=(*f)(a+k*h+h/4);
c3+=(*f)(a+k*h+h/2);
c4+=(*f)(a+k*h+3*h/4);}c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c; } float f(float x) {return 1/sqrt(1+x*x*x); } void main() {int i,n=4;float c;for(i=0;ic=Cotes(f,0,1,n);