查看: 143|回复: 5|关注: 0

[已解决] 位置 2 处的索引超出数组边界(不能超出 5)。 出错 Untitled (line 59) Q3(1,p)=Q3(1,n);

[复制链接]

新手

7 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
本帖最后由 839159742@qq.co 于 2020-11-21 11:15 编辑

位置 2 处的索引超出数组边界(不能超出 5)。

出错 Untitled (line 59)
        Q3(1,p)=Q3(1,n);

——————————————————————————————————————————————这是问题描述
刚学习MATLAB,应该是数组维度不匹配的原因,希望坛友可以帮忙解决
——————————————————————————————个人猜测
clear
%---------------------Known Condition Parameters-----------------------%
V1=1.05;
LA1=0;
P2=-0.9;
Q2=-0.5;
P3=0.6;
P4=-0.4;
Q4=-0.1;
Y=[0.065-3.5i,-0.04+2i,-0.005+0.5i,-0.02+1i;-0.04+2i,0.06-4i,-0.02+2i,0;-0.005+0.5i,-0.02+2i,0.035-3.5i,-0.01+1i;-0.02+1i,0,-0.01+1i,0.03-2i];%Admittance Matrix
%---------------------Known Condition Parameters-----------------------%

%---------------------The First Iteration------------------------------%

V4=zeros(1,3);% Initial V4. The assumed initial variable.
V3=zeros(1,3);% Initial V3. The assumed initial variable.
V2=zeros(1,3);% Initial V2. The assumed initial variable.
Q3=zeros(1,3);% Initial Q3. The assumed initial variable.
V4(1,1)=1;% Assume V4 is 1 for first iteration
V3(1,1)=1;% Assume V3 is 1 for first iteration
V2(1,1)=1;% Assume V2 is 1 for first iteration
LA4=zeros(1,3);
LA3=zeros(1,3);
LA2=zeros(1,3);
counter=1;
diff4=1;
diff3=1;
diff2=1;

while 1
    n=counter;
    p=counter+1;
   
    %----------------The Calculation about V4
    if diff4<10^(-4)
        V4(1,p)=V4(1,n);
        LA4(1,p)=LA4(1,n);
    else
        V4 (1,p)=(((P4-Q4.*1i)./conj(V4 (1,n)))-(Y(4,1).*V1)-(Y(4,2).*V2 (1,n))-Y(4,3).*V3(1,n))./(Y(4,4)); %Calculate V4
        LA4(1,p)=atan(imag(V4 (1,p)./real(V4 (1,p)))); %Load angle of V4
        diff4=abs(LA4(1,p)-LA4(1,n));
    end
   
   
   if diff2<10^(-4)
        V2(1,p)=V2(1,n);
        LA2(1,p)=LA2(1,n);
        
    else
        V2 (1,p)=(((P2-Q2.*1i)./conj(V2 (1,n)))-(Y(2,1).*V1)-(Y(2,3).*V3 (1,n))-Y(2,4).*V4(1,p))./(Y(4,4)); % Calculate V2
        LA2(1,p)=atan(imag(V2 (1,p)./real(V2 (1,p)))) ;%Load angle of V3
        diff2=abs(LA2(1,p)-LA2(1,n));
   end
   
   
    if diff3<10^(-4)
        V3(1,p)=V3(1,n);
        LA3(1,p)=LA3(1,n);
        Q3(1,p)=Q3(1,n);

    else
        Q3 (1,n)=-imag(conj(V3(1,n)).*(Y(3,1).*V1+Y(3,2).*V2 (1,n)+Y(3,3).*V3 (1,n)+Y(3,4).*V4(1,n)));% Calculate Q3
        V3 (1,p)=(((P3-Q3(1,n).*1i)./conj(V3 (1,n)))-(Y(3,1).*V1)-(Y(3,2).*V2 (1,p))-Y(3,4).*V4(1,p))./(Y(3,3)); % Calculate V3
        LA3(1,p)=atan(imag(V3 (1,p)./real(V3 (1,p)))) ;
        V3(1,p)=1.*cos(LA3(1,p))+1i.*sin(LA3(1,p));
        diff3=abs(LA3(1,p)-LA3(1,n));
        
    end
   
    if diff4<10^(-4)&&diff3<10^(-4)&&diff2<10^(-4)      
        break;
    end
   
    counter=counter+1;
   
end
———————————————————————————————————————————————————————这是代码
文件也上传了,MATLABR2020a版本
再次谢谢大家


Untitled.m

2.34 KB, 下载次数: 0

回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2590

帖子

790

最佳答案
  • 关注者: 218
发表于 5 天前 | 显示全部楼层 |此回复为最佳答案
系统明确告知你错误原因了啊,你的whie循环中
    n=counter;
    p=counter+1;
这种设置,与诸多调用如Q3(1,p), Q3(1,n)等不匹配啊
Q3一共只有5个元素,结果报错时n和p一个是6一个是7,调用并不存在的元素。


我对接触MATLAB时间较短的坛友的建议,都是:

1.最好预先接触过其他编程语言(比如本科生基本都会上C语言或者VB之类的课程),尽管语法有区别,但背后的算法思路是相似的。如果完全没接触过任何编程,那就得到图书馆借本基础书籍学习了。

2.有了上述的基础,写代码前最好先绘制一个流程框图,把诸如哪些量是已知的,哪一步要进行逻辑判断,采用何种循环语句,最后得到什么样的输出结果,等等,都清楚地列出来。尤其逻辑判断,毕竟我国大部分专业并不设置逻辑学这种课程,很多同学在这块就有所欠缺,没有框图对照检查的话,容易当局者迷。

3.按照框图写代码。运行后如果出现的结果与预期不符,应当做的事情就是逐行运行代码,并比照框图排查纠错。
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
TouAkira 发表于 2020-11-21 19:46
系统明确告知你错误原因了啊,你的whie循环中
    n=counter;
    p=counter+1;

好的谢谢坛友
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
TouAkira 发表于 2020-11-21 19:46
系统明确告知你错误原因了啊,你的whie循环中
    n=counter;
    p=counter+1;

那请问,如果我的while循环的设置n=counter; p=counter+1的形式不变,调用应该如何改变呢?虽然找到了错误原因,但是我不太清楚如何使之匹配。谢谢!
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2590

帖子

790

最佳答案
  • 关注者: 218
发表于 5 天前 | 显示全部楼层
839159742@qq.co 发表于 2020-11-21 07:55
那请问,如果我的while循环的设置n=counter; p=counter+1的形式不变,调用应该如何改变呢?虽然找到了错 ...

你看,这就是为什么我建议去做一份流程框图啊,别人光看代码是猜不出你的算法思路的。

我只能凭你预设 V4=zeros(1,3); 这种形式猜测你的思路,要么把新的迭代数据仍然往原始的1行3列结构中进行替换、要么就是补充新行令每行3个元素对应每轮迭代,但你后面代码却不是这两者而是往每行后面继续追加元素。

思路都不一样,还怎么提建议呢?
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

7 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
TouAkira 发表于 2020-11-21 20:03
你看,这就是为什么我建议去做一份流程框图啊,别人光看代码是猜不出你的算法思路的。

我只能凭你预设 V ...

    if diff3<10^(-4)
        V3(1,p)=V3(1,n);
        LA3(1,p)=LA3(1,n);
        Q3(1,p)=1;
        Q3(1,p)=Q3(1,n);
我按照我的思路补充了Q3(1,p)=1;
现在解决问题了,谢谢!以后我从流程图开始O(∩_∩)O哈哈~
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

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

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