我想知道怎么做一个stopping error 当用户输入0。001 的时候我的jacobi和gauss seidel 可以自动迭代到指定的数字位置。
#include
#include
#include
#include
using namespace std;
double max(float n[], float m[], int p) //这是我打算拿来算送代的误差的东西。
{
double max_ = abs(n[0] - m[0]);
for (int i = 1; i < p; i++)
if (abs(n[i] - m[i]) > max_)
max_ = abs(n[i] - m[i]);
return max_;
}
int main(void) {
float a[100][100], b[100], m[100], n[100], z[100], D[100];
int p = 0, q = 0, i = 0, j = 0, g = 0;
// read from text file
int c;
cout << "Enter the how many eqation you want to solve : "; // 你的matrix的大小 类似3x4
cin >> p;
cout << "enter 1 for open the text file, enter 2 for enter your matrix : ";//你想要选择你用file的东西还是输入你的matrix
cin >> c;
if (c ==1)// 打开文档读取数据
{
ifstream file;
file.open("input.txt");
for (i = 0; i < p; i++) {
for (j = 0; j < p; j++) {
file >> a[i][j];
cout << "a[" << i << ", " << j << " ]=" << a[i][j] << "\n";
}
}
cout << "\nvalues to the right side of equation\n";
for (i = 0; i < p; i++) {
file >> b[i];
cout << "b[" << i << ", " << j << " ]=" << b[i] << "\n";
}
cout << "\n";
file.close();
}
else if(c==2){// 手动输入自己的matrix// 你的左边的matrix
for (i = 0; i < p; i++) {
for (j = 0; j < p; j++) {
cout << "a[" << i << ", " << j << " ]=";
cin >> a[i][j];
}
}
cout << "\nEnter values to the right side of equation\n";
for (i = 0; i < p; i++) {
cout << "b[" << i << ", " << j << " ]=";
cin >> b[i];
}// 你的右边的数字。 类似你的答案。 向 3x-y+z= 4 。你的4就是你右边的数字
}
cout << "Enter initial values of gauss iteration\n";
for (i = 0; i < p; i++) {
cout << "x:[" << i << "]=";
cin >> m[i];
}//起始数字 guass seidel 的 送代起始点
cout << "Enter initial values of jocobi iteration\n";
for (i = 0; i < p; i++) {
cout << "x:[" << i << "]=";
cin >> z[i];
}//起始数字 jacobi 的 送代起始点
cout << "\nEnter the no. of gauss iteration :";
cin >> q;// 这是不需要的部分。 我现在想实现用户输入一个误差位置然后自动送代一直到用户输入的误差位置/超过50自动停止送代
cout << "\nEnter the no. of jacobi iteration :";
cin >> g;// 同上
cout << "\ngauss iteration \n";// 这下面是我的gauss seidel的送代方法
while (q > 0) {
for (i = 0; i < p; i++) {
n[i] = (b[i] / a[i][i]);
for (j = 0; j < p; j++) {
if (j == i)
continue;
n[i] = n[i] - ((a[i][j]) / a[i][i] * m[j]);
m[i] = n[i];
}
cout << "x" << i + 1 << "=" << n[i] << " ";
}
cout << "\n";
q--;
}
cout << "\njocobi iteration \n";
while (g > 0) {// 这下面是我的jacobi的送代方法
for (i = 0; i < p; i++) {
n[i] = (b[i] / a[i][i]);
for (j = 0; j < p; j++) {
if (j == i)
continue;
n[i] = n[i] - ((a[i][j]) / a[i][i] * z[j]);;
}
}
for (i = 0; i < p; i++) {
z[i] = n[i]; printf("x%d = %f ", i + 1, z[i]);
}
cout << "\n";
g--;
}
system("pause");
return 0;
}
现在没有报错,只是我没有办法把我的方程式(算误差的)放进我的公式里面。