【问题标题】:matlab functions about sine curve关于正弦曲线的matlab函数
【发布时间】:2015-05-22 04:39:21
【问题描述】:

我有一个关于正弦曲线的matlab编程问题。

问题如下: 考虑定义:函数 [s1, s2, sums] = sines(pts,amp,f1,f2)。输入 pts 是整数,但 amp、f1 和 f2 不一定是整数。输出参数 s1 是一个行向量,其长度(元素数)等于 pts。 s1 的元素是正弦函数在给定等距参数时的值,这些参数从零开始并延伸到正弦的 f1 个周期。 (请注意,我们要求全周期,因此如果 f1 是整数,则 s1 的第一个和最后一个元素都将为 0,除了非常小的舍入误差。)正弦波的幅度等于 amp。向量 s2 与 s1 相同,只是 s2 包含 f2 个周期。向量和是 s1 和 s2 的和。如果省略 f2,则应将其设置为比 f1 大 5% 的值。如果 f1 也被省略,则应设置为 100。如果未提供 amp,则应默认为 1。最后,如果 pts 也被省略,则应设置为 1000。

这是我感到困惑的地方:如何定义步长 pts。我使用了以下方法,但它无法正常工作。请帮我解决它。

function [s1, s2, sums] = sines(pts,amp,f1,f2)
.................
t = linspace(0, 1, pts);
s1=amp*sin(2*pi*f1*t);
s2=amp*sin(2*pi*f2*t);

谢谢。

【问题讨论】:

  • 你能告诉我们为什么它失败了吗?个人感觉好像应该可以正常工作。这里pts 是将使用的点数向下舍入到最小整数值。例如linspace(0,1,11)。我假设您已经解决了默认值的问题,或者稍后会倾向于它,因为它已从问题中缩小
  • 另外,我想你应该在 pts 以及所有其他东西上使用 double。我们在这里谈论最多 6 字节的内存节省。但是您当然可以指整数值,而不是 int16int32int64
  • 也许我犯了其他错误。自动评分程序说我犯了错误。整个代码如下: function [s1, s2, sums] = sines(pts,amp,f1,f2) if nargin==3 f2=1.05*f1;如果 nargin==2 f1=100 则结束; f2=1.05*f1;如果 nargin==1 amp=1 则结束; f1=100; f2=1.05*f1;如果 narginsin(2*pif1*t); s2=ampsin(2*pif2*t);总和=s1+s2;情节(总和);结束
  • @HaoZhang 错误信息是什么,它出现在哪一行?如果问题中提供了完整的错误消息,会更容易提供帮助。
  • @HaoZhang 你可能还想试试debugger。这是一个易于使用且非常有用的工具。在公共窗口中输入dbstop error 行后,您可能想尝试该代码。这不是调试器唯一可以做的事情,所以我建议您花 5 分钟时间阅读这个简短的教程。祝你好运!

标签: matlab


【解决方案1】:

就您感到困惑的代码部分而言,这应该适合您:

n=pts-1
t=0:n;
s1=amp*sin(2*pi*f1/n*t);
s2=amp*sin(2*pi*f2/n*t);

然后你将 s1+s2 相加。您仍然需要处理丢失的输入(如果有)。

【讨论】:

  • 我怀疑这比现有的解决方案更好(因为提交的代码是正确的)。此外,您提供的实现仍然会给出相同的答案,但会迫使@HaoZhang 重写他的大部分代码。最有可能是更混乱的变体,可读性和可维护性较差。
  • 感谢您的指导,我已经解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多