声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1396|回复: 0

[编程技巧] 新手求助,帮忙看看哪出错了!

[复制链接]
发表于 2007-5-21 14:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
那位老大会用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 编辑 ]
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-24 09:22 , Processed in 0.099434 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表