Пример #1
0
int  main(void)
{   int errflag = 0;
    double local_7[CHECK_POSITIONS * VAL_NUM];
    double local_9[CHECK_POSITIONS * VAL_NUM];
    double local_11[CHECK_POSITIONS * VAL_NUM];
    double check = 0;

    double global_error = 0;

    if (errflag == 0)
        errflag = runge(&global_error, 1e-7, "data_-7.csv", local_7);
    printf("Global error for -7: %e\n", global_error);
    if (errflag == 0)
        errflag = runge(&global_error, 1e-9, "data_-9.csv", local_9);
    printf("Global error for -9: %e\n", global_error);
    
    if (errflag == 0)
        errflag = runge(&global_error, 1e-11,"data_-11.csv", local_11);
    printf("Global error for -11: %e\n", global_error);

    printf("\n Local errors for:\n");
    for (int i=0;i<CHECK_POSITIONS*VAL_NUM;i++){
        if ((local_7[i] != 0)&&(local_9[i] != 0)&&(local_11[i] != 0)){
            printf("%d",i);
            check = (local_7[i] - local_9[i])/(local_9[i] - local_11[i]);
            printf("local_error = %e\n", check);
        }
    }

    if (errflag == -1) printf("File error!\n");
    if (errflag == -2) printf("Default too small step!\n");
    if (errflag == -3) printf("Memory error!\n");

    return 0;
}
int main(){
	int n = 6;
	int m = n;
	Matrix x = Linspace(-4.0, 4.0, m+1, 1);
	Matrix y = Linspace(-4.0, 4.0, n+1, 1);
	Matrix f(x.Size(), y.Size());
	for(int i = 0; i < x.Size(); i++){
		for(int j = 0; j < y.Size(); j++){
			f(i, j) = 1/(1+(x(i)*x(i)) + (y(j)*y(j)));
		}
	}
	Matrix a = Linspace(-4.0, 4.0, 201, 1);
	a.Write("avals.txt");
	Matrix b = Linspace(-4.0, 4.0, 101, 1);
	b.Write("bvals.txt");
	Matrix p6(a.Size(), b.Size());
	for(int i = 0; i < a.Size(); i++){
		for(int j = 0; j < b.Size(); j++){
			p6(i, j) = Lagrange2D(x, y, f, a(i), b(j));
		}
	}
	p6.Write("p6_uni.txt");

	n = 24;
	m = n;
	x = Linspace(-4.0, 4.0, m+1, 1);
	y = Linspace(-4.0, 4.0, n+1, 1);
	f = Matrix(x.Size(), y.Size());
	for(int i = 0; i < x.Size(); i++){
		for(int j = 0; j < y.Size(); j++){
			f(i, j) = 1/(1+(x(i)*x(i)) + (y(j)*y(j)));
		}
	}
	Matrix p24(a.Size(), b.Size());
	for(int i = 0; i < a.Size(); i++){
		for(int j = 0; j < b.Size(); j++){
			p24(i, j) = Lagrange2D(x, y, f, a(i), b(j));
		}
	}
	p24.Write("p24_uni.txt");

	Matrix runge(201, 101);
	for(int i = 0; i < a.Size(); i++){
		for(int j = 0; j < b.Size(); j++){
			runge(i, j) = 1/(1+(a(i)*a(i)) + (b(j)*b(j)));
		}
	}
	//create runge matrix
	runge.Write("Runge.txt");



}
Пример #3
0
Vector adams()
{
  size_t numof_xs = get_numof_xs(h);
  Vector runge_ys = runge();
  Vector adams_ys;
  initVector(&adams_ys, numof_xs);
  for (size_t i = 0; i < adams_acc; ++i)
    append(&adams_ys, runge_ys.values[i]);
  disposeVector(&runge_ys);

  Vector etas;
  initVector(&etas, numof_xs);
  for (size_t i = 0; i < adams_acc; ++i)
    append(&etas, eta(i, adams_ys.values[i]));
  FiniteDiffTable table = createFiniteDiffTable(&etas);

  for (size_t k = 5; k < numof_xs; ++k) {
    double yk = adams_next_yk(adams_ys.values[k - 1], &table);
    append(&adams_ys, yk);
    append(&etas, eta(k, yk));
    disposeFiniteDiffTable(&table);
    table = createFiniteDiffTable(&etas);
  }

  printTable(&table, &adams_ys, stdout);
  disposeVector(&etas);
  disposeFiniteDiffTable(&table);
  return adams_ys;
}
Пример #4
0
Vector print_runge()
{
  printf("Runge-Kutta\n");
  Vector runge_ys = runge();
  printVector(&runge_ys, stdout);
  printf("\n\n");
  return runge_ys;
}
Пример #5
0
int main(void) {
int i, j, randam = 0, step = 0/*tane=1*/;
double t, I1, I2, HAKKA;
int N1[neuron] = {1}, N2[neuron] = {1}, count[neuron] = {0};
int spike1[neuron] = {0}, spike2[neuron] = {0};

double I[neuron] = {0.0}, V[neuron] = {0.0};
double w1[neuron] = {1.0};
double Itime[neuron][max]={0.0};
double I1time[neuron] = {0.0};
double I2time[neuron] = {0.0};
double HAKKAtime[neuron][max]= {0.0};
/////////////////////////////////////////////////////////////////////////////////////
// FILE *fp,*fp1,*fp2;
/////////////////////////////////////////////////////////////////////////////////////
// fp = fopen("7bth.txt","w"); //Vtの関係のファイル作成
// fp1 = fopen("Ib.txt","w"); //Iの挙動のファイル作成
// fp2 = fopen("+20.txt","w"); //w1の挙動のファイル作成
/* for(tane=1; tane<=2; tane++){
step=0.0;
for(i=0;i<=neuron;i++){
for(j=0;j<=max;j++){
Itime[i][j]=0.0;
HAKKAtime[i][j]= 0.0;
}
N1[i] = 1; N2[i] = 1; count[i] = 0;
spike1[i] = 0; spike2[i] = 0;
I[i] = 0.0; V[i] = 0.0;
w1[i] = 1.0;
I1time[i] = 0.0;
I2time[i] = 0.0;
}*/
srand(tane);//srand関数
// I2のスパイクが出る時間が決まった
for(i = 0; i < neuron; i++) {
for(j = 0; j < max; j++) {
// ランダムの値を101で割った余り、つまり0から100のどれか
randam = rand() % 101;
// I2のスパイクが出る時間、ノイズを50μsにした
Itime[i][j] = (2.5 * j) + (okure + 0.001 * (randam - 50));
}
}
// 時刻を進める
// t[ms]
for(t = 0.000; t <= tmax + h; t += h) {
step++;
// neuron個のニューロンを考える
for(i = 0; i < neuron; i++) {
spike1[i] = 0;
spike2[i] = 0;
// printf("t:%lf Itime %lf\n",t,Itime[i]);
// 0.001を2500回刻んだときN1をプラス、N1はそれまでに出たスパイクの累計
// I1について
if(step == (N1[i] * 2500)) {
// if((int)(t * 1000) % 2500 == 0) {
N1[i]++;
I1time[i] = t;
spike1[i] = 1;
}
// I2のスパイク数の更新と次のスパイク時間への更新
if(Itime[i][N2[i]] < t) {
I2time[i] = Itime[i][N2[i]];
N2[i]++;
spike2[i] = 1;
}
I1=0.0; I2=0.0;
// printf("M,step=%d,%d\n",N1,step);
I1 = keisanI1(t, N1[i] - 1); // I1を計算
I2 = keisanI2(t, N2[i]-1, Itime[i]); // I2を計算
HAKKA = 0.0;
for(j = 0; j < neuron; j++)
{
if(i!=j){
HAKKA += keisanHakka(t, count, HAKKAtime,j);
}
}
I[i] = w1[i] * I1 + w2 * I2 + 0.75 * HAKKA; // 入力電流の合計
V[i] = runge(V[i], I[i]); // ルンゲクッタ法によるVの更新
// I1もしくはI2のスパイクが出たさいにw1を更新する
if(spike1[i]==1 || spike2[i]==1) {
// この条件のもとでだけ、w1を変化するように条件を設定
if(fabs(I1time[i] - I2time[i]) <= okure + 0.05) {
w1[i] = Wkousin(I1time[i], I2time[i], w1[i]);
}
}
// 頭うち
if(w1[i] >= 2.5) w1[i] = 2.5;
//Vが閾値を超えたら50mVにいく
if(V[i] >= theta) {
V[i] = 50;
HAKKAtime[i][count[i]] = t;
count[i]++;
}
/////////////////////////////////////////////////////////////////////////////////////
// fprintf(fp, "%lf %lf\n", t, V);
// fprintf(fp1, "%lf %lf\n", t, I); // 時刻tと電流Iの電流を出力
// fprintf(fp2, "%lf %lf\n", t, w1);
//50mVに飛ばしたら次には0に戻す
if(V[i] >= theta) V[i] = Vreset;
}
}
// 結果の出力
printf("tane : %d\n", tane);
for(i = 0; i < neuron; i++) {
printf("%d : %d\n", i + 1, count[i]);
}
printf("----------\n");
printf("\a");
// }
/////////////////////////////////////////////////////////////////////////////////////
// fclose(fp);
// fclose(fp1);
// fclose(fp2);
return 0;
}