【发布时间】: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 字节的内存节省。但是您当然可以指整数值,而不是int16或int32或int64。 -
也许我犯了其他错误。自动评分程序说我犯了错误。整个代码如下: 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