| 查看: 881 | 回复: 3 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
GGhigh银虫 (小有名气)
|
[求助]
basic程序改写成matlab程序!
|
||
|
最近在改写一个basic的程序,改写成matlab下运行 basic(部分程序): 1280 CO=0;T=0;M=0;V=1;CH=1;AC=0.001; %function evaluation; 1290 BA=C(M+1); 1300 K2=WW*WW-BA*BA; 1310 SS=sign(K2); 1320 if SS=1 and abs(K2)>0.01 then K=sqrt(K2) 1330 if SS=-1 and abs(K2)>0.01 then K=sqrt(-K2) 1340 if SS=0 or abs(K2)<=0.01 1350 X=WW/R ; MM=1; gosub 2220 %这里还未调试 1360 Y1=J1;Y2=J2;Y3=J3;Y4=J4; 1370 X=K;MM=SS;gosub 2220 1380 Z1=J1;Z2=J2;Z3=J3;Z4=J4; 1390 X=WW;MM=1;gosub 2220 1400 SN=J2*Y3-Y1*J4; 1410 SD=J1*Y3-Y1*J3; 1420 S=WW*SN/SD; 1430 FT=K*Z2/Z1; 1440 M=M+1; 1450 F(M)=K*K2*SN*Z1*Z2/WW-K^2*Z2^2*SD 1460 F(M)=F(M)+N^2*BA^2*Z1^2*SD/(WW*WW); 1470 if V==1 goto 1500 1480 if M>=2 goto 1660 1490 goto 1290 1500 BA=BA+0.02*CH; 1510 if BA>=WW then BA=BA-0.01;CH=-1; 1520 if M=1 GOTO 1300 1530 SS==sign(F(M));ST==sign(F(M-1)); 1540 if SS==ST then F(M-1)=F(M);M=M-1;GOTO 1300 1550 C(1)=BA-0.005*CH; 1560 C(2)=BA-0.01*CH; 1570 V=0;T=T+1;M=0 1580 GOTO 1290 ........ 1660 ...(1660是另外一个子程序了) 我改写的matlab程序如下: CO=0;T=0;M=0;V=1;CH=1;AC=0.001; %function evaluation; BA=C(M+1); K2=WW*WW-BA*BA; SS=sign(K2); if (SS==1 & abs(K2)>0.01) K=sqrt(K2); end if (SS==-1 & abs(K2)>0.01) K=sqrt(-K2); end if (SS==0 | abs(K2)<=0.01) CO=CO+1; %修正MODIFICATION;(这是2040) if CO>2 disp ('error') return else disp('MODIFICATION') BA=BA-0.002; return end end X=WW/R ; MM=1; bessel; (这里就是子程序2220) Y1=J1;Y2=J2;Y3=J3;Y4=J4; X=K;MM=SS; bessel; Z1=J1;Z2=J2;Z3=J3;Z4=J4; X=WW;MM=1; bessel; SN=J2*Y3-Y1*J4; SD=J1*Y3-Y1*J3; S=WW*SN/SD; FT=K*Z2/Z1; M=M+1; F(M)=K*K2*SN*Z1*Z2/WW-K^2*Z2^2*SD;%有问题 F(M)=F(M)+N^2*BA^2*Z1^2*SD/(WW*WW); if V==1 BA=BA+0.02*CH; if BA>=WW BA=BA-0.01;CH=-1; end if M==1 return else SS==sign(F(M));ST==sign(F(M-1)); if SS==ST F(M-1)=F(M); M=M-1; return else C(1)=BA-0.005*CH; C(2)=BA-0.01*CH; V=0;T=T+1;M=0; return end end end 问题是:1.在matlab中我如何能够像basic任意跳转,例如basic中的goto 1290,从第三层的嵌套跳到最外层,或者次外层! 2.在basic中的那一句M=M+1;F(M)=........;F(M)=........什么意思?自身叠加?但是貌似没有给到上限M值。matlab无法用while循环啊? |
» 猜你喜欢
参与限项
已经有3人回复
假如你的研究生提出不合理要求
已经有7人回复
实验室接单子
已经有4人回复
全日制(定向)博士
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
不自信的我
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
北核录用
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
matlab语言改写成C语言
已经有18人回复
libralibra
至尊木虫 (著名写手)
骠骑将军
- 程序强帖: 40
- 应助: 817 (博后)
- 金币: 12914.1
- 红花: 64
- 帖子: 2238
- 在线: 287.3小时
- 虫号: 696514
- 注册: 2009-02-05
- 专业: 计算机软件
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢提供建议 2012-09-06 21:22:53
GGhigh: 金币+10, ★★★很有帮助 2012-09-07 09:51:00
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢提供建议 2012-09-06 21:22:53
GGhigh: 金币+10, ★★★很有帮助 2012-09-07 09:51:00
|
把gosub改成调用子函数,所有用到的参数用函数定义来传递 goto前面出现的标号改成loop,中间的if...goto 后面的标号 改为循环终止的break条件 M=M+1;可能M是下标,自加, matlab有while循环,可以用死循环while 1 下面这个错误 In an assignment A(I) = B, the number of elements in B and I must be the same. 是说: 用A(I)=B来将向量/矩阵A的下标I表示的元素整体替换为向量/矩阵B时,B的元素个数必须与下标I的长度相等. 或者说你要替换A中的5个元素,B也必须有5个元素,如果个数不等就会报这个错误. |

3楼2012-09-06 20:06:37
GGhigh
银虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 346.5
- 散金: 200
- 帖子: 86
- 在线: 138.7小时
- 虫号: 1302112
- 注册: 2011-05-21
- 性别: GG
- 专业: 物理电子学
2楼2012-09-06 17:47:19
GGhigh
银虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 346.5
- 散金: 200
- 帖子: 86
- 在线: 138.7小时
- 虫号: 1302112
- 注册: 2011-05-21
- 性别: GG
- 专业: 物理电子学
4楼2012-09-07 09:07:57












回复此楼
谢谢!我去尝试一下!哈哈!