24小时热门版块排行榜    

查看: 1338  |  回复: 7

Kevin1987s

新虫 (初入文坛)

[求助] 求大神帮我改一下下面的程序!matlab迭代法的 不知道错在哪里!

x(1)=210;
y(1)=-90;
z(1)=-620;
p(1)=0.2988;
a(1)=-0.1096;
b(1)=0.5996;
c(1)=0.3507;
d(1)=-0.3882;          %%设定初值
for      i=2:101;        
a(i-1)=-0.1096+(i-1)*0.002648;
b(i-1)=0.5996+(i-1)*0.000269;
c(i-1)=0.3507+(i-1)*0.004468;
d(i-1)=-0.3882+(i-1)*0.007478;        %%第(i-1)的角度值

A(i-1)=x(i-1)+122.9075-48*sin(p(i-1)+0.87)+62*sin(p(i-1))-(2^(-1/2))*(265+375*sin(a(i-1)));
B(i-1)=y(i-1)+48.55-48*cos(p(i-1)+0.87)+62*cos(p(i-1))-(2^(-1/2))*(285+375*sin(a(i-1)));
C(i-1)=z(i-1)-375*cos(a(i-1));

D(i-1)=x(i-1)-7.9075-48*sin(p(i-1)+0.87)+62*sin(p(i-1))+(2^(-1/2))*(265+375*sin(b(i-1)));
E(i-1)=y(i-1)+48.55-48*cos(p(i-1)+0.87)+62*cos(p(i-1))-(2^(-1/2))*(285+375*sin(b(i-1)));
F(i-1)=z(i-1)-375*cos(b(i-1));

G(i-1)=x(i-1)-7.9075-48*sin(p(i-1)+0.87)+(2^(-1/2))*(265+375*sin(c(i-1)));
H(i-1)=y(i-1)-48.55-48*cos(p(i-1)+0.87)+(2^(-1/2))*(285+375*sin(c(i-1)));
K(i-1)=z(i-1)-375*cos(c(i-1));

L(i-1)=x(i-1)+122.9075-48*sin(p(i-1)+0.87)-(2^(-1/2))*(265+375*sin(d(i-1)));
M(i-1)=y(i-1)-48.55-48*cos(p(i-1)+0.87)+(2^(-1/2))*(285+375*sin(d(i-1)));
N(i-1)=z(i-1)-375*cos(d(i-1));

P(i-1)=375*(2^(1/2)*A(i-1)*cos(a(i-1))+2^(1/2)*B(i-1)*cos(a(i-1))-2*C(i-1)*sin(a(i-1)));
Q(i-1)=375*(-2^(1/2)*D(i-1)*cos(b(i-1))+2^(1/2)*E(i-1)*cos(b(i-1))+2*F(i-1)*sin(b(i-1)));
R(i-1)=-375*(2^(1/2)*G(i-1)*cos(c(i-1))+2^(1/2)*H(i-1)*cos(c(i-1))+2*K(i-1)*sin(c(i-1)));
S(i-1)=375*(2^(1/2)*L(i-1)*cos(d(i-1))-2^(1/2)*M(i-1)*cos(d(i-1))-2*N(i-1)*sin(d(i-1)));

T(i-1)=-(A(i-1)*(48*cos(p(i-1)+0.87)-62*cos(p(i-1)))+B(i-1)*(48*sin(p(i-1)+0.87))-62*sin(p(i-1)));
U(i-1)=-(D(i-1)*(48*cos(p(i-1)+0.87)-62*cos(p(i-1)))+E(i-1)*(48*sin(p(i-1)+0.87))-62*sin(p(i-1)));
V(i-1)=-G(i-1)*48*cos(p(i-1)+0.87)+H(i-1)*48*sin(p(i-1)+0.87);
W(i-1)=-L(i-1)*48*cos(p(i-1)+0.87)+M(i-1)*48*sin(p(i-1)+0.87);  && A-W的表达式

x(i)=x(i-1)+2*A(i-1)*0.151796/P(i-1)+2*B(i-1)*0.01542/P(i-1)+2*C(i-1)*0.256127/P(i-1)+2*T(i-1)*0.428675/P(i-1);
y(i)=y(i-1)+2*D(i-1)*0.151796/Q(i-1)+2*E(i-1)*0.01542/Q(i-1)+2*F(i-1)*0.256127/Q(i-1)+2*U(i-1)*0.428675/Q(i-1);
z(i)=z(i-1)+2*G(i-1)*0.151796/R(i-1)+2*H(i-1)*0.01542/R(i-1)+2*K(i-1)*0.256127/R(i-1)+2*V(i-1)*0.428675/R(i-1);
p(i)=p(i-1)+2*L(i-1)*0.151796/S(i-1)+2*M(i-1)*0.01542/S(i-1)+2*N(i-1)*0.256127/S(i-1)+2*W(i-1)*0.428675/S(i-1);      %%所求的x y z p的表达式

[x(i),y(i),z(i),p(i)]      %%输出x y z p

end

x y z p初值已知,迭代100次   上面这个程序运算出来貌似不是我要的结果。。。迭代循环是不是有问题啊?谢谢大神!

[ Last edited by Kevin1987s on 2012-11-15 at 11:03 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csl_2012

捐助贵宾 (初入文坛)

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2012-11-15 21:03:40
jjdg: 编辑内容 2012-11-16 10:05
你好,我刚看了你修改过的程序,你的目的应该是一直x,y,z,p的初值,然后经过迭代(经过A-W的中间处理),最后得到迭代100次后的x,y,z,p值,如果正常的话,计算结果应该逐渐趋于某一组值,即收敛。
你的程序中a(i-1)=-0.1096+(i-1)*0.002648是不是应该修改为:
a(i-1)=-0.1096+(i-2)*0.002648,因为i=2时,a(1)=-0.1096.
修改后的程序如下:
CODE:
%迭代法
clear
clc

x1=210;
y1=-90;
z1=-620;
p1=0.2988;
% a1=-0.1096;
% b1=0.5996;
% c1=0.3507;
% d1=-0.3882;          %%设定初值

for  i=1:100      
    a=-0.1096+(i-1)*0.002648;
    b=0.5996+(i-1)*0.000269;
    c=0.3507+(i-1)*0.004468;
    d=-0.3882+(i-1)*0.007478;        %%第(i-1)的角度值

    A1=x1+122.9075-48*sin(p1+0.87)+62*sin(p1)-(2^(-1/2))*(265+375*sin(a));
    B1=y1+48.55-48*cos(p1+0.87)+62*cos(p1)-(2^(-1/2))*(285+375*sin(a));
    C1=z1-375*cos(a);

    D1=x1-7.9075-48*sin(p1+0.87)+62*sin(p1)+(2^(-1/2))*(265+375*sin(b));
    E1=y1+48.55-48*cos(p1+0.87)+62*cos(p1)-(2^(-1/2))*(285+375*sin(b));
    F1=z1-375*cos(b);

    G1=x1-7.9075-48*sin(p1+0.87)+(2^(-1/2))*(265+375*sin(c));
    H1=y1-48.55-48*cos(p1+0.87)+(2^(-1/2))*(285+375*sin(c));
    K1=z1-375*cos(c);

    L1=x1+122.9075-48*sin(p1+0.87)-(2^(-1/2))*(265+375*sin(d));
    M1=y1-48.55-48*cos(p1+0.87)+(2^(-1/2))*(285+375*sin(d));
    N1=z1-375*cos(d);

    P1=375*(2^(1/2)*A1*cos(a)+2^(1/2)*B1*cos(a)-2*C1*sin(a));
    Q1=375*(-2^(1/2)*D1*cos(b)+2^(1/2)*E1*cos(b)+2*F1*sin(b));
    R1=-375*(2^(1/2)*G1*cos(c)+2^(1/2)*H1*cos(c)+2*K1*sin(c));
    S1=375*(2^(1/2)*L1*cos(d)-2^(1/2)*M1*cos(d)-2*N1*sin(d));

    T1=-(A1*(48*cos(p1+0.87)-62*cos(p1))+B1*(48*sin(p1+0.87))-62*sin(p1));
    U1=-(D1*(48*cos(p1+0.87)-62*cos(p1))+E1*(48*sin(p1+0.87))-62*sin(p1));
    V1=-G1*48*cos(p1+0.87)+H1*48*sin(p1+0.87);
    W1=-L1*48*cos(p1+0.87)+M1*48*sin(p1+0.87);  % A-W的表达式

    x2=x1+2*A1*0.151796/P1+2*B1*0.01542/P1+2*C1*0.256127/P1+2*T1*0.428675/P1;
    y2=y1+2*D1*0.151796/Q1+2*E1*0.01542/Q1+2*F1*0.256127/Q1+2*U1*0.428675/Q1;
    z2=z1+2*G1*0.151796/R1+2*H1*0.01542/R1+2*K1*0.256127/R1+2*V1*0.428675/R1;
    p2=p1+2*L1*0.151796/S1+2*M1*0.01542/S1+2*N1*0.256127/S1+2*W1*0.428675/S1;      %%所求的x y z p的表达式
  
    x1=x2;  %迭代
    y1=y2;
    z1=z2;
    p1=p2;
%     [x(i),y(i),z(i),p(i)]      %%输出x y z p
end
disp('x2=');
disp(x2)
disp('y2=')
disp(y2)
disp('z2=')
disp(z2)
disp('p2=')
disp(p2)

计算结果:
x2=
  196.4266

y2=
  -92.4946

z2=
-619.1816

p2=
   -1.2086

希望对你有用。

[ Last edited by jjdg on 2012-11-16 at 10:05 ]
2楼2012-11-15 17:54:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Kevin1987s

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by csl_2012 at 2012-11-15 17:54:28
你好,我刚看了你修改过的程序,你的目的应该是一直x,y,z,p的初值,然后经过迭代(经过A-W的中间处理),最后得到迭代100次后的x,y,z,p值,如果正常的话,计算结果应该逐渐趋于某一组值,即收敛。
你的程序中a(i-1)= ...

太感谢您了!可以求disp(x2),怎么求disp(x100)呢?把里面的2改了就算不出来了,小弟新手,刚用ml,谢谢指点!

[ 发自手机版 http://muchong.com/3g ]
3楼2012-11-15 19:47:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csl_2012

捐助贵宾 (初入文坛)


jjdg: 金币+1, 感谢参与 2012-11-16 10:05:13
我计算的就是x100,在迭代过程中,每次x2在x1的基础上计算,你要的迭代100次,我最后输出的就是迭代100次后的结果。x1,x2只是变量而已,你好好看看程序就明白了。
4楼2012-11-15 22:02:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Kevin1987s

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by csl_2012 at 2012-11-15 22:02:46
我计算的就是x100,在迭代过程中,每次x2在x1的基础上计算,你要的迭代100次,我最后输出的就是迭代100次后的结果。x1,x2只是变量而已,你好好看看程序就明白了。

谢谢您!那就是这个方法不能得到我预计的结果。。。还得换个思路。。。

[ 发自手机版 http://muchong.com/3g ]
5楼2012-11-15 22:38:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Kevin1987s

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by csl_2012 at 2012-11-15 22:02:46
我计算的就是x100,在迭代过程中,每次x2在x1的基础上计算,你要的迭代100次,我最后输出的就是迭代100次后的结果。x1,x2只是变量而已,你好好看看程序就明白了。

我想问一下,您帮我改的这个程序是不是类似于  x2=x1+t1(根随i变化的方程),x3=x2+t2...
x100=x99+t99,  是这个意思么?

[ 发自手机版 http://muchong.com/3g ]
6楼2012-11-15 22:58:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csl_2012

捐助贵宾 (初入文坛)


jjdg: 金币+1, 感谢参与 2012-11-16 10:05:00
是的,你可以找本数值分析的书看看,有关于迭代法的详细介绍。
7楼2012-11-15 23:18:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Kevin1987s

新虫 (初入文坛)

引用回帖:
7楼: Originally posted by csl_2012 at 2012-11-15 23:18:41
是的,你可以找本数值分析的书看看,有关于迭代法的详细介绍。

好的,太感谢了!嘻嘻~

[ 发自手机版 http://muchong.com/3g ]
8楼2012-11-16 00:10:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Kevin1987s 的主题更新
信息提示
请填处理意见