新しく発言する EXIT インデックスへ
微分について

  微分について Urabutyou 2006/11/24 23:51:25 
  関数f(x)に対して, ??? 2006/11/25 15:33:25 
  │└!graph_sample.bas ??? 2006/12/04 14:44:08 
  十進BASICは数式処理システムではないので,... 白石 和夫 2006/11/25 17:08:44 

  微分について Urabutyou 2006/11/24 23:51:25  ツリーへ

微分について 返事を書く
Urabutyou 2006/11/24 23:51:25
どうも。
あの、ある関数を定義して、それを微分した導関数を表すことはできるのでしょうか。ヘルプをみても、そんな解説がなかったように思いますので、いい方法があれば教えていただけないでしょうか。よろしくお願いします。

  関数f(x)に対して, ??? 2006/11/25 15:33:25  ツリーへ

Re: 微分について 返事を書く
??? 2006/11/25 15:33:25
 関数f(x)に対して,
  g(x)={f(x+h)−f(x)}/h(h=0.001くらい)
と定義して,そのグラフを書けばいいのでは?

  │└!graph_sample.bas ??? 2006/12/04 14:44:08  ツリーへ

Re: 関数f(x)に対して, 返事を書く
??? 2006/12/04 14:44:08
!graph_sample.bas
LET m=5
SET WINDOW -m,m,-m,m
DRAW grid
DEF f(x)=x^3/5
LET h=.000001
DEF fd(x)=(f(x+h)-f(x))/h
DEF fdd(x)=(fd(x+h)-fd(x))/h
LET k=.001
SET LINE COLOR "black"
FOR x=-m TO m STEP k
PLOT LINES:x,f(x);
NEXT x
PLOT LINES
SET LINE COLOR "red"
FOR x=-m TO m STEP k
PLOT LINES:x,fd(x);
NEXT x
PLOT LINES
SET LINE COLOR "blue"
FOR x=-m TO m STEP k
PLOT LINES:x,fdd(x);
NEXT x
END

ついでに微分方程式y'=y、y(0)=1の解を図示するプログラムを。
!graph_sample2.bas
!微分方程式y'=y,y(0)=1を描く
LET m=5
SET WINDOW -m,m,-m,m
DRAW grid
LET h=.001
SET LINE COLOR "black"
FOR x=0 TO m STEP h
IF x=0 THEN
LET y=1
ELSE
LET y=yold/(1-h)
END IF
PLOT LINES:x,y
LET yold=y
NEXT x
PLOT LINES
FOR x=0 TO -m STEP -h
IF x=0 THEN
LET y=1
ELSE
LET y=yold/(1+h)
END IF
PLOT LINES:x,y
LET yold=y
NEXT x
!fd(x)=(f(x+h)-f(x))/h
!y=(y-yold)/h -> y*h=y-yold -> y=yold/(1-h)
END

  十進BASICは数式処理システムではないので,... 白石 和夫 2006/11/25 17:08:44  ツリーへ

Re: 微分について 返事を書く
白石 和夫 2006/11/25 17:08:44
十進BASICは数式処理システムではないので,数式を記号処理する機能はありません。

導関数のグラフをかくという程度の目的であれば,
100 DEF f(x)=・・・・・
110 DEF g(x)=(f(x+h)-f(x))/h
120 LET h=1E-8
のようにすれば,g(x)がf(x)の導関数になります。
hの値は小さければ小さいほどよいというわけではないので,「(仮称)十進BASICによるJIS Full BASIC入門」の
http://hp.vector.co.jp/authors/VA008683/tutorial/section2.htm#2.1
の頁の
2.7.3.桁落ち
の項を参照して決定してください。

数式処理,たとえば,"x^3"や"sin(x)" を文字列として与えるとその導関数"3*x^2"あるいは"cos(x)"が値となるような利用者定義関数を作ることはFull BASICでもできます。
ただし,Full BASICでは,同類項をまとめる処理のような部分(たとえば,cos(x)+cos(x)を2*cos(x)にする)の記述が難しいので,本格的な数式処理のプログラムを書くのは無理です。


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