gpt4 book ai didi

c++ - C++如何用雅可比法求解n个方程?

转载 作者:行者123 更新时间:2023-11-28 02:26:00 24 4
gpt4 key购买 nike

这段代码应该得到

  • 等式数 (n)
  • 矩阵a
  • 矩阵b
  • 作为输入的答案 (e) 的准确性

然后用Jacobi方法求出n个方程的答案。

我的代码:

     #include <cstdlib>
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std; // DEV software code for using 'cin' instead 'scanf'
int main()
{
int n,i,j,l=0;
cout<<"Enter number of Equations = ";
cin>>n;
double a[n-1][n-1],b[n-1][1],x[n-1][1],T[n-1][1],e,k;
cout<<"[a].[x]=[b]"<<endl;
cout<<"Enter Matrix a:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"a["<<i<<","<<j<<"] = ";
cin>>a[i][j];
}
cout<<"Enter Matrix b:"<<endl;
for(j=0;j<n;j++)
{
cout<<"b[0,"<<j<<"] = ";
cin>>b[0][j];
}
cout<<"Enter the Accuracy = ";
cin>>e;
for (i=0;i<n;i++)
T[i][0]=0;
while (l!=n)
{
l=0;
for (i=0;i<n;i++)
{
x[i][0]=(1/a[i][i])*(b[i][0]);
for (j=0;j<n;j++)
{
if (j!=i)
x[i][0]=x[i][0]-(1/a[i][i])*(a[i][j]*T[j][0]);
}
}
for(i=0;i<n;i++)
{
k=fabs(x[i][0]-T[i][0]);
if (k<=e)
{
l=l+1;
}
}
for (i=0;i<n;i++)
T[i][0]=x[i][0];
}
for (i=0;i<n;i++)
cout<<"x"<<i+1<<"="<<x[i][0]<<endl;
getch();
return 0;
}

例如:(例如)

     // Initializing variables
n=2
e=0.001
a[0,0]=4
a[0,1]=2
a[1,0]=1
a[1,1]=3
b[0,0]=1
b[1,0]=-1

答案应该是x1=0.5x2=-0.5。但是这段代码的输出是 x1=0.35x2=-0.45

有什么问题?

问候

最佳答案

您的数组看起来少了一行一列。您向用户询问 n 方程,但您只为 a、b、x、T 分配了 n-1 行和列。您对这些矩阵和 vector 的声明应该是 double a[n][n] 等。您当前正在数组边界之外写入,并且可能会覆盖另一个矩阵中的数据。

顺便说一句,当我应用我的修复时,我得到了正确的答案(0.5,-0.5)。

关于c++ - C++如何用雅可比法求解n个方程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com