新しく発言する  EXIT  インデックスへ

多項式展開


  多項式展開 しばっち 2008/03/22 21:42:39  (修正1回)
  係数が指定できると 島村1243 2008/03/23 08:57:56 
  │└返事 しばっち 2008/03/23 09:52:22 
  │ └失礼しました 島村1243 2008/03/23 13:43:12  (修正1回)
  !多変数多項式の演算(加減乗算) 山中和義 2008/03/23 21:13:46 
Re: 多項式展開  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/23 21:13:46
!多変数多項式の演算(加減乗算)

OPTION BASE 0

!マクロ
DEF GetVal(p$)=VAL(p$(N+2:LEN(p$))) !係数を得る
DEF GetDegree$(p$)=p$(1:N) !次数を得る

SUB PolyCopy(p$(), q$()) !コピーする
FOR i=1 TO VAL(p$(0))
LET q$(i)=p$(i) !係数、次数
NEXT i
LET q$(0)=p$(0) !項の数
END SUB

SUB PolySimple(r$()) !同類項をまとめる
LET k=VAL(r$(0))
FOR i=1 TO k-1 !※組み合わせで考える
LET ri$=GetDegree$(r$(i)) !次数
LET t=GetVal(r$(i)) !係数
IF t<>0 THEN !0を除く
FOR j=i+1 TO k
LET rj$=GetDegree$(r$(j)) !次数
IF ri$=rj$ THEN !同類項なら
LET t=t+GetVal(r$(j)) !前方へ吸収する
LET r$(j)(N+2:LEN(r$(j)))="0" !削除する
END IF
NEXT j
LET r$(i)=ri$ & ":" & STR$(t) !まとめる
END IF
NEXT i
!MAT PRINT r$ !debug

LET j=0 !削除する項の数
FOR i=1 TO k !係数が0の項を削除する
IF j>0 THEN LET r$(i-j)=r$(i)
IF GetVal(r$(i))=0 THEN LET j=j+1
NEXT i
LET k=k-j

LET r$(0)=STR$(k) !項の数
END SUB


!表示関連
SUB PolyDisplay(p$()) !多変数多項式を表示する
IF VAL(p$(0))=0 THEN
PRINT "0";
ELSE
FOR i=1 TO VAL(p$(0)) !各項について
LET t=GetVal(p$(i)) !係数の部
IF t<>0 THEN !0は非表示
IF i>1 THEN !最初の項を除く
IF t>0 THEN PRINT "+"; ELSE PRINT "-"; !符号
END IF
LET t=ABS(t)
IF t<>1 THEN PRINT STR$(t); !1は非表示

FOR j=1 TO N !変数の次数の部
IF p$(i)(j:j)<>"0" THEN !0乗は非表示
PRINT CHR$(j-1+ORD("a")); !変数 abcd … xyz
IF p$(i)(j:j)<>"1" THEN PRINT "^";p$(i)(j:j); !1乗は非表示
END IF
NEXT j

IF VAL(GetDegree$(p$(i)))=0 AND t=1 THEN PRINT "1";
END IF
NEXT i
END IF
END SUB
   └つづき 山中和義 2008/03/23 21:14:43 
    └つづき 山中和義 2008/03/23 21:17:07 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。