行列式中的分段错误(堆芯转储)
Segmentation fault (core dumped) in determinant
当我设置时,我在以下代码中得到错误段错误(核心转储(:
int et=pow(2,10)
或更多。事实上,我正在计算n*n矩阵行列式。对于CCD_ 1或更多,代码给出错误。我真的不知道该怎么做
这是我的代码:
#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;
}
vector<double> r_td(dimention); // dim 3 ---> et
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];
^^ pow(2,10) ??
相关文章:
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 从文件中读取的数据,但发生核心转储错误
- 为什么我的代码给我一个分段/核心转储错误?
- 堆栈粉碎中止<unknown>(核心转储)错误
- 如何避免出现分段核心转储错误?
- 执行 N >= 10^7 的代码时出现分段错误(核心转储)错误
- 将中缀转换为后缀并获取分段错误核心转储错误
- C++ Sqlite3 中,执行 2 个 sql 语句 - 第 2 条语句得到分段核心转储错误
- 运行时出现内存转储错误
- 合并灰色通道时分割核心转储错误
- 动态编程中的堆芯转储错误
- C++链表核心转储错误
- 为什么我的程序在运行后给出"segmentation fault"(核心转储)错误
- 如何修复ifstream的seg错误核心转储错误
- 从函数返回时发生堆芯转储错误
- 解析变量和分段错误(核心转储)错误
- 带有动态内存核心转储错误的自定义Deck类
- c++合并两个链表分段错误和核心转储错误
- 无法解决分段故障核心转储错误
- 找不到核心转储错误C++的原因