查看: 2081|回复: 9|关注: 0

[已解决] matlab 函数提示出错:需要大括号或点索引表达式中的一个输出,但结果有 21 个。希望有高手指点一下

[复制链接]

新手

14 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
本帖最后由 Lorierica 于 2020-7-3 18:06 编辑

azimuth=[];
JD={};
basestation=struct('x',{1000,-57.7350000000000,-57.735,600,441.269,442.265000000000,-400,-557.735000000000,-557.735000000000,1100,942.265000000000,942.265000000000,900,-1057.73500000000,-1057.73500000000,600,442.265000000000,442.265000000000,-400,-557.735000000000,-557.735000000000},'y',{0,-100,100,900,801.242000000000,1000,900,800,1000,0,-100,100,0,-100,100,-900,-1000,-800,-900,-1000,-800});
sgx=-1245:10:1245;
sgy=-995:10:995;
for t=1:21;
    for i=1:250
        for j=1:200  
azimuth=getAntDir(basestation, sgx, sgy,t,i,j)
        end
        JD{t}=azimuth;
    end
end
这个是主函数代码
function   azimuth=getAntDir(basestation, sgx, sgy,t,i,j)
deltaLoc = (sgx(t)-basestation.x(i))+1i*(sgy(t)-basestation.y(j));%basestation.x为基站横坐标
azimuth  = 90-angle(deltaLoc)/pi*180;
azimuth  = azimuth+360*(azimuth<0);
azimuth  = azimuth-1/3*pi;
azimuth  = azimuth+360*(azimuth<0);
end
这个是自己定义的函数代码
我想执行主函数,计算21组数组,每组数组通过定义的函数计算出250×200个azimuth,然后保存在JD里,但是现在提示需要大括号或点索引表达式中的一个输出,但结果有 21 个。不知道为什么,希望有高人指点一二,万分感谢
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-7-3 18:18:55 | 显示全部楼层
仅供参考
  1. azimuth=[];
  2. JD={};
  3. basestation=struct('x',{1000,-57.7350000000000,-57.735,600,441.269,442.265000000000,-400,-557.735000000000,-557.735000000000,1100,942.265000000000,942.265000000000,900,-1057.73500000000,-1057.73500000000,600,442.265000000000,442.265000000000,-400,-557.735000000000,-557.735000000000},'y',{0,-100,100,900,801.242000000000,1000,900,800,1000,0,-100,100,0,-100,100,-900,-1000,-800,-900,-1000,-800});
  4. sgx=-1245:10:1245;
  5. sgy=-995:10:995;
  6. for t=1:21
  7.     for i=1:21
  8.         for j=1:21
  9.             azimuth=getAntDir(basestation, sgx, sgy,t,i,j)
  10.         end
  11.         JD{t}=azimuth;
  12.     end
  13. end

  14. function   azimuth=getAntDir(basestation, sgx, sgy,t,i,j)
  15. deltaLoc = (sgx(t)-basestation(i).x)+1i*(sgy(t)-basestation(j).y);%basestation.x为基站横坐标
  16. azimuth  = 90-angle(deltaLoc)/pi*180;
  17. azimuth  = azimuth+360*(azimuth<0);
  18. azimuth  = azimuth-1/3*pi;
  19. azimuth  = azimuth+360*(azimuth<0);
  20. end
复制代码
回复此楼 已获打赏: 0 积分

举报

新手

14 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
 楼主| 发表于 2020-7-3 21:14:21 | 显示全部楼层

还是不行,显示出错和之前一样
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-7-3 21:24:36 | 显示全部楼层
在MATLAB2019b可以运行了啊
1.PNG
回复此楼 已获打赏: 0 积分

举报

新手

14 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
 楼主| 发表于 2020-7-3 23:38:28 | 显示全部楼层
本帖最后由 Lorierica 于 2020-7-3 23:41 编辑
20141303 发表于 2020-7-3 21:24
在MATLAB2019b可以运行了啊

那请问,我是想将这些输出值输入到21个数组之中,每一个数组有250×200个值,请问该怎么办
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-7-4 09:17:48 | 显示全部楼层
使azimuth为250×200的矩阵
回复此楼 已获打赏: 0 积分

举报

新手

14 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
 楼主| 发表于 2020-7-4 10:13:34 | 显示全部楼层
20141303 发表于 2020-7-4 09:17
使azimuth为250×200的矩阵

但是按照你写的代码的话,是不是就是i和j只循环了21次呢
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-7-4 10:41:28 | 显示全部楼层
可是i,j不是调用basestation结构体的x,y吗?
回复此楼 已获打赏: 0 积分

举报

新手

14 麦片

财富积分


050


3

主题

11

帖子

0

最佳答案
 楼主| 发表于 2020-7-4 11:14:21 | 显示全部楼层
20141303 发表于 2020-7-4 10:41
可是i,j不是调用basestation结构体的x,y吗?

哦哦,谢谢你,我写错了,应该是sgx(i)和sgy(j),base(t),,但是这样写的话就是索引超出矩阵维度了
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1638

帖子

347

最佳答案
  • 关注者: 81
发表于 2020-7-4 11:31:42 | 显示全部楼层 |此回复为最佳答案
仅供参考
  1. azimuth=[];
  2. JD={};
  3. basestation=struct('x',{1000,-57.7350000000000,-57.735,600,441.269,442.265000000000,-400,-557.735000000000,-557.735000000000,1100,942.265000000000,942.265000000000,900,-1057.73500000000,-1057.73500000000,600,442.265000000000,442.265000000000,-400,-557.735000000000,-557.735000000000},'y',{0,-100,100,900,801.242000000000,1000,900,800,1000,0,-100,100,0,-100,100,-900,-1000,-800,-900,-1000,-800});
  4. sgx=-1245:10:1245;
  5. sgy=-995:10:995;
  6. for t=1:21
  7.     for i=1:length(sgx)
  8.         for j=1:length(sgy)
  9.             azimuth(i,j)=getAntDir(basestation, sgx, sgy,t,i,j);
  10.         end        
  11.     end
  12.     JD{t}=azimuth;
  13. end

  14. function   azimuth=getAntDir(basestation, sgx, sgy,t,i,j)
  15. deltaLoc = (sgx(i)-basestation(t).x)+1i*(sgy(j)-basestation(t).y);%basestation.x为基站横坐标
  16. azimuth  = 90-angle(deltaLoc)/pi*180;
  17. azimuth  = azimuth+360*(azimuth<0);
  18. azimuth  = azimuth-1/3*pi;
  19. azimuth  = azimuth+360*(azimuth<0);
  20. end
复制代码
1.PNG
回复此楼 已获打赏: 2 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表