【问题标题】:This code doesn't give me cos(x) in Matlab这段代码在 Matlab 中没有给我 cos(x)
【发布时间】:2015-08-24 14:13:35
【问题描述】:

我已经修改了 Otto 书中的 sin(x) 代码以获得 cos(x) 并且我做了以下操作:

v=0.:0.25:0.75;
cosx=zeros(size(v));
N=10; 
range=0:N;
ints=2*range;

for n=range 
   cosx=cosx + (-1)^n*v.^ints(n)/factorial(ints(n));
end

但是这在任何地方都给 0。

有人可以帮我解决这个问题吗?非常感谢

【问题讨论】:

  • @user162343 - cosx = 0;,而不是 cosx=zeros(size(v));。您正在计算 cos(x) 的泰勒级数近似值,因此您正在逐​​步添加升序项。
  • 请您发布正确的代码;)

标签: matlab math trigonometry


【解决方案1】:

您必须更改代码中的两件事才能获得正确的泰勒级数展开式。这是代码。注意变化。

v=0:0.25:0.75;
cosx=zeros(1,size(v,2)); %Now, it's a vector
N=10; 
range=0:N;
ints=2*range;

for n=range 
   cosx=cosx + (-1)^n*v.^ints(n+1)/factorial(ints(n+1)); % replace n by n+1,        
                                                         % MATLAB indexing starts from 1.
end

【讨论】:

  • 非常感谢 :),还有另一个问题,如果不将零转换为向量,你怎么能做到这一点?
  • Parag,您应该能够通过存储值 previous_value= factorial(ints(n+1)) 来节省一些计算时间,而不是重新计算,只需将 previous_value 乘以 ints(n+1)*(ints(n+1)-1)
  • @CarlWitthoft 是的。我只是尝试对他的代码进行最小的修改。
  • @user162343 如果您希望cos(v) 用于v 中的每个值,那么您必须将cosx 作为零向量。如果您只想计算 v 的单个值,则将 cosx 保持为 0。避免将 v 作为向量的另一种选择(但不推荐)是在值上放置另一个 for 循环的v。如果我解决了您的问题,请接受答案。
  • 不,我想要一个矢量,所以你的答案就是我正在寻找的,谢谢
猜你喜欢
  • 2015-10-08
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2022-12-09
  • 2022-11-24
相关资源
最近更新 更多