Я программирую метод Якобиса для задач на собственные значения в QM, и я только что начал c ++, я хочу использовать двойные указатели для построения матриц, но физическая проблема требует много кода.
Я не хочу загромождать мои main()
нечитаемыми строками (другие должны будут прочитать этот код ...) и поэтому хотел разделить проблему на подфункции. Я сделал функцию, которая принимает двойной указатель и возвращает матрицу, но почему я не могу получить к ней доступ вне функции? Мой код segfaults (отмечен ниже), когда я пытаюсь. Как создать матрицу вне main (), но при этом получить доступ к ней в main()
?
enter code her enter code here
int i, j, k;
//== BEGIN MAIN ==//
int main ()
{
//Constants and variables
double **A;
double epsilon = pow((double)10, double(-8)); //The convergence limit for jacobis method
int N = 10; //Dimension of matrix
char test[] = "test";
cout <<"The inner matrix function:"<<endl;
makematrix(N, A);
cout<<endl<<"The outer matrix function:"<<endl;
//This part segfaults
for(i=0; i<N; i++)
{
cout<<endl;
for(j=0; j<N; j++)
{
cout<<A[i][j]<<" ";
}
}
return 0;
}
//== END MAIN ==//
//==Begin function definitions==//
void makematrix(int N, double **A)
{
//Function for initializing our tridiagonal matrices for jacobis method
A = new double*[N];
for(i=0; i<N; i++)
{
A[i] = new double[N];
}
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
A[i][j] = 0;
}
}
//Prints the matrix declared here
for(i=0; i<N; i++)
{
cout<<endl;
for(j=0; j<N; j++)
{
cout<<A[i][j]<<" ";
}
}
cout <<endl;
return;
}