- 締切済み
scilab サイラボ(数学ソフト)
数学ソフトscilabについて知っている方いますか?たとえば関数としてy=sin(x)としてこの関数を何回か微分した関数をベクトルか行列にいれていきたいのです。V=[cos(x) -sin(x) -cos(x) six(X) ]のようにです。sin(x)を微分するコマンドはないのでしょうか?derivatではうまくいかないし・・・お願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- masudaya
- ベストアンサー率47% (250/524)
これをやりたいのであれば,Scilabよりも MaximaとかMupadなどの数式処理ソフトが必要だと思います. Scilabでこれをやりたい場合は,以下のようにする必要があると思います.xの範囲を区分数とともにまず指定します.今は0から1まで0.01ステップとします. x=0:0.01:1; これで,xが0,0.01,0.02,...,1というベクトルとして生成されます. 次に関数をf(x)とすると, y1=f(x); とすることで,y1がf(0),f(0.01),f(0.02),...,f(1) というベクトルになります. この微分が y2=diff(y1); でこの微分は y3=diff(y2); となります. このままでは個々のベクトルなので, これを結合して行列にします. Y(1,:)=y1; Y(2,:)=y2; Y(3,:)=y3; これで3行100列の行列になります. 求める形式がV(x)=[f(x),f'(x),f''(x),..]なので 転置して V=Y'; これでVが100行3列の行列となり V(n,:)=[f(0.01n),f'(0.01n),f''(0.01n)] となります. ここで注意ですが,Scilabでは,微分を差分で代用しているため, ステップ(今の例では0.01)を十分小さくする必要があります. また,高階の微分を高階の階差で近似しているため,変数範囲間の 分割数も高階の階差の階数以上にに分割していないと階差が 求まりません.
- masudaya
- ベストアンサー率47% (250/524)
ちょっと長いですが, t=0:0.01:2*3.14159265358989; y1=cos(t); y2=-sin(t); y2=diff(y1);でも可 y3=-cos(t); y3=diff(y2);でも可 y4=sin(t); y4=diff(y3);でも可 Y(1,:)=y1; Y(2,:)=y2; Y(3,:)=y3; Y(4,:)=y4; V=Y'; とすれば, V(x,:)=[cos(x) -sin(x) -cos(x) six(x)] となります. 何か質問する内容ではないような気もしますが...
- masudaya
- ベストアンサー率47% (250/524)
基本的にScolabで計算するのは,差分なので, 信号をvectorとして置く必要があります. 使い方としてはこんな感じです. t=0:0.01:2*3.1416; y=sin(x); dy=diff(y);
お礼
V=[cos(x) -sin(x) -cos(x) six(X) ](1回微分したもの 2回微分したもの 3回微分したもの 4回微分したもの)という行列かベクトルをつくりたいんです。信号???やっぱこういう並びはsilabでは無理なのかな・・・
- masudaya
- ベストアンサー率47% (250/524)
Scilabcでの微分のコマンドはdiffです.詳細はScilabのhelpをご覧下さい.ただ,上のように数値計算ではなく,数式処理をするのであれば,MaximとかMupad,Mapleなどが有名です.
お礼
diffでsin(x)の微分はできますか??helpを見たんですけど英語で理解できません・・・
お礼
ありがとうございます。実行できませんでした。僕の説明不足かもしれません。僕がしたいのはまず、ある関数例えばP=sin(x) or sin(x)*cos(x) or e^2*sin(x)などのケースに対して、V=[P'(x) P''(x) P'''(x)・・・・P(n回微分)(x)] (ここでのnは最初に指定。)というものを並べたベクトルか行列を自動でつくりたいんです。そのあとにVの成分にたいして例えばP'(3)とかP''(4)とかの値を使いたいんです。わかりますかね?あとt=0:0.01:2*3.14159265358989 ってなんですか?