【问题标题】:stuck with my small code in matlab坚持我在matlab中的小代码
【发布时间】:2013-05-31 14:01:23
【问题描述】:

我对以下代码有疑问:

.
.
.

a=zeros(1000,ctimes);
a1=zeros(1000,ctimes);
hold all

for i=num1:num2;
colors=Lines(i);
switch phantom
   case 1    
path=['E:\filename\']; 
path1=['E:\filename2\']; 


n=['S',num2str(emt),'_',num2str(i),'.m'];
d=load([path,name]);
a(:,i)=complex(d(:,2),d(:,3)));


n1=['S',num2str(emt),'_',num2str(i),'.m'];
d1=load([path1,name1]);
a1(:,i)=complex(d1(:,2),d1(:,3)));

问题是无法定义a(:,i)。虽然没有问题或complex(d1(:,2),d1(:,3))) ,任何专家机构可以帮助我吗?!

谢谢你……

【问题讨论】:

  • “无法定义”是什么意思?你遇到了什么错误?这可能与您正在构建名为 nn1 的名称字符串,然后尝试使用名为 namename1 的名称字符串这一事实有关吗?
  • -1: a) 问题标题与您的问题有何关联? 2)你能提供一个short, self contained, correct, example吗? 3) 在不知道d 的尺寸或num1num2ctimes 取什么值的情况下,很难调试您的code-sn-p。 4) 我怀疑您的complex 输出与a(:,i) 不匹配。
  • 我的意思是当我将 a(:,i) 放在命令窗口中时,我在 ==> lab at 57 a(:,i)=20*log10(abs(complex(data( :,2),数据(:,3))));我确定 20*log10(abs(complex(data(:,2),data(:,3)))) 是正确的,因为当我将它放在命令窗口中时它运行良好
  • 出现此问题时i的值是多少? num1:num2 是什么?如果碰巧num2<num1,循环将根本不会执行,a(:,i) 确实没有合理的价值。我假设您的代码中某处有一个end 语句...请牢记@Schorsch 的评论并制作一个SSCE,以便我们可以重现(从而调试)您的错误。您的错误报告仍不清楚:“==> lab at 57”。这是什么意思?

标签: matlab matrix


【解决方案1】:

您确定您的文件名格式正确吗?您正在做一些事情来创建变量n,但在形成路径时使用变量name。以下是一些推荐的调试步骤:

1) 确保文件路径格式正确:

filePath = fullfile(path, name);
disp(filePath);

fullfile 函数连接文件路径和名称的元素,并注意使用正确的文件路径分隔符(适用于可移植代码,无需记住将 /\ 添加到文件路径的结尾等)。

2) 检查d 是否正确加载:

clear d;
d = load(filePath);
disp(size(d));

3) 在将其分配给a(:,i) 之前检查您计算的复数的大小:

temp = complex(d(:,2), d(:,3));
disp(size(temp));

当你做完这些事情的时候,你应该已经发现了你的问题(temp 的尺寸当然应该是[1000 1] 以匹配a(:,i) 的尺寸)。

顺便说一句,您应该避免使用i 作为变量名,尤其是当您使用复数时,因为它的内置值是sqrt(-1)。因此,c = a + i * b; 将创建一个复数 (a,b) 并将其放入 c - 直到您更改 i 的含义。一个简单的解决方案是使用ii。顺便说一句,j 也是如此。这是 Matlab 中不幸的设计决策之一,您可以覆盖这样的内置值...

【讨论】:

  • 您好,感谢您的回复,将解释更多。 i 是循环 i=num1:num2;所以与 sqrt(-1) 无关
猜你喜欢
  • 2016-01-09
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多