计算方法实验代码Word文档格式.docx

上传人:b****3 文档编号:17346977 上传时间:2022-12-01 格式:DOCX 页数:14 大小:16.87KB
下载 相关 举报
计算方法实验代码Word文档格式.docx_第1页
第1页 / 共14页
计算方法实验代码Word文档格式.docx_第2页
第2页 / 共14页
计算方法实验代码Word文档格式.docx_第3页
第3页 / 共14页
计算方法实验代码Word文档格式.docx_第4页
第4页 / 共14页
计算方法实验代码Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

计算方法实验代码Word文档格式.docx

《计算方法实验代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算方法实验代码Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

计算方法实验代码Word文档格式.docx

{

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]);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1