昇降圧チョッパ回路を,C言語を用いたオイラー法で解析しようとしています。
スイッチオン時にはオンの回路方程式を,スイッチオフ時にはオフの回路方程式を使います。
まずは自分の方針を聞いてください。
1周期(T[ms]:スイッチング周波数1/T[kHz])分の波形をn回回して,
十分長い時間解析し,定常状態になるまで見極めたいです。
オン時間をデューティ比d(d<1)を用いて表せば,
オン時間はd*T[ms]
オフ時間はT(1-d)[ms]
になると思います。
そこで,以下のようなif文を考えました。
1周期を考えるときの時間軸をt1として,
if (0 <= t1 < d*T){
オンの式;
}
else {
オフの式;
}
これに,全体の時間軸tでforループを組み合わせると,
for (t=0 ; t<=10 ; t+=h) { //h:刻み幅
n = (int)( t/T ); //int型にキャスト
t1 = t - ( (double)n * T ); //double型にキャスト
if (0 <= t1 < d*T){
オンの式;
}
else {
オフの式;
}
}
return 0;
時間0~10秒まで刻み幅hで回し,しかもオンのときとオフのときを分岐しながら回ってくれればと期待しましたが,
これで解析しても全部printfでは0しか表示されず,きちんと格納されていないのか,とにかく満足な結果が得られません。
こうした周期的にオンオフの切り替わる回路をオイラー法で解析するときには,どのようなプログラムを書けばいいのでしょうか。
方針は合っているのでしょうか。
単純な,例えばコンデンサの放電などの解析はできます。
一応オイラー法の原理なども理解しているつもりではあります。
よかったら相談に乗ってください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
> if (0 <= t1 < d*T) {
この式は間違えてます。C言語ではこういう表記はできません。
こう表記すると、「(0 <= t1) < d*T」と評価されますので、
「0 <= t1」を評価した結果(0 or 1)と d*T を比較することなってしまいます。
t1が0とd*Tの範囲内かどうかを調べるのなら、
> if (0 <= t1 && t1 < d*T) {
としてください。
まさにここが間違えていました!!
最も基本的なところを忘れていました。
&& で,きちんとデータが出て,
シミュレータと同じ波形を描くことができました。
自分では気付きにくいところ,本当に助かりました。
ありがとうございます。
No.1
- 回答日時:
確認です。
>これで解析しても全部printfでは0しか表示されず,きちんと格納されていないのか,とにかく満足な結果が得られません。
printf()はどこに入れていて、どの値を表示していますか?
>n = (int)( t/T ); //int型にキャスト
intにキャストした場合、整数値しかとれませんが問題はありませんか?
質問内で使用しているすべての変数の型は?
実行時の「T」の値は?
ifの条件式の優先順位に問題はありませんか? 複合条件の場合、優先して確認する式には()をつけておく方がいいです。
回答ありがとうございました。
うっかり,if文の中の範囲を書き間違えていました。
if (0 <= t1 < d*T) →if (0 <= t1 && t1 < d*T)
としたら直って,無事データを得ることができました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- 物理学 風車が回転する理由 5 2023/05/08 08:03
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- Android(アンドロイド) Androidスマホの時刻の自動同期の頻度を短くしたい 4 2022/12/02 17:29
- 工学 シーケンス回路 近接チャタリング 近接オフ保持30秒後にオン 3 2022/11/14 18:20
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
- 物理学 量子力学 球面調和関数 導出 方位角成分 微分方程式の解 2 2022/07/02 13:40
- 物理学 微分方程式の物理現象への適用について 3 2023/05/14 12:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
if と配列の組み合わせ
-
(int *)の意味
-
複数桁10進数の*桁目だけを抽出...
-
足して100になるような乱数のア...
-
ラップ関数とはどんなものですか?
-
エラー 添字が付けられた値が、...
-
C言語で三目並べをするプログラ...
-
円周率
-
return 1L
-
ポインタを使って関数の値の...
-
商と剰余を同時に求める(C言語)
-
PowerShellがうまくいかない
-
C言語 エラーの原因がわからな...
-
数字列を3桁ごとにカンマで区切...
-
質問です 下記のコードを分かり...
-
アスタリスクで正方形
-
systemの戻り値を取得する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報