<分区>
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,
visit the help center .
关闭
10 年前 。
我在设置时在以下代码中遇到错误段错误(核心转储):
int et=pow(2,10)
或更多。事实上,我正在计算 n*n 矩阵行列式。对于 n=pow(2,10)
或更多代码给出错误。我真的不知道该怎么办
这是我的代码:
#include <cfloat> #include <iostream> #include <sstream> #include <stdio.h> #include <vector> #include <cmath> #include <stdlib.h> #include <time.h> #include <iomanip> using namespace std; int dimention = 3; int et = pow(2,9);
在上面,当我输入 et= pow(2, 10)
或更多时,它给出了错误。
int N = 1 ; vector< vector< vector<double> > > r; //random function double unifRand(){ double X=((double)rand()/(double)RAND_MAX); // creating random between 0 1 return X; } void seed(){ srand(time(0)); //initializing random } void initialize(){ seed(); r.clear(); for (int n=0; n<N; n++){ vector < vector<double> > exyz; for (int e=0; e<et; e++){ vector < double > xyz; for (int d=0; d<dimention; d++) xyz.push_back(unifRand()-0.5); exyz.push_back(xyz); } r.push_back(exyz); } } void Det(vector<double>& r_et ){ vector< vector<double> > Psi; for(int i=0; i<et; i++){ vector<double> Psie; for (int e=0; e<et; e++){ double Ps= -2*r_et[e]+(r_et[e]-r_et[i]); double Pse = exp(Ps); Psie.push_back(Pse); } Psi.push_back(Psie); } /* Transform matrix into upper triangular */ int counti = 0; double temp=0; for(int i = 0; i < et - 1 ; i++){ /* Elementary Row Operation I */ if(Psi[i][i] == 0.0){ for(int k = i; k < et; k++){ if(Psi[k][i] != 0.0){ for(int j = 0; j < et; j++){ temp = Psi[i][j]; Psi[i][j] = Psi[k][j]; Psi[k][j] = temp; } k = et; } } counti++; } /* Elementary Row Operation III */ if(Psi[i][i] != 0.0){ for(int k = i + 1; k < et; k++){ // k is the row number for(int j = i; j < et; j++){ double factor = Psi[i][j] / Psi[i][i]; if (factor < (10^-10)){ factor = 1; } Psi[k][j] = Psi[k][j] + (-1.0 * Psi[k][i]*(Psi[i][j] / Psi[i][i]) ); } } } } /* Display upper triangular matrix */ /* Calculate determinant */ double temp2=1; for(int i = 0; i < et; i++){ temp2 *= Psi[i][i]; // cout << Psi[i][i]; } /* Modify determinant */ cout<<"\nDeterminant:\n"; if(counti % 2 == 0){ cout<<endl<<" "<<temp2<<endl<<endl; }else{ cout<<endl<<" "<<-1*temp2<<endl<<endl; } } //compute trial wave function void step(int w){ //make a trial move of each electron vector<double> r_td(dimention); for (int ee=0; ee<et; ee++){ for (int dd=0; dd<dimention; dd++){ r_td[ee] += r[w][ee][dd]*r[w][ee][dd]; } r_td[ee]=sqrt(r_td[ee]); } Det(r_td); } int main(){ initialize(); for (int n=0; n<N; n++) step(n); return 0; }
我是一名优秀的程序员,十分优秀!