プロが教える店舗&オフィスのセキュリティ対策術

現在MATLABについて勉強しているのですが、y=3*x^2+4*x+2のような任意の1変数多項式において、
最高次の係数で規格化(y=3/3x^2+4/3*x+2/3)したく、cf=coeffs(y)で係数の行列([2 4 3])を返し、
最高次の係数の要素(cf(end))で、多項式を割った式(y/cf(end))を求めたのですが、
上記のように係数の行列要素が次数の低い順にいつでもなっていると最高次の係数の要素はcf(end)で良いのですが、
与える多項式によって、係数行列要素の順序が変わってしまいます([2 3 4]、[3 4 2]のように)。

任意の1次多項式において規格化できるようにしたいのです。

どなたか初心者でも理解できるようご教授お願い致します。

A 回答 (2件)

A No.1のKulesです。


>3   2
>x +2*x +1のような形で2行にわたって出力してしまいます…
2行で出てくるならむしろ好都合ですよね?
1行目に必ず次数が出てくるんですから。
これは文字列で出てくるんですかね?
まあ10次以上出てくるならちょっと面倒ですが、0次~9次までなら
1文字ずつstr2numで数値かしてやって最大値を探すとかでしょうか?(多分転置すれば1発でいける気がしますが)
10次以上が出てくるならsscanfで地道に読み込むか、
(私の記憶ではスペース文字をstr2numにするとnanか0になります)
あるいは数値が連続していることを検出して10進法で変換していくかですかね?

参考になれば幸いです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
返信遅れてすいません。。
いろいろやってみたのですが、sym2polyが最も簡単で扱いやすいようでした。
何度もありがとうございました。

お礼日時:2012/07/06 14:41

私自身Symbolic Math Toolboxは使ってないんですが…


http://www.mathworks.co.jp/help/ja_JP/toolbox/sy …
を見ると、
[C, T] = coeffs(p,x)

とすることでTに各項のリストが返されるらしいです。
Tが文字列なのかセルなのかはわかりませんが、
t =[ x^2, x]
みたいな形になるんで、sscanfで^の後にある数字を取り出して、
一番大きいものを選ぶ…というのは上手くないですかね?

参考になれば幸いです。

この回答への補足

いつもご回答ありがとうございます。
返信遅くなってすいません。
Symbolic Math Toolboxではなく、MapleをToolboxとして使用しており、結果が
x^3+2*x^2+1のような出力ではなく、
3   2
x +2*x +1のような形で2行にわたって出力してしまいます…

補足日時:2012/06/13 15:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!