资源简介
华电数值计算方法课本算法,包括列主元消去 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个文件信息
评论
共有 条评论