![]() |
| ||
| pow: DOMAIN error Hi, I'm trying to run this short code and when it prints out i get about 20 of these "pow: DOMAIN error" messages, and then my results. Can anyone shed any light on this. I'm not acutally a programer, but got thrust into this in a project for another class, so I'm extremely clueless. I think it might have something to do with the output file. I don't really know what that is, and I don't even know if what I have in there is legitimate. Thanks! #include <iostream.h> #include <math.h> #include <stdlib.h> #include <fstream.h> //Global Variables const int nvar =3; const int nmom =3; double delta; double A[nvar+1][nvar+1]; double B[nvar+1][nvar+1]; double C[nvar+1][nvar+1]; double beni[nvar+1]; double benij[nvar+1][nvar+1]; double v[nvar+1][nmom+1]; //in delme norberg double dydx[nvar+1][nmom+1]; double mu[nvar+1][nvar+1]; //Program Headers void derivs(double t, double yt[nvar+1][nmom+1], double dyt[nvar+1][nmom+1]); double fact (int n); double comb (int i,int j); double power (double i,double j); //Specify Output File ofstream outfile ("h:/bcppexe/derivs/output/test.txt", ios::out); //how do you direct an output file? main() { double delta = 0.05; A[1][2] = 0.0004; A[1][3] = 0.0005; A[2][3] = 0.0005; A[2][1] = 0; A[3][1] = 0; A[3][2] = 0; B[1][2] = 0.0000034674; B[1][3] = 0.000075858; B[2][3] = 0.000075858; B[2][1] = 0; B[3][1] = 0; B[3][2] = 0; C[1][2] = 0.06; C[1][3] = 0.038; C[2][3] = 0.038; C[2][1] = 0; C[3][1] = 0; C[3][2] = 0; A[1][1] = 0; B[1][1] = 0; C[1][1] = 0; A[2][2] = 0; B[2][2] = 0; C[2][2] = 0; A[3][3] = 0; B[3][3] = 0; C[3][3] = 0; beni[1] = 0; beni[2] = 0; beni[3] = 0; benij[1][3] = 1; benij[2][3] = 1; benij[1][2] = 0; benij[2][1] = 0; benij[3][1] = 0; benij[3][2] = 0; benij[1][1] = 0; benij[2][2] = 0; benij[3][3] = 0; for(int i=0; i <= nvar; i++) { for(int j=0; j <= nmom; j++) { v[i][j] = 0; //Initializing the matrix of yt values to zero, and setting the boundary condition dydx[i][j] = 0; //Initializing the matrix of the ODE to zero v[i][0] = 1; //Setting the boundary condition for the 0th moment } } derivs(60, v, dydx); return 0; } void derivs(double t, double yt[nvar+1][nmom+1], double dyt[nvar+1][nmom+1]) { int i; int j; int r; int q; double summation[nvar +1][nmom +1]; double mu_start[nvar+1]; double sum_part[nvar+1][nmom+1]; double mu[nvar+1][nvar+1]; for(i=1; i <= nvar; i++) { for(j=1; j <= nvar; j++) { mu[i][j] = A[i][j] + B[i][j] * pow(10, (C[i][j]*t)); } } for(i=1; i <= nvar; i++) { mu_start[i] = 0; for(j=1; j <= nvar; j++) { mu_start[i] += mu[i][j]; } } for(i=1; i <= nvar; i++) //sums up the second part of the summation in Norberg's equation { for(q=1; q <= nmom; q++) { sum_part[i][q] = 0; for(j=1; j <= nvar; j++) { for(r=0; r <= q; r++) { sum_part[i][q] += comb(q,r) * pow(benij[i][j], r) * yt[j][q-r]; } } } } for(i=1; i <= nvar; i++) //multiplies and stores the total summation in Norberg's equation { for(q=1; q <= nmom; q++) { summation[i][q] = mu_start[i] * sum_part[i][q]; } } for(i=1; i <= nvar; i++) { for(q=1; q <= nmom; q++) { yt[i][q] = 0; yt[i][0] = 1; dyt[i][q] = ((((q * delta) + mu_start[i]) * yt[i][q]) - (q * beni[i] * yt[i][q-1]) - (summation[i][q])); } } for(i=1; i <= nvar; i++) { for(q=1; q <= nmom; q++) { cout << dyt[i][q] << endl; } } char w; cin>>w; } double fact (int n) { if (n < 0) return 0; double f = 1; while (n > 1) f *= n--; return f; } double comb (int i,int j) { double c = 1; if (j==0) return c; else c = (fact (i)) / (fact (j) * fact (i-j)); return c; } double power (double i,double j) { double p=1; if (j == 0) return 1; else if (i==0) return 0; else p = pow(i,j); return p; } |
| ||
| Re: pow: DOMAIN error >Can anyone shed any light on this. Quote:
for ( int i=0; i <= nvar; i++ )You should really learn how to index arrays properly. The usual idiom is as follows. double array[3][4];That is, an array of size N may be indexed from 0 to N-1. |
| All times are GMT -4. The time now is 3:58 pm. |
Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC