• 大小: 97KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-12-02
  • 语言: 其他
  • 标签:

资源简介

华电数值计算方法课本算法,包括列主元消去 LU分解 最小二乘法等九个算法

资源截图

代码片段和文件信息

#include
#include“windows.h“
#include
#include
//#include 
#include  
double aaa[15]b[16];
int gy(double a[15]int n);
void shuchu(double a[15]int n);
void shuru();
int zhengshu(double x)//这个函数的建立是为了使这个程序能够处理系数不是整数的方程组把任意位数的小数转换为整数,如0.004变为4。
{
int ij;
char ss[20]s[20];//这里没有采用将小数一直×10的方法是因为c语言对于浮点数的内存问题,对于三位以上小数进行的保留失真
gcvt(x8ss);//把浮点数转化为字符串,最多8位小数精度
int n=strlen(ss);
for( i=0j=0;i {
if(ss[i]!=‘.‘)
{
s[j]=ss[i];
j++;
}
}
s[n-1]=‘\0‘;
j=atoi(s);//把移除小数点后的字符串转化为整型数字
return j;
}
int gb(double adouble b)//求两个正整数的最小公倍数
{
int ija1b1;
a1=zhengshu(a);
b1=zhengshu(b);
for(i=a1;i {
if(i%a1==0&&i%b1==0)
break;
}
j=i/b;
return j;
}
void jisuan(double a[15][16]int n)//化简并计算矩阵这里没有采用书上的算法,因为书上的算法采用直接相除会产生一定的误差,这里采取手算的时候两行同乘到最小公倍数做差的方法计算;
{

double kmaxsaa[15];
int  ijNtgb1gb2pgy1;
N=n;
for(i=0;i {
if(a[i][0]<0)
{
for(j=0;j a[i][j]=-a[i][j];
}
}
for(t=0;t {
max=a[t][t];//从这一步开始是一个大循环找出第t列消元后的最大值
for(i=t;i {
//max=a[i][1];
if(max max=a[i][t];
}
for(i=t;i {
if(max==a[i][t])
{
for(j=0;j<=N;j++)
{
k=a[t][j];
a[t][j]=a[i][j];
a[i][j]=k;
}
break;//防止出现有两个相同最大数时的情况
}
}
for(i=t+1;i {
if(a[i][t]!=0)
{
gb1=gb(maxa[i][t]);//gb1等于第i行乘的倍数
gb2=gb(a[i][t]max);//gb2等于主元行乘的倍数
for(j=0;j<=N;j++)//置换第i行
{
a[i][j]=gb1*a[i][j]-gb2*a[t][j];
}
}
if(a[i][t]==0)
{
for(j=0;j<=N;j++)
a[i][j]=a[i][j];
}
if(a[i][t+1]<0)//保证第一个非零的数字是正数以确保gb函数有效
{
for(p=0;p<=N;p++)
{
a[i][p]=-a[i][p];
}
}
double aa[15];//从这一行开始对每一行进行化简除以最大公约数,这是为了防止出现高阶情况下不化简出现的数字过大进而溢出计算机无法处理的情况
for(j=0;j<=N;j++)
{
if(a[i][j]>0)
{
aa[j]=a[i][j];
}
else 
{
aa[j]=-a[i][j];
}
}
gy1=gy(aaN);//调用求公约数的函数,对每一行进行化简
for(j=0;j<=N;j++)
{
a[i][j]=a[i][j]/gy1;//对每一行进行化简除以最大公约数
}
}
}
for(i=0j=0;j<=N;j++)
{
if(a[i][j]>0)
{
aa[j]=a[i][j];
}
else 
{
aa[j]=-a[i][j];
}
}
gy1=gy(aaN);
for(j=0;j<=N;j++)
{
a[i][j]=a[i][j]/gy1;
}
cout<<“化简后的结果是:“;
for(i=0;i {
cout< for(j=0;j<=N;j++)
{
cout< }
}
cout< if(a[N-1][N-1]==0.0)//有待改进
{
cout<<“方程没有唯一确定的解“;
exit(0);
}
else
{
b[0]=a[N-1][N]*1.0/a[N-1][N-1];//求出最后一个解
for(j=1;j {
s=0.0;
for(i=0;i {
s=s+b[i]*a[N-1-j][N-1-i];
}
if(a[N-1-j][N-1-j]!=0)
b[j]=(a[N-1-j][N]-s)/a[N-1-j][N-1-j]*1.0;
else
{
cout<<“方程无解“< exit(0);
}
}
}
for(i=N-1;i>=0;i--)
{
cout<<“x“<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-08 11:31  数值\
     文件           9  2016-10-21 20:26  数值\in.txt
     文件          54  2016-10-18 20:24  数值\LU分解in.txt
     文件         443  2016-10-24 18:31  数值\LU分解out.txt
     文件           0  2016-10-05 11:01  数值\LU分解法.ASP
     文件        5158  2016-10-24 18:31  数值\LU分解法.CPP
     文件        3427  2016-10-24 18:30  数值\LU分解法.DSP
     文件         524  2016-10-24 18:31  数值\LU分解法.DSW
     文件       41984  2016-10-24 18:31  数值\LU分解法.ncb
     文件       48640  2016-10-24 18:31  数值\LU分解法.OPT
     文件         762  2016-10-24 18:31  数值\LU分解法.PLG
     文件          87  2016-10-24 18:57  数值\列主元in.txt
     文件          50  2016-10-21 09:03  数值\列主元in1.txt
     文件          75  2016-10-24 20:22  数值\列主元out.txt
     文件        5334  2016-10-24 20:22  数值\列主元消去.cpp
     文件        3451  2016-10-24 20:22  数值\列主元消去.dsp
     文件         528  2016-10-24 20:22  数值\列主元消去.dsw
     文件       33792  2016-10-24 20:22  数值\列主元消去.ncb
     文件       48640  2016-10-24 20:22  数值\列主元消去.opt
     文件         774  2016-10-24 20:22  数值\列主元消去.plg
     文件        3223  2016-10-09 12:52  数值\列主元消去法.cpp
     文件        3475  2016-10-21 18:42  数值\列主元消去法.dsp
     文件         532  2016-10-21 18:42  数值\列主元消去法.dsw
     文件        5162  2016-10-18 21:44  数值\列主元消去法.h
     文件       41984  2016-10-21 18:42  数值\列主元消去法.ncb
     文件       48640  2016-10-21 18:42  数值\列主元消去法.opt
     文件         898  2016-10-21 18:42  数值\列主元消去法.plg
     文件        5587  2016-11-27 18:24  数值\列主元第三版.cpp
     文件        3475  2016-11-27 18:20  数值\列主元第三版.dsp
     文件         532  2016-11-27 18:24  数值\列主元第三版.dsw
     文件       41984  2016-11-27 18:24  数值\列主元第三版.ncb
............此处省略72个文件信息

评论

共有 条评论

相关资源