【问题标题】:Matlab trigonometric functionsMatlab三角函数
【发布时间】:2019-05-12 15:46:54
【问题描述】:

我对 Matlab 还很陌生。我用 C++ 编写了一个代码来计算三角形底边相对于 alpha 角的长度,代码按预期工作。现在我想在 Matlab 中完成相同的任务并绘制结果。

C++ 代码

        #include <iostream>
        using namespace std;
        #include <tgmath.h> 

        int a = 135; 
        int b = 125;

        double base;
        double alphaB;
        double alphaC;
        double alphaA;
        float difference;

        #define PI 3.14159265358979323846

        int main() {
            for(int i = 1; i < 90; i++){

               alphaA = i * PI/180;
               alphaB = asin((b*sin(alphaA))/a);
               alphaC = 180*PI/180 - alphaA - alphaB;
               base = (a*sin(alphaC))/(sin(alphaA));

               cout << base << endl;
            }
            return 0;
        }

Matlab 脚本

y = 0:1:90;
z = my(y);
plot(z,y)

function base = my(x)

a = 135; %Side A lenght
b = 125; %Side B lenght

 f = x * pi/180;
 alphaB = asin((b*sin(f))/a);
 alphaC = 180*pi/180 - f - alphaB;
 base   = (a*sin(alphaC))/(sin(f));
 disp(base);
end

当我运行 Matlab 脚本时,输出只是一个数字并且绘图是空的,所以我编写了另一个调试脚本,将“(a*sin (alpha)) /(sin (f))” 等式分解成片段

y = 1:1:5;
z = my(y);
plot(z,y)

function base = my(x)

a = 135; %Side A lenght
b = 125; %Side B lenght

 f = x * pi/180;
 alphaB = asin((b*sin(f))/a);
 alphaC = 180*pi/180 - f - alphaB;
 alphaC2 = sin(alphaC);
 sf = sin(f);
 aa = a*alphaC2;
 test = aa/sf;  % division problem
 base   = aa;
 disp(test);
 disp(aa);
 disp(sf);

end

事实证明,当涉及到除法时,当显示“aa,sf”时,我得到了所有的输出,90 个数字。当脚本点击“test = aa/SF”时,我有一个输出(一个数字)。如何克服这个问题?

【问题讨论】:

  • Simpoe 错字,使用元素除法./ 而不是矩阵除法。

标签: c++ matlab trigonometry


【解决方案1】:

你会想要使用 ./ 而不是 /

/ 是矩阵除法 ./ 是每个元素的划分。

【讨论】:

  • 谢谢,现在可以了。我不知道 ./ 是一件事,我认为编码习惯会妨碍我。为我学习马拉语还有很长的路要走。
  • 同样请注意,逐元素乘法是相似的:使用 .* 代替 *(后者进行矩阵乘法)。
猜你喜欢
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多