gpt4 book ai didi

c++ - 高斯-塞德尔法求解非线性方程

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

[已解决,谢谢] 我在 C++ 中开发了下面的代码来使用高斯-塞德尔方法求解线性方程,但我似乎在填充数组时在运行时遇到了一个我无法弄清楚的问题。这是我的代码...

#include<stdio.h>
int main(void)
{
float a[10][10],b[10],x[10],y[10];
int n=0,m=0,i=0,j=0;
printf("Enter size of 2d array(Square matrix) : ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Enter values no. %d %d :",i,j);
scanf("%f",&a[i][j]);
}
}
printf("\nEnter Values to the right side of equation\n");
for(i=0;i<n;i++)
{
printf("Enter values no. %d :",i,j);
scanf("%f",&b[i]);
}
printf("Enter initial values of x\n");
for(i=0;i<n;i++)
{
printf("Enter values no. %d :",i);
scanf("%f",&x[i]);
}
printf("\nEnter the no. of iteration : " );
scanf("%d",&m);
while(m>0)
{
for(i=0;i<n;i++)
{
y[i]=(b[i]/a[i][i]);
for(j=0;j<n;j++)
{
if(j==i)
continue;
y[i]=y[i]-((a[i][j]/a[i][i])*x[j]);
x[i]=y[i];
}
printf("x%d = %f ",i+1,y[i]);
}
printf("\n\n");
m--;
}
return 0;

最佳答案

您没有为 EquationHolder 分配第二个维度.由于是二维矩阵,因此您还必须分配第二个维度。改变你的双for循环到以下内容:

float ** EquationHolder=new float *[3];
for (int i=0; i<NumEquations; i++)
{
EquationHolder[i] = new float[3];
cout<<"Please Enter The Information Of Equation ("<<i+1<<")...\n";
for (int j=0; j<NumEquations; j++)
{
cout<<"X"<<j+1<<": ";
cin>>EquationHolder[i][j];
}
}

但是我建议使用 std::vector<std::vector<double>>而不是 C 原始数组,它更安全。

关于c++ - 高斯-塞德尔法求解非线性方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302113/

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