wca221 发表于 2007-5-21 14:32

新手求助,帮忙看看哪出错了!

那位老大会用matlab编程,看看下面这个怎么弄,wca221@163.com,不胜感激,谢谢
下面是我编的程序,帮忙看看,哪处错了?
%f=input('Please Enter f=');
syms x;
f=0.4;
x1=0.01;
x2=0.002;
g=10;
pii=3.1415926;

mome_v=0;
for w=21:100
    %to get fik
    fy=8*x2*w*w*(sin(x)+x1/16/x2)^2 - 4*x2*w*w - x1*x1*w*w/32/x2-f*g;
      fy=subs(fy);
      fik=solve(fy,'x');
      fik=subs(fik);
      fik=fik(1)*isreal(fik(1))+fik(2)*isreal(fik(2));

    time=10;
    first=1;
    while(first==1 | time>0 & fie>2*pii+fik)
      first=0;
      time=time-1;
      %to get fim
      fy=-w*x1*(cos(x)-cos(fik))-2*w*x2*(sin(2*x)-sin(2*fik))-f*g/w*(x-fik);
            fy=subs(fy);
            fim=solve(fy,'x');
            fim=subs(fim);
            fim=fim(1)*isreal(fim(1))+fim(2)*isreal(fim(2));
      

      if(8*x2*w*w*(sin(fim)+x1/16/x2)^2 - 4*x2*w*w - x1*x1*w*w/32/x2>-f*g)
            %to get fiq
            fy=8*x2*w*w*(sin(x)+x1/16/x2)^2 - 4*x2*w*w - x1*x1*w*w/32/x2+f*g;
                fy=subs(fy);
                fiq=solve(fy,'x');
                fiq=subs(fiq);
                fiq=fiq(1)*(fiq(1)<0)+fiq(2)*(fiq(2)<0)+2*pi;
      else
            fiq=fim;
            %to get fie
            fy=-w*x1*(cos(x)-cos(fiq))-2*w*x2*(sin(2*x)-sin(2*fiq))+f*g/w*(x-fiq);
                fy=subs(fy);
                fie=solve(fy,'x');
                fie=subs(fie);
                fie=fie(1)*isreal(fie(1))+fie(2)*isreal(fie(2));

      end

      %break;
      fik=fie-2*pi;
    end
          w
         k=fik*180/3.1415926
      m=fim*180/3.1415926
      q=fiq*180/3.1415926
      e=fie*180/3.1415926
    vk=0.5/pii*( -w*x1*(sin(fim)-sin(fik))+w*x1*(fim-fik)*cos(fik)+w*x2*(cos(2*fim)-cos(2*fik)) + 2*w*x2*(fim-fik)*sin(2*fik)-f*g*(fim-fik)*(fim-fik)/2/w )
    vq=0.5/pii*( -w*x1*(sin(fie)-sin(fiq))+w*x1*(fie-fiq)*cos(fiq)+w*x2*(cos(2*fie)-cos(2*fiq)) + 2*w*x2*(fie-fiq)*sin(2*fiq)+f*g*(fie-fiq)*(fie-fiq)/2/w )
    v=vk+vq
    if(v>mome_v)
      mome_v=v;
      mome_w=w;
    end
end
mome_v
mome_w



要求

w取20--100,f=0.4,g=10, x1=0.01,x2=0.002
(1)由方程 w*w*x1*sin(fik)-4*w*w*x2*cos(2*fik)-f*g=0
求出 fik

(2)再由方程 -w*x1*(cos(fim)-cos(fik))-2*w*x2*(sin(2*fim)-sin(2*fik))-f*g(fim-fik)/w=0
求出 fim


(3)然后当-8*x2*w*w*(sin(fik)+x1/16/x2)*(sin(fik)+x1/16/x2)+4*x2*w*w+x1*x1*w*w/32/x2-f*g〈0 时
由方程 w*w*x1*sin(fiq)-4*w*w*x2*cos(2*fiq)+f*g=0
求出 fiq且fiq=fiq+2pi

如果-8*x2*w*w*(sin(fik)+x1/16/x2)*(sin(fik)+x1/16/x2)+4*x2*w*w+x1*x1*w*w/32/x2-f*g〈0 时
   fiq=fim
(4)然后 由方程 -w*x1*(cos(fim)-cos(fik))-2*w*x2*(sin(2*fim)-sin(2*fik))+f*g(fim-fik)/w=0
求出 fie


(5)如果 fie>2*pi+fik
则 令fik=fie-2*pi
然后 重复(2)-----(4) 10次

   如果 fie<2*pi+fik
则返回数据
(6) vk=0.5/pi*( -w*x1*(sin(fim)-sin(fik))+w*x1*(fim-fik)*cos(fik)+w*x2*(cos(2*fim)-cos(2*fik)) + 2*w*x2*(fim-fik)*sin(2*fik)-f*g*(fim-fik)*(fim-fik)/2/w )
    vq=0.5/pi*( -w*x1*(sin(fie)-sin(fiq))+w*x1*(fie-fiq)*cos(fiq)+w*x2*(cos(2*fie)-cos(2*fiq)) + 2*w*x2*(fie-fiq)*sin(2*fiq)+f*g*(fie-fiq)*(fie-fiq)/2/w )
    v=vk+vq
最后要得到一系列 fik fim fiq fie以及vk,vq ,v



其中fik fim fiq fie 都是实数,且fik<pi/2,fiq<2*pi

[ 本帖最后由 xinyuxf 于 2007-5-21 14:58 编辑 ]
页: [1]
查看完整版本: 新手求助,帮忙看看哪出错了!