计算方法实验代码Word文档格式.docx
《计算方法实验代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算方法实验代码Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
{
p=1;
for(j=1;
j<
j++)
{
if(i!
=j)
p=p*(x-Lx[j])/(Lx[i]-Lx[j]);
}
y=y+p*Ly[i];
}
y=%f\n"
y);
//输入验证的x对应的y的值
}
实验二最小二乘法
#include"
stdio.h"
floatgs(floata[20][20],floatb[20],intn)
inti,j,k,l;
floats;
k=1;
while(k!
=n+1)
if(a[k][k]!
=0)
for(i=k+1;
=n+1;
{
a[i][k]=a[i][k]/a[k][k];
b[i]=b[i]-a[i][k]*b[k];
for(j=k+1;
a[i][j]=a[i][j]-a[i][k]*a[k][j];
}
k=k+1;
for(k=n+1;
k>
=1;
k--)
s=0;
for(l=k+1;
l<
l++)
s=s+a[k][l]*b[l];
b[k]=(b[k]-s)/a[k][k];
return0;
intmain()
floata[20][20]={0.0};
//定义a矩阵
floatc[20][20];
//定义c矩阵
floatct[20][20];
//定义ct矩阵
floatx[20];
//定义数组用于存放x的数据
floaty[20];
//定义数组用于存放y的数据
floatb[20]={0.0};
//定义b矩阵
inti,j,k,m,n;
输入所求函数的最高次数n:
\n"
//输入n(求线性的函数输入1。
。
)
输入测试数据的组数m:
//输入测试数据的组数
m);
输入x的测试数据%d个:
m);
//输入x的测试数据m个
=m;
x[i]);
输入y的测试数据%d个:
//输入y的测试数据m个
y[i]);
i++)//c矩阵第一列赋值为1
c[i][1]=1.0;
//求C[][]
for(j=2;
for(i=1;
c[i][j]=x[i]*c[i][j-1];
//输出C[][]
C矩阵如下:
for(j=1;
printf("
%f"
c[i][j]);
if(j==n+1)
//求c的转置矩阵CT[][]
ct[j][i]=c[i][j];
//输出CT[][]
CT矩阵如下:
ct[i][j]);
if(j==m)
//求a[][]
for(k=1;
k<
k++)
a[i][j]+=ct[i][k]*c[k][j];
//输出a[][]
a矩阵如下:
a[i][j]);
//求b[]
for(k=1;
b[i]+=ct[i][k]*y[k];
//输出b[]
b矩阵如下:
printf("
b[i]);
gs(a,b,n);
//调用高斯函数求方程组的解
\n\n"
输出求得的函数的系数为:
i++)//输出求得的函数的系数
a%d=%f"
i-1,b[i]);
实验三数值积分
1.定步长
floatf(floatx)
return4/(1+x*x);
inti,n;
floata,b,h,xi;
floatT=0.0;
inputa,b,n:
%f%f%d"
a,&
b,&
T=T+f(a)+f(b);
h=(b-a)/n;
xi=a;
=n-1;
xi=xi+h;
T=T+2*f(xi);
T=T*h/2;
求得的结果为:
%f\n"
T);
2.变步长
math.h"
doublef(doublex)
return4.0/(1+x*x);
intn=1,k=1;
doublea,b,T2n,Tn;
inputa,b:
%lf%lf"
b);
Tn=(f(a)+f(b))*(b-a)/2.0;
T2n=Tn/2.0+(b-a)/2.0*f(a+(b-a)/2.0);
T1=%lf\n"
Tn);
T2=%lf\n"
T2n);
while(fabs(T2n-Tn)>
=0.000001)
n=n*2;
Tn=T2n;
T2n=Tn/2.0;
T2n=T2n+f(a+(2*k-1)*(b-a)/(2*n))*(b-a)/(2*n);
T%d=%lf\n"
2*n,T2n);
\n满足条件的结果为:
%lf\n"
实验四常微分方程初值问题数值解法
1.欧拉法
doublef(doublexi,doubleyi){
return-yi;
intn;
doublea,b,y0;
inputa,b,n,y0:
%lf"
a);
y0);
doubleh=(b-a)/n;
doublexi=a;
doubleyi=y0;
xi\t欧拉格式yi\n"
%lf\t%lf\n"
xi,yi);
inti;
doublexi1,yi1;
xi1=xi+h;
yi1=yi+h*f(xi,yi);
xi=xi1;
yi=yi1;
2.改进欧拉法
xi\t改进的欧拉格式yi\n"
doublexi1,yi1,yp,yc;
yp=yi+h*f(xi,yi);
yc=yi+h*f(xi1,yp);
yi1=(1.0/2.0)*(yp+yc);
实验五非线性方程求解
returnpow(x,6)-x-1;
doublef_(doublex)
return6*pow(x,5)-1;
doublex0,x,eps;
inti,k,N;
请输入初始x0的值:
x0);
迭代次数:
N);
请输入误差e:
eps);
k\txk\n"
0\t%.8lf\n"
x0);
x=x0-f(x0)/f_(x0);
if(!
(f_(x0)==0))
=N;
%d\t%.8lf\n"
k,x);
if(fabs(x-x0)<
eps)
i=0;
break;
x0=x;
x=x0-f(x0)/f_(x0);
if(k>
N)
i=2;
else
i=1;
if(i==0)
\nx=%.8lf\n"
x);
f(x)=%.30lf\n"
f(x));
k=%d\n"
k);
elseif(i==1)
给定的x0导致计算中断!
!
elseif(i==2)
迭代N次后仍不满足精度要求!
实验六高斯消元
doubleA[10][10],b[10];
doublem[10];
doubleeps=0.000001;
inti,j,n,k,ik;
输入矩阵的阶数n:
输入矩阵A:
scanf("
A[i][j]);
输入矩阵b:
b[i]);
doublemax;
doubletemp;
for(k=1;
n;
max=0;
for(i=k;
if((max-fabs(A[i][k]))<
0)
max=A[i][k];
ik=i;
if(k!
=ik)
for(j=k;
temp=A[k][j];
A[k][j]=A[ik][j];
A[ik][j]=temp;
temp=b[k];
b[k]=b[ik];
b[ik]=temp;
for(i=k+1;
m[i]=A[i][k]/A[k][k];
A[i][j]=A[i][j]-A[k][j]*m[i];
for(j=k+1;
b[j]=b[j]-b[k]*m[j];
A上三角矩阵:
%12lf"
A[i][j]);
if(j==n)
printf("
b矩阵:
b[n]=b[n]/A[n][n];
for(i=n-1;
i>
i--)
for(j=n;
j>
i;
j--)
b[i]=(b[i]-A[i][j]*b[j]);
b[i]=b[i]/A[i][i];
\n求得得结果为:
x%d=%lf\t"
i,b[i]);