📄 died.cpp
字号:
#include "DieD.h"
#include <iostream.h>
bool Jacobi(
double* equal,//方程得系数指针
int n,//方程得维数
double e,//迭代精度
int d,//迭代次数
double *y
)
{
int i,j;
double **a; //将外部的方程系数读入该函数的数组a[n][n],b[n]
//分配数组空间
a=new double*[n];
for(i=0;i<n;i++)
{
a[i]=new double[n];
}
double *b=new double[n];
//读取数组值
double *xx=equal;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=*xx;
xx++;
}
b[i]=*xx;
xx++;
}
cout<<"输入的方程矩阵形式为:\n";
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<b[i];
cout<<"\n";
}
//定义未知数空间
double *x;
double *yy=y;
x=new double[n];
for(i=0;i<n;i++)
{
x[i]=*yy;
yy++;
}
//迭代
int l;
double u=0;
double *temp;
double sum;
temp=new double[n];
for(l=0;l<d;l++)
{
//保存x[i]
for(i=0;i<n;i++)
{
temp[i]=x[i];
}
//计算新的x[i]
for(i=0;i<n;i++)
{
sum=0;
for(int j=0;j<n;j++)
{
sum+=a[i][j]*temp[j];
}
sum-=a[i][i]*x[i];
x[i]=(b[i]-sum)/a[i][i];
}
//求出现在的评价标准u,即新旧x[i]相差最大的绝对值
u=0;
for(i=0;i<n;i++)
{
temp[i]=(temp[i]-x[i]>=0?temp[i]-x[i]:x[i]-temp[i]);
}
for(i=0;i<n;i++)
{
if(temp[i]>u)
u=temp[i];
}
//与要求精度比较,达到则停止并输出
if(u<=e)
{
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
delete [n]x;
delete [n]b;
delete [n]temp;
for(i=0;i<n;i++)
{
delete [n]a[i];
}
delete [n]a;
return true;
}
}
cout<<"不可以得到满意结果\n";
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
delete [n]x;
delete [n]b;
delete [n]temp;
for(i=0;i<n;i++)
{
delete [n]a[i];
}
delete [n]a;
return false;
}
bool Gauss(double* equal,//方程得系数指针
int n,//方程得维数
double e,//迭代精度
int d,//迭代次数
double *y
)
{
int i,j;
double **a; //将外部的方程系数读入该函数的数组a[n][n],b[n]
//分配数组空间
a=new double*[n];
for(i=0;i<n;i++)
{
a[i]=new double[n];
}
double *b=new double[n];
//读取数组值
double *xx=equal;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=*xx;
xx++;
}
b[i]=*xx;
xx++;
}
cout<<"输入的方程矩阵形式为:\n";
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<b[i];
cout<<"\n";
}
//定义未知数空间
double *x;
x=new double[n];
for(i=0;i<n;i++)
{
x[i]=*y;
y++;
}
//迭代
int l;
double u=0;
double *temp;
double sum;
temp=new double[n];
for(l=0;l<d;l++)
{
//保存x[i]
for(i=0;i<n;i++)
{
temp[i]=x[i];
}
//计算新的x[i]
for(i=0;i<n;i++)
{
sum=0;
for(int j=0;j<n;j++)
{
sum+=a[i][j]*x[j];
}
sum-=a[i][i]*x[i];
x[i]=(b[i]-sum)/a[i][i];
}
//求出现在的评价标准u,即新旧x[i]相差最大的绝对值
u=0;
for(i=0;i<n;i++)
{
temp[i]=(temp[i]-x[i]>=0?temp[i]-x[i]:x[i]-temp[i]);
}
for(i=0;i<n;i++)
{
if(temp[i]>u)
u=temp[i];
}
//与要求精度比较,达到则停止并输出
if(u<=e)
{
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
delete [n]x;
delete [n]b;
delete [n]temp;
for(i=0;i<n;i++)
{
delete [n]a[i];
}
delete [n]a;
return true;
}
}
cout<<"不可以得到满意结果\n";
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
delete [n]x;
delete [n]b;
delete [n]temp;
for(i=0;i<n;i++)
{
delete [n]a[i];
}
delete [n]a;
return false;
}
bool Songc(double* equal,//方程得系数指针
int n,//方程得维数
double e,//迭代精度
int d,//迭代次数
double * y,
double w//松弛因子
)
{
int i,j;
double **a; //将外部的方程系数读入该函数的数组a[n][n],b[n]
//分配数组空间
a=new double*[n];
for(i=0;i<n;i++)
{
a[i]=new double[n];
}
double *b=new double[n];
//读取数组值
double *xx=equal;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=*xx;
xx++;
}
b[i]=*xx;
xx++;
}
cout<<"输入的方程矩阵形式为:\n";
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<b[i];
cout<<"\n";
}
//定义未知数空间
double *x;
x=new double[n];
for(i=0;i<n;i++)
{
x[i]=*y;
y++;
}
//迭代
int l;
double u=0;
double *temp;
double sum;
temp=new double[n];
for(l=0;l<d;l++)
{
//保存x[i]
for(i=0;i<n;i++)
{
temp[i]=x[i];
}
//计算新的x[i]
for(i=0;i<n;i++)
{
sum=0;
for(int j=0;j<n;j++)
{
sum+=a[i][j]*x[j];
}
sum-=a[i][i]*x[i];
x[i]=(b[i]-sum)/a[i][i];
x[i]=temp[i]+(x[i]-temp[i])*w;
}
//求出现在的评价标准u,即新旧x[i]相差最大的绝对值
u=0;
for(i=0;i<n;i++)
{
temp[i]=(temp[i]-x[i]>=0?temp[i]-x[i]:x[i]-temp[i]);
}
for(i=0;i<n;i++)
{
if(temp[i]>u)
u=temp[i];
}
//与要求精度比较,达到则停止并输出
if(u<=e)
{
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
delete [n]x;
delete [n]b;
delete [n]temp;
for(i=0;i<n;i++)
{
delete [n]a[i];
}
delete [n]a;
return true;
}
}
cout<<"不可以得到满意结果\n";
for(i=0;i<n;i++)
{
cout<<x[i]<<" ";
}
delete [n]x;
delete [n]b;
delete [n]temp;
for(i=0;i<n;i++)
{
delete [n]a[i];
}
delete [n]a;
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -