(無題)

 投稿日:2008年11月26日(水)12時16分55秒
  山中様
大熊です。毎回、御丁寧な回答を有難うございます。
総てをまだ理解できないでいますが、SUB命令のスタイルなどを
一辺に覚えました。

所で、御回答で気になることがあるので質問いたします。

(1) 電流でやってますが、そのため E1に位相が付いています。
    周波数特性(ボード線図)などでは、
        E1 100Vで位相0度を加えると E2 I2 、そして最後にI1
    はどうか・・・・。
    のように逆に成ると思います。電圧と電流の比例関係から
    E1の結果を単純に逆計算、E1を100Vに直し、E1の位相を
    E2に加減するという事になるのでしょうか。

(2) 1090 LET f=60 !周波数
    となってますが、周波数特性(ボード線図)などでは、
    周波数 f=10 から 10000まで
    等と成ります。
    下に DATA 文を付け、READ DATA 等とやるのでしょうか。
    周波数を DIM FF(fの指定,1)
        出力も  DIM EE2(出力の格納,1)
    等とやると、可能とおもいますが、いかがでしょうか。


(3) 例えば、このローパスフィルターが5段つずいたら、
    F行列を5乗するのですか、
    其の時 (A)^5 でしょうか。または、FOR --NEXTですか。


(4) 私の「有限要素法」とは、・・・熱とか、磁気や電位の表示で
    たとえば、楕円形の板が在ったとき、その形状を小さな三角▽に
    分割し、連立方程式を立てる。・・・時間tにも関係します。
    楕円の板のA(X,Y)に100度を加えると他の部分A(P,Q)の温度は
        どうなるか,・・・また、それを色で表示せよ・・・。
    時間的にはどうか・・・・と言ったような問題です。
    実は、無料のソフトがあるようなのですが、「リナックス」とか
    で作られ、総ての問題に対しまだ今は、完全には完成出来てない
    と聞きました。N88でのソフトに,近い問題のソフト例があり
    また昔ですが、本(¥2,300)も出ています。
    「BASICによる 有限要素法の基礎」戸川 隼人 サイエンス社
    これは、マトリクスで解いていません。従ってソフトの見通し
    が悪く、この部分は一体何をしてるのか良く分らない・・・
    という欠点があります。マトリクスと複素数の両方ができる
    10進BASICなら、それが可能で、あるいはもう既に出来てる
    のかと思い質問・投稿しました。

(5) 脱線ですが、この投稿欄に機械語のことがありました。SECOND様
    このソフトは万能で、たとえば、今回のローパスフィルタでも
    其のソフトのある同じホルダーにおけば、動作可能なのですか。
 

Re: (無題)

 投稿者:山中和義  投稿日:2008年11月26日(水)13時42分16秒
  > No.119[元記事へ]

大熊 正さんへのお返事です。


>(1) 電流でやってますが、そのため E1に位相が付いています。
>
>(2) 1090 LET f=60 !周波数
>    となってますが、周波数特性(ボード線図)などでは、
>    周波数 f=10 から 10000まで 等と成ります。

fのFOR ~NEXT文で毎回計算し直せばいいかと思います。
繰り返し部分をサブルーチン化するとプログラムの見通しが良くなると思います。


例.

※サブルーチン部分は省略
DIM mF(2,2),mZ(2,2) !F,Zパラメータ
DIM vi(2),vo(2) !電流や電圧のベクトル
DIM T1(2,2),T2(2,2) !作業用

!●1次RC回路、直列RC回路、ローパスフィルタ、積分回路
!i1→   i2→
! ─R─┬─
!E1↑  C ↑E2
! ─-─┴─
!E1=5[V]、R=1k[Ω]、C=0.1[μF]

LET R=1e3
LET C=0.1e-6

SUB routine
!※Fパラメータ、基本行列
   MAT mF=IDN !単位行列
   CALL seriesF(R,T1) !縦続接続
   MAT mF=mF*T1
   CALL shuntF(F2Ohm(C),T2)
   MAT mF=mF*T2


   !※Zパラメータ、インピーダンス行列 V=Z*I
   CALL F2Z(mF,mZ)


   !※(E1)=[F](E2)より
   ! (i1)  (i2)
   LET vi(1)=5 !5[V]
   LET vi(2)=vi(1)/mZ(1,1) !i=V/R、?[A]

   MAT T1=INV(mF) !出力側を算出する
   MAT vo=T1*vi
END SUB


SET bitmap SIZE 800,400 !画面を横長へ
!※2SET bitmap SIZE 300,600 !画面を横長へ
SET WINDOW -1,6, -1,2 !表示領域
!※2SET WINDOW -1,6, -91,1 !表示領域
!※3SET WINDOW -1,6, -20,1 !表示領域
DRAW grid !目盛り

FOR f=1 TO 6 !x軸が対数
   PLOT TEXT ,AT f-0.3,-0.15: mid$("10  100 1k  10k 100k1M  ",4*(f-1)+1,4)
NEXT f
FOR f=10 TO 100000 STEP 100 !周波数[Hz]
   CALL routine

   LET vv=vo(1)/vi(1)
   PLOT LINES: LOG10(f),ABS(vv); !振幅特性
   !※2PLOT LINES: LOG10(f),DEG(ATN(Im(vv)/Re(vv))); !位相θ
   !※3PLOT LINES: LOG10(f),20*LOG10(ABS(vv)); !利得[dB]
NEXT f


END



>(3) 例えば、このローパスフィルターが5段つずいたら、

行列のべき乗はMAT文では記述できませんので、FOR~NEXT文で乗算を繰り返します。


例.
!●はしご回路の合成抵抗 a-b端子間

!a─R1┬R3┬R5┬ … ┬Rn┬ …
!   R2 R4 R6  Rn-1 Rn+1
!b──┴─┴─┴   ┴─┴
!
LET R1=1 !1,2,1,2,…,1,2,1
LET R2=2

CALL seriesF(R1,T1) !─R1┬
CALL shuntF(R2,T2)  !  R2

MAT mF=IDN !単位行列
FOR i=1 TO 5 !段数
   MAT mF=mF*T1 !─R1┬R1┬ … ┬R1┬
   MAT mF=mF*T2 !  R2 R2   R2 R2
NEXT i
MAT mF=mF*T1 !─R1┐

PRINT "Fパラメータ"
MAT PRINT mF;
 

Re: (無題)

 投稿者:SECOND  投稿日:2008年11月26日(水)18時25分24秒
  > No.119[元記事へ]

大熊 正さんへのお返事です。

> (5) 脱線ですが、この投稿欄に機械語のことがありました。SECOND様
>     このソフトは万能で、たとえば、今回のローパスフィルタでも
>     其のソフトのある同じホルダーにおけば、動作可能なのですか。


機械語について、あやまった御理解が、見受けられますが、私のカン違いかも知れません。
その場合は、以下、聞き流してください。

機械語は、アセンブラー(Assembler) とも呼ばれ、その昔、BASIC も C言語も無かった時代に、
最初に有った言語、即ち、CPU、プロセッサが、直接認識できる、唯一の言語です。

機械語は16進コードそのもので見づらい。
そこで、mov ax,1234h とか、push ax などの、シンボルを、1対1で機械語に、対応させて、
見やすくしたものを、アセンブラー言語 と呼んでいます。

十進 BASIC.EXE 本体は、その記述を、機械語に翻訳するための「システム言語プログラム」
という事です。その他の方面の言語なども全て、同様です。

最終的に、機械語にならないと、CPUは、認識、実行できません。

-------------------------------------------------------------------
投稿した機械語は、本来、BASIC.EXE が、翻訳する文の一部を、
手で、直接に翻訳代行したものと言えます。

なぜ、そんな事をしたのかと、いうのは、
翻訳の冗長性を外したり、高速のための書き方、追求でした。
ご質問の件は、ご推察されるとおりで、専用に書き直さないと、使用できません。
 

戻る