24小时热门版块排行榜    

查看: 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循环啊?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +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个元素,如果个数不等就会报这个错误.
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2012-09-06 20:06:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 4 个回答

GGhigh

银虫 (小有名气)

我再算F(M)的时候有下面错误提示
In an assignment  A(I) = B, the number of elements in B and
I must be the same.
2楼2012-09-06 17:47:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

GGhigh

银虫 (小有名气)

引用回帖:
3楼: Originally posted by libralibra at 2012-09-06 20:06:37
把gosub改成调用子函数,所有用到的参数用函数定义来传递
goto前面出现的标号改成loop,中间的if...goto 后面的标号 改为循环终止的break条件
M=M+1;可能M是下标,自加,
matlab有while循环,可以用死循环while 1
下 ...

谢谢!我去尝试一下!哈哈!
4楼2012-09-07 09:07:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见