以下のようなプログラムを実行したところうまくいきませんでした。
for (int p = 2; p<=20;p++){
int n = pow(2, p);
h = T / n;
e_max = 0;
double x[n];
double v[n];
x[0] = x0;
x[0] = 0;
for (int j = 0; j < n;j++){
x[j + 1] = 0;
v[j + 1] = 0;
}
で配列の初期化を行っている部分が間違っているのかと思うのですがどうでしょうか?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define M_PI 3.14159265358979323846264338327950288
int main(){
double w, k, m, x0;
k = 3;
m = 4;
w = sqrt(k / m);
x0 = 1;
double x_a, T, h, t, e, e_x, k1, k2, k_1, k_2, e_max, log2e_max;
T = 2 * M_PI / w;
FILE *file;
//FILE *file1;
file = fopen("kadai3.1.3.2txt", "w");
//file1 = fopen("kadai3.1.3.2xxa.txt", "w");
for (int p = 2; p<=20;p++){
int n = pow(2, p);
h = T / n;
e_max = 0;
double x[n];
double v[n];
x[0] = x0;
x[0] = 0;
for (int j = 0; j < n;j++){
x[j + 1] = 0;
v[j + 1] = 0;
}
for (int i = 0; i < n; i++){
t = (i + 1) * h;
k1 = v[i];
k2 = v[i] - k / m * (x[i] + k1 * h) * h;
x[i + 1] = x[i] + (k1 + k2) / 2 * h;
k_1 = -k / m * x[i];
k_2 = -k / m * (x[i] + v[i] * h + 1 / 2 * k_1 * h * h);
v[i + 1] = v[i] + (k_1 + k_2) / 2 * h;
x_a = cos(w * t);
e = x[i + 1] - x_a;
e_x = fabs(e);
if (e_x > e_max){
e_max = e_x;
}
// fprintf(file1, "%lf %lf\n", x, x_a);
}
log2e_max = log2(e_max);
fprintf(file, "%d %lf\n", p, log2e_max);
}
fclose(file);
system("pause");
return 0;
}
No.1ベストアンサー
- 回答日時:
詳しくは見ていませんが、
double x[n];
double v[n];
のnの値は、pが20のとき、1048576になります。
そうなると、ローカル変数として、double x[1048576]を確保することができません。コンパイルはOKですが、実行時エラーとなります。
double x[n];は、グローバル領域に確保します。
main()の外に定義します。
以下のように定義してください。
あらかじめ、最大の配列を確保しておきます。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define M_PI 3.14159265358979323846264338327950288
double x[1048576];
double v[1048576];
int main(){
No.3
- 回答日時:
そもそも、このプログラムは何を行っているのでしょうか。
又、どのような結果が、kadai3.1.3.2txtに書き込まれることを期待しているのでしょうか。
ばねにつながれた物体の動きについてホイン法で解いた数値解と、x=coswtとした解析解の誤差を求め、時間刻み2^pとしたときpごとの誤差の最大値が書き込まれることを期待しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
「{ } で囲むだけ」は正しい?
-
実数の整数部,小数部の取得
-
c言語の配列を使ってサイコロを...
-
if と配列の組み合わせ
-
C言語で行列の積を計算できるよ...
-
入力を待たずにstdinの監視をし...
-
C言語 エラーの原因がわからな...
-
C++でvectorにテキストファイル...
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
return 1L
-
PowerShellがうまくいかない
-
C言語の配列をC++のvectorに高...
-
野球の対戦成績のテーブル表示...
-
部分行列の抜き出し(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
c言語の配列を使ってサイコロを...
-
課題でつまってます・・・
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報
build taskを行ったときにはエラーを吐かなかったです。
こちらと同じ内容です。
https://oshiete.goo.ne.jp/qa/12765037.html