1

matlabで行列計算を行っています。(私には)奇妙に見えるのは、次のような結果が得られることです。

(8700286382685973*cos(q5)*sin(q4))/9007199254740992 + sin(q5)*((43220913799951902644522757965203*cos(q4))/730750818665451459101842416358141509827966271488 - 291404338770025/1125899906842624)

しかし、matlabは結果を単純化しません。simplify、、などの関数を使用しようとしましたがsimplefixいずれも目的の結果が得られませんでした。

どの関数を使用すべきかについての提案はありますか?

4

3 に答える 3

2

Simplifyは「正確な」操作のみを行います。必要なのは、式の小さな用語を削除するコマンドです。Mathematicaでは「Chop」がそれを処理します。グーグルしてみてください。

于 2012-10-06T16:14:13.680 に答える
1

@Lucasが提案したように、matlabでvpaと数字を使用できます。たとえば、上記の式がA(sym)の場合、次のようになります。

 vpa(A,3) % digits is set to 3

 ans = 

  0.966*cos(q5)*sin(q4) + sin(q5)*(5.91e-17*cos(q4) - 0.259)

そして、あなたは自分自身の数字を見てそれらを切り刻むか、次のようなものを使うことができます:

 function result = significant(x, n)
 % significant(x, n) rounds number x to n number of significant figures

 s = floor(log10(abs(x)));
 shift = 10^(n-1);
 mant = round(x*shift/(10^s)) / shift;
 result = mant * 10^s; 
于 2012-10-08T07:37:02.280 に答える
0

評価する前に、次のいずれかのコマンドを実行してみてください。

format longe
format shorte
于 2015-04-22T13:26:35.503 に答える