手計算の概算とMatlabの計算が合わない

조회 수: 8 (최근 30일)
優輔 井内
優輔 井内 2023년 3월 12일
댓글: Atsushi Ueno 2023년 3월 13일
マトラボ上で以下の計算を行おうと考えています.
Xsin = sin(x*10*pi);
Ycos = cos(x*10*pi);
theta = atan2(Xsin,Ycos);
a=90*pi/180;
R = sin(a)/sqrt(1-cos(a)*sin(2*theta));
分子のsin(a)は1で,分母のcos(a)は0,-1 <= sin(2*theta) <= 1なのでRは1に近い値が出るはずですが,
マトラボの計算結果では,値が0と表示されます.
また,sqrt(1-cos(a)*sin(2*theta))のみ計算すると1が計算結果として出てきます.
原因がわからないので教えていただけると幸いです.

채택된 답변

Atsushi Ueno
Atsushi Ueno 2023년 3월 13일
편집: Atsushi Ueno 2023년 3월 13일
> 原因がわからないので教えていただけると幸いです
原因は「x が列ベクトルなのに要素毎の除算をしていないから」だと予想します。
MATLABの除算演算子 ( / ) は除数がスカラでなければ「線形方程式の求解(行列の除算)」を行います。
今回の意図は「要素毎の除算」なので、演算子にドットを付けて ( ./ ) 除算する必要があります。
x = (-1:0.5:1)'; % x はズバリ列ベクトルでしょう
Xsin = sin(x*10*pi);
Ycos = cos(x*10*pi);
theta = atan2(Xsin,Ycos);
a=90*pi/180;
R = sin(a)/sqrt(1-cos(a)*sin(2*theta)) % 意図した結果にならない
R = 1×5
1 0 0 0 0
R = sin(a)./sqrt(1-cos(a)*sin(2*theta)) % 意図した結果になった
R = 5×1
1 1 1 1 1
  댓글 수: 1
優輔 井内
優輔 井内 2023년 3월 13일
Atsushi Ueno 様
ありがとうございます.
解決いたしました.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hernia Baby
Hernia Baby 2023년 3월 12일
自分の計算では1となります。
入力する x で何か間違えたりはしていますか?
x = linspace(0,180,10)./180;
Xsin = sin(x*10*pi);
Ycos = cos(x*10*pi);
円を書いてプロットしてみます
t = linspace(0,2*pi,100);
figure
hold on
plot(sin(t),cos(t),':','Color',[.3 .3 .3])
xline(0,'k')
yline(0,'k')
axis([-2,2,-2,2])
axis square
plot(Ycos,Xsin,'r*')
hold off
計算してみます
theta = atan2(Xsin,Ycos);
a=90*pi/180;
R = sin(a)./sqrt(1-cos(a)*sin(2*theta));
表示します
disp(R)
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
  댓글 수: 2
優輔 井内
優輔 井内 2023년 3월 13일
편집: 優輔 井内 2023년 3월 13일
回答ありがとうございます.
Atsushi Uenoさんのご指摘の通りに行うと,つまり,下記式のsin(a)のあとに「.」を入れるといけました.
R = sin(a)./sqrt(1-cos(a)*sin(2*theta));
Atsushi Ueno
Atsushi Ueno 2023년 3월 13일
因みに入力が行ベクトルの場合、そのままだと被除数と除数の行列サイズが矛盾している為エラーが出て計算出来ません。@Hernia Babyさんはこのエラーを見た瞬間すぐさま除算演算子にドットを付けたはずです。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 プログラミング에 대해 자세히 알아보기

태그

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!