搜索内容 搜索用户

# 7 麦片

050

1主题 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

# 论坛优秀回答者

5主题 810最佳答案
• 关注者： 220

 系统明确告知你错误原因了啊，你的whie循环中     n=counter;     p=counter+1; 这种设置，与诸多调用如Q3(1,p), Q3(1,n)等不匹配啊 Q3一共只有5个元素，结果报错时n和p一个是6一个是7，调用并不存在的元素。 我对接触MATLAB时间较短的坛友的建议，都是： 1.最好预先接触过其他编程语言（比如本科生基本都会上C语言或者VB之类的课程），尽管语法有区别，但背后的算法思路是相似的。如果完全没接触过任何编程，那就得到图书馆借本基础书籍学习了。 2.有了上述的基础，写代码前最好先绘制一个流程框图，把诸如哪些量是已知的，哪一步要进行逻辑判断，采用何种循环语句，最后得到什么样的输出结果，等等，都清楚地列出来。尤其逻辑判断，毕竟我国大部分专业并不设置逻辑学这种课程，很多同学在这块就有所欠缺，没有框图对照检查的话，容易当局者迷。 3.按照框图写代码。运行后如果出现的结果与预期不符，应当做的事情就是逐行运行代码，并比照框图排查纠错。

# 7 麦片

050

1主题 0最佳答案
楼主| 发表于 2020-11-21 19:51:14 | 显示全部楼层
 TouAkira 发表于 2020-11-21 19:46 系统明确告知你错误原因了啊，你的whie循环中     n=counter;     p=counter+1; 好的谢谢坛友

# 7 麦片

050

1主题 0最佳答案
楼主| 发表于 2020-11-21 19:55:49 | 显示全部楼层
 TouAkira 发表于 2020-11-21 19:46 系统明确告知你错误原因了啊，你的whie循环中     n=counter;     p=counter+1; 那请问，如果我的while循环的设置n=counter; p=counter+1的形式不变，调用应该如何改变呢？虽然找到了错误原因，但是我不太清楚如何使之匹配。谢谢！

# 论坛优秀回答者

5主题 810最佳答案
• 关注者： 220

 839159742@qq.co 发表于 2020-11-21 07:55 那请问，如果我的while循环的设置n=counter; p=counter+1的形式不变，调用应该如何改变呢？虽然找到了错 ... 你看，这就是为什么我建议去做一份流程框图啊，别人光看代码是猜不出你的算法思路的。 我只能凭你预设 V4=zeros(1,3); 这种形式猜测你的思路，要么把新的迭代数据仍然往原始的1行3列结构中进行替换、要么就是补充新行令每行3个元素对应每轮迭代，但你后面代码却不是这两者而是往每行后面继续追加元素。 思路都不一样，还怎么提建议呢？

# 7 麦片

050

1主题 0最佳答案
楼主| 发表于 2020-11-21 20:16:46 | 显示全部楼层
 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哈哈~

 您需要登录后才可以回帖 登录 | 注册 本版积分规则 回帖后跳转到最后一页