計算結果不一致の理由について

6 views (last 30 days)
持田
持田 on 7 May 2021
Commented: 持田 on 9 May 2021
(☆)
こちらの式を計算したいです。変数はxでa,b,c,kについては定数です。
Symbolic Math toolboxで代入計算を行う方法と、Symblic Math toolboxで解析解を求めておいて後から代入計算する2つの方法を考えました。
この2つの計算方法は同じになると思ったのですが結果があわず、考えても分からないため質問させていただきます。
この理由について、分かればご教授していただけないでしょうか。
よろしくお願いいたします。
% 目的は(☆)を解くことです。
%% Symbolic Math toolboxを使って解く場合
syms x
a = 3.5e-3;
b = 2.3e3;
c = 46e-3;
k = 0.0444;
f1 = a* sinc(b*(x-c)/pi);
f2 = f1*x;
ans= subs(int( int(f2,k,x)), k); %(☆)
double(ans) % 計算結果 5.7814e-09
%% Symbolic Math toolboxで解析解を求め、それに定数値を代入する
syms x a b c k
f1 = a* sinc(b*(x-c)/pi); %sinc関数
f2 = f1*x;
sol = subs(int( int(f2,k,x)), k)
%解析解は↓のように求まる
% ((a*sin(b*(c - k)))/b + a*c*cos(b*(c - k)))/b^2 - ((c - k)*(a*cos(b*c - b*k) - a*b*c*sinint(b*(c - k)) + a*b*c*sinint(b*c - b*k)))/b^2;
% 解析解に代入
a = 3.5e-3;
b = 2.3e3;
c = 46e-3;
k = 0.0444;
((a*sin(b*(c - k)))/b + a*c*cos(b*(c - k)))/b^2 - ((c - k)*(a*cos(b*c - b*k) - a*b*c*sinint(b*(c - k)) + a*b*c*sinint(b*c - b*k)))/b^2
% 計算結果 -2.5368e-11

Accepted Answer

Hernia Baby
Hernia Baby on 7 May 2021
おそらくですが、浮動小数点データの精度の問題だと思われます。
  5 Comments
持田
持田 on 9 May 2021
いまさらですが、最初の質問の(☆)式が間違っていますね。。
内側の積分の中にxが入ります。コードの式が合っています

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!