声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1556|回复: 4

[编程技巧] 求助:非线性方程的解谢谢

[复制链接]
发表于 2009-2-24 10:31 | 显示全部楼层 |阅读模式

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

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

x
非线性方程求解
ms = 5; ns = 20 ; n2 =100; alfarad = 20;
y2min = -300; y2max = -240; zpeak = -46.9846; angle0 = 90;
angle=angle0*pi/180;
alfa = alfarad * pi / 180;           %将压力角转化为弧度制
rbs = 0.5 * ms * ns * cos(alfa);  %计算小齿轮基圆半径
ras = 0.5 * ms * ns + ms;            %计算小齿轮齿顶圆半径
q2s = ns /n2;                        %计算传动比
thetas0 = pi/(2*ns) - (tan(alfa) - alfa);%计算刀具齿槽对称线到渐开线起始点的角度参数:

y2 = linspace(y2min,y2max,10);
options = optimset('Display','off'); %fzeor函数显示设置:
y2=linspace(150,250,10);
syms eus us phistrans;
phi2trans = q2s * phistrans;
zmin = zpeak;
thetastrans = ((ras)^2 - (rbs)^2)^0.5 / rbs;
phithetatrans = phistrans + (thetas0 + thetastrans);  
phistransmax = PhisTransMax(zmin,rbs,thetastrans,thetas0,angle,q2s);
phistranslimits(:,2) = phistransmax * ones(1,10);  
Z2dot(1:10)=zpeak + 1/(1:10);
         
for k = 1:10
    phistranslimits(k,1) = PhisTransMax(z2dot(k,10),rbs,thetastrans,thetas0,angle,q2s);      
end

AA = sin(phithetatrans) - thetastrans * cos(phithetatrans);
BB = cos(phithetatrans) + thetastrans * sin(phithetatrans);

for k = 1:10
    yf2trans = @(phistrans,eus)(subs(y2(k) + rbs * (AA * sin(phi2trans) + BB * cos(angle) * cos(phi2trans)) + eus * sin(angle) * cos(phi2trans)));
    phistransnum(k,:) = linspace(phistranslimits(k,1),phistranslimits(k,2),10);
    for m = 1:10
       usnum(k,m) = fzero(yf2trans,0,options,phistransnum(k,m));        
    end
end

usnum


%子函数
function Key = PhisTransMax(z2star,rbs,thetastrans,thetas0,angle,q2s)

syms phithetatrans0;
Bb = cos(phithetatrans0) + thetastrans*sin(phithetatrans0);
us0 = rbs / (q2s * cos(phithetatrans0));

z2f=@(phithetatrans0)(subs(z2star + rbs * Bb * sin(angle) - us0 * cos(angle)));
options = optimset('Display','off');
z = fzero (z2f,0.5,options);
Key = z - (thetas0 + thetastrans);

求USNUM的值,不知道怎么的,老是出错,请各位大虾指点,谢谢了
回复
分享到:

使用道具 举报

发表于 2009-2-24 13:55 | 显示全部楼层

回复 楼主 xgxpizza 的帖子

非线性方程的求解,我帮你看看吧

为什么我是学机械的

只知道是齿轮,而不知道是什么模型啊
发表于 2009-2-24 13:57 | 显示全部楼层
LZ未给出报错讯息
发表于 2009-2-24 14:03 | 显示全部楼层

回复 楼主 xgxpizza 的帖子

我帮你看了一下
是很多数组的维数不对

实际上解决这种问题的方法很简单

就是注释比代码写的多,自己也能看出来

楼组应该很有编程经验的啊

但是我们看不动模型,就很难下手改

你自己多检查一下吧,帮不上忙不好意思

评分

1

查看全部评分

 楼主| 发表于 2009-2-24 14:57 | 显示全部楼层
谢谢各位了,上面是面齿轮的y坐标的方程
我想问下,符号函数不知道我用对没?有大虾解释下符号函数到底该怎么用?是否每次运行前都要清空其值?
谢谢各位了

{phistrans}
??? Error using ==> maple
Error, integer too large in context

Error in ==> sym.findsym at 33
v = maple('indets', sc ,'symbol');

Error in ==> sym.subs at 65
vars = findsym(OLDf);

Error in ==> @(phistrans,eus)(subs(y2(k)-rbs*(thetastrans*sin(phi2trans)*cos(phithetatrans)-cos(angle)*cos(phi2trans)*cos(phithetatrans)-sin(phi2trans)*sin(phithetatrans)-        thetastrans*cos(angle)*cos(phi2trans)*sin(phithetatrans))+eus*sin(angle)*cos(phi2trans)))


Error in ==> fzero at 379
        b = x + dx;  fb = FunFcn(b,varargin{:});

Error in ==> Untitled at 34
       usnum(k,m) = fzero(yf2trans,0.1,options,phistransnum(k,m));
这是它的报错信息,请大家多多指教,谢谢

[ 本帖最后由 ChaChing 于 2010-1-14 11:20 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-2 15:35 , Processed in 0.066531 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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