在MATLAB中使用四元数的相关问题

5

我在使用quad函数计算简单积分时遇到了一个奇怪的问题。 前10到20次使用quad函数时,它能正常工作,但之后Matlab会发出以下错误:

Error using quad (line 75)
The integrand function must return an output vector of the same length as the input vector. 
yteor(k) = quad(@(q)(exp(-(q).^2).*q.^2/(k.^2+1)), 0, 1);

这里的q和k是标量。

我不知道出了什么问题,为什么几小时前还能运行。

编辑

这是我的代码

for k=1:100,
    xteor(k)=step*k;
    yteor(k)=quad(@(q)(exp(-(q).^2).*q.^2/((step.*k+1).^2)),0,1);
end plot(xteor,yteor,'r');

2
错误消息看起来相当明了。你能展示一下你的代码吗?(最好是一个可运行和一个不可运行的例子) - FabienAndre
整个代码太大了,所以我会发送集成和绘制图形的部分: - Sergei Sokolov
for k=1:100 xteor(k)=step*k; yteor(k)=quad(@(q)(exp(-(q).^2).*q.^2/((step.*k+1).^2)),0,1); end plot(xteor,yteor,'r'); - Sergei Sokolov
Matlab认为我发送了一个向量,但实际上我发送的是一个标量。 - Sergei Sokolov
1
您可以编辑您的问题(在帖子下方的灰色链接),并尝试使用Markdown格式。最后,提供完整的工作示例通常是很好的做法(在这里,添加stepxteoryteor初始化)。 - FabienAndre
代码在我这里运行良好。我建议您将“step”更改为另一个变量名称,例如“stepInterval”,因为“step”也是一个函数名称。 - Rasman
1个回答

1

以下代码片段在Octave(Matlab GNU克隆版)上适用

step = 1;
xteor = zeros(100,1);
yteor = zeros(100,1);

for k=1:100,
  xteor(k)=step*k;
  yteor(k)=quad(@(q)(exp(-(q).^2).*q.^2/((step.*k+1).^2)),0,1);
end
plot(xteor,yteor,'r');
pause

我的假设是你的错误是代码中早期发生的其他事情的结果(也许与step不是标量有关?)。不要只关注出现错误的这一行。尝试搜索在错误出现之前你所做的更改。


是的,谢谢。我仔细查看了代码,并发现有时我会误打一个“.)” 。无论如何,非常感谢您的帮助!!! - Sergei Sokolov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接