gpt4 book ai didi

c++ - 行列式中的段错误(核心已转储)

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:46 24 4
gpt4 key购买 nike

<分区>

我在设置时在以下代码中遇到错误段错误(核心转储):

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;
}

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