ここから本文です

C++でLRC回路のステップ応答を差分法で計算し、csvファイルに出力するプログラムを...

afu********さん

2019/4/2217:18:40

C++でLRC回路のステップ応答を差分法で計算し、csvファイルに出力するプログラムを書いているのですが、実行しても計算が終わらずファイルが作られません。スクリプトのどこが間違っているのでしょうか?

#include <iostream>
#include <string>
#include <cmath>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
int i, N;
double L, R, C, Ef, a, b, dt;

cout << "N (表示時間:0~0.1×(N-1)[ωnt])= "; cin >> N;

C = 0.001; R = 10.0; L = 0.05; Ef = 1.0; dt = 0.1;

a = R / 2 * pow(C / L, 0.5); //ζに相当
b = 1.0 / pow(L * C, 0.5); // ωnに相当
double *Vo1;
Vo1 = new double[N]();
double T = b * dt;
for (i = 0; i < N - 1; i++) {
Vo1[i + 2] = (-(pow(dt, 2.0) - 2.0 * a * dt - 2.0) * Vo1[i + 1] - Vo1[i] + pow(dt, 2.0) * Ef) / (2.0 * a * dt + 1.0);
}

string filename = "Exam 3-1.csv";
ofstream writing_file;
writing_file.open(filename, ios::out);
writing_file << "陽解法" << endl;
writing_file << "omega t" << "," << "Vo" << endl;
for (i = 0; i < N; i++) {
writing_file << i * dt << "," << Vo1[i + 1] << endl;
}
delete[] Vo1;
}

閲覧数:
12
回答数:
1

違反報告

ベストアンサーに選ばれた回答

k02********さん

2019/4/2217:32:51

1.
//a = R / 2 * pow(C / L, 0.5); //エラー
a = R / 2.0 * pow(C / L, 0.5);

2.
//Vo1 = new double[N]();//見ない?
Vo1 = new double[N];

質問した人からのコメント

2019/4/22 19:40:17

解決しました!
指摘して頂いた箇所に加えて、1つ目のfor文でのiの終了値も不適切だったので、それら全てを直したらしっかり動きました。
回答ありがとうございました。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる