计算方法 最小二乘法源代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二
#include "stdio.h"
float gs(float a[20][20],float b[20],int n )
{
int i,j,k,l;
float s;
k=1;
while(k!=n+1)
{
if(a[k][k]!=0)
{
for(i=k+1;i<=n+1;i++)
{
a[i][k]=a[i][k]/a[k][k];
{
printf("%f ",ct[i][j]);
if(j==m)
printf("\n");
}
//求a[][]
for(i=1;i<=n+1;i++)
for(j=1;j<=n+1;j++)
for(k=1;k<=m;k++)
a[i][j]+=ct[i][k]*c[k][j];
//输出a[][]
printf("a矩阵如下:\n");
for(i=1;i<=m;i++)
scanf("%f",&x[i]);
printf("输入y的测试数据%d个:\n",m);//输入y的测试数据m个
for(i=1;i<=m;i++)
scanf("%f",&y[i]);
for(i=1;i<=m;i++)//c矩阵第一列赋值为1
c[i][1]=1.0;
printf("a%d=%f ",i-1,b[i]);
printf("\n\n");
return 0;
}
float b[20]={0.0};//定义b矩阵
int i,j,k,m,n;
printf("输入所求函数的最高次数n:\n");//输入n(求线性的函数输入1。。)
scanf("%d",&n);
printf("输入测试数据的组数m:\n");//输入测试数据的组数
scanf("%d",&m);
printf("输入x的测试数据%d个:\n",m);//输入x的测试数据m个
printf("b矩阵如下:\n");
for(i=1;i<=n+1;i++)
printf("%f ",b[i]);
gs(a,b,n);//调用高斯函数求方程组的解
printf("\n\n");
printf("输出求得的函数的系数为:\n");
for(i=1;i<=n+1;i++)//输出求得的函数的系数
//求C[][]
for(j=2;j<=n+1;j++)
for(i=1;i<=m;i++)
c[i][j]=x[i]*c[i][j-1];
//输出C[][]
printf("C矩阵如下:\n");
for(i=1;i<=m;i++)
for(j=1;j<=n+1;j++)
{
printf("%f ",c[i][j]);
for(i=1;i<=n+1;i++)
for(j=1;j<=n+1;j++)
{
printf("%f Βιβλιοθήκη Baidu,a[i][j]);
if(j==n+1)
printf("\n");
}
//求b[]
for(i=1;i<=n+1;i++)
for(k=1;k<=m;k++)
b[i]+=ct[i][k]*y[k];
//输出b[]
b[i]=b[i]-a[i][k]*b[k];
for(j=k+1;j<=n+1;j++)
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<=n+1;l++)
s=s+a[k][l]*b[l];
b[k]=(b[k]-s)/a[k][k];
}
return 0;
}
int main()
{
float a[20][20]={0.0};//定义a矩阵
float c[20][20];//定义c矩阵
float ct[20][20];//定义ct矩阵
float x[20];//定义数组用于存放x的数据
float y[20];//定义数组用于存放y的数据
if(j==n+1)
printf("\n");
}
//求c的转置矩阵CT[][]
for(i=1;i<=m;i++)
for(j=1;j<=n+1;j++)
ct[j][i]=c[i][j];
//输出CT[][]
printf("CT矩阵如下:\n");
for(i=1;i<=n+1;i++)
for(j=1;j<=m;j++)
#include "stdio.h"
float gs(float a[20][20],float b[20],int n )
{
int i,j,k,l;
float s;
k=1;
while(k!=n+1)
{
if(a[k][k]!=0)
{
for(i=k+1;i<=n+1;i++)
{
a[i][k]=a[i][k]/a[k][k];
{
printf("%f ",ct[i][j]);
if(j==m)
printf("\n");
}
//求a[][]
for(i=1;i<=n+1;i++)
for(j=1;j<=n+1;j++)
for(k=1;k<=m;k++)
a[i][j]+=ct[i][k]*c[k][j];
//输出a[][]
printf("a矩阵如下:\n");
for(i=1;i<=m;i++)
scanf("%f",&x[i]);
printf("输入y的测试数据%d个:\n",m);//输入y的测试数据m个
for(i=1;i<=m;i++)
scanf("%f",&y[i]);
for(i=1;i<=m;i++)//c矩阵第一列赋值为1
c[i][1]=1.0;
printf("a%d=%f ",i-1,b[i]);
printf("\n\n");
return 0;
}
float b[20]={0.0};//定义b矩阵
int i,j,k,m,n;
printf("输入所求函数的最高次数n:\n");//输入n(求线性的函数输入1。。)
scanf("%d",&n);
printf("输入测试数据的组数m:\n");//输入测试数据的组数
scanf("%d",&m);
printf("输入x的测试数据%d个:\n",m);//输入x的测试数据m个
printf("b矩阵如下:\n");
for(i=1;i<=n+1;i++)
printf("%f ",b[i]);
gs(a,b,n);//调用高斯函数求方程组的解
printf("\n\n");
printf("输出求得的函数的系数为:\n");
for(i=1;i<=n+1;i++)//输出求得的函数的系数
//求C[][]
for(j=2;j<=n+1;j++)
for(i=1;i<=m;i++)
c[i][j]=x[i]*c[i][j-1];
//输出C[][]
printf("C矩阵如下:\n");
for(i=1;i<=m;i++)
for(j=1;j<=n+1;j++)
{
printf("%f ",c[i][j]);
for(i=1;i<=n+1;i++)
for(j=1;j<=n+1;j++)
{
printf("%f Βιβλιοθήκη Baidu,a[i][j]);
if(j==n+1)
printf("\n");
}
//求b[]
for(i=1;i<=n+1;i++)
for(k=1;k<=m;k++)
b[i]+=ct[i][k]*y[k];
//输出b[]
b[i]=b[i]-a[i][k]*b[k];
for(j=k+1;j<=n+1;j++)
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<=n+1;l++)
s=s+a[k][l]*b[l];
b[k]=(b[k]-s)/a[k][k];
}
return 0;
}
int main()
{
float a[20][20]={0.0};//定义a矩阵
float c[20][20];//定义c矩阵
float ct[20][20];//定义ct矩阵
float x[20];//定义数组用于存放x的数据
float y[20];//定义数组用于存放y的数据
if(j==n+1)
printf("\n");
}
//求c的转置矩阵CT[][]
for(i=1;i<=m;i++)
for(j=1;j<=n+1;j++)
ct[j][i]=c[i][j];
//输出CT[][]
printf("CT矩阵如下:\n");
for(i=1;i<=n+1;i++)
for(j=1;j<=m;j++)