找回密码
 注册
Simdroid-非首页
查看: 362|回复: 21

matlab中赋初值的问题

[复制链接]
发表于 2009-4-28 10:01:29 | 显示全部楼层 |阅读模式 来自 山西太原
本帖最后由 ljelly 于 2009-4-29 09:23 编辑

各位前辈好,我主要是在这个程序的初值问题给难住了,您能不能帮我看看初值该给多少?
一下是程序:function f=d1(x)%此程序是求q02和Q02
a=x(1);
b=x(2);
dm2=0.8342;
S2=16.5065;
a02=-0.2966;
r02=19.05;
XB2=0.3864;
r2=[(r02-S2*sin(a02))*sin(a-b)+S2*cos(a),(-r02+S2*sin(a02))*cos(a-b)+S2*sin(a),-(S2*cos(a02)+XB2)];
p2=[cos(dm2),0,sin(dm2)];
b=cross(r2,p2);
c=norm(b);
d=r2*p2';
f(1)=c-12.8681
f(2)=d-7.8572
end
主要是a、b的初值问题
 楼主| 发表于 2009-4-28 12:06:27 | 显示全部楼层 来自 山西太原
Simdroid开发平台
大家帮帮忙
回复 不支持

使用道具 举报

发表于 2009-4-28 14:02:25 | 显示全部楼层 来自 浙江杭州
问题也没说清楚呀,给a、b赋初值的目的是什么呀,不知道目的a、b可以赋任意初值
回复 不支持

使用道具 举报

发表于 2009-4-28 14:48:47 | 显示全部楼层 来自 浙江杭州
不给注释,又没有多长时间就在催。没有人有义务给你解答的,另外病人急而医生不急,你再说急也没有用的。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-28 21:07:17 | 显示全部楼层 来自 河南郑州
不好意思,我真是太急了!现在我补充一下
这是一个齿面接触分析中的一部分程序。a和b表示角度,单位是弧度,现在问题就是无论赋什么样的初值,最后程序运行完,总有:Optimizer appears to be converging to a point which is not a root.
Relative function value changing by less than max(options.TolFun^2,eps) but
sum-of-squares of function values is greater than or equal to sqrt(options.TolFun)
Try again with a new starting guess.补充:是用fsolve解的。
麻烦大家了!非常感谢!
a应该是正的,b是负的
a在0与pi/2之间
b在0与-pi/2之间
希望大家帮帮忙!谢谢
回复 不支持

使用道具 举报

发表于 2009-4-28 21:31:55 | 显示全部楼层 来自 安徽合肥
f=d1([pi/3,-pi/4])

f =

   26.8722


f =

   26.8722    1.1990


f =

   26.8722    1.1990
  算了下,是上面结果。不知道对不对。
回复 不支持

使用道具 举报

发表于 2009-4-28 21:49:06 | 显示全部楼层 来自 甘肃兰州
在齿轮里面进行赋值,一般要根据设计所提供的经验值,在这个经验值的范围内进行赋值的,否则即使求解了也没意义,你最好看看这两个角的范围通常是多少,然后取最优解
回复 不支持

使用道具 举报

发表于 2009-4-28 23:39:06 | 显示全部楼层 来自 浙江杭州
你的方程不对,可能参数取值有问题

由f(2)可得,cos(a)=(19.83687533-16.03809135*sin(a-b))/11.08857984,代入f(1),可求得cos(a)=-1.55729672,超出余弦函数的值域,无解。

你再检查一下方程吧。


不好意思,我真是太急了!现在我补充一下
这是一个齿面接触分析中的一部分程序。a和b表示角度,单位是弧度,现在问题就是无论赋什么样的初值,最后程序运行完,总有:Optimizer appears to be converging to a poin ...
395543576 发表于 2009-4-28 21:07
回复 不支持

使用道具 举报

发表于 2009-4-29 08:53:48 | 显示全部楼层 来自 河南郑州
再补充下:程序应该是这样的,f(2)有点改变。麻烦大家再帮我看看!谢谢!
function f=d1(x)
a=x(1);
b=x(2);
dm2=0.8342;
S2=16.5065;
a02=-0.2966;
r02=19.05;
XB2=0.3864;
r2=[(r02-S2*sin(a02))*sin(a-b)+S2*cos(a),(-r02+S2*sin(a02))*cos(a-b)+S2*sin(a),-(S2*cos(a02)+XB2)];
p2=[cos(dm2),0,sin(dm2)];
b=cross(r2,p2);
c=norm(b)
d=r2*p2'
f(1)=c-12.8681
f(2)=d+9.7638
end
回复 不支持

使用道具 举报

发表于 2009-4-29 09:14:13 | 显示全部楼层 来自 甘肃兰州
>>  f=d1([pi/4,-pi/4])
c =
   38.9835

d =
   11.8992

f =
   26.1154

f =
   26.1154   21.6630

f =
   26.1154   21.6630
上面是我按照你给的函数输入了值,所得到的结果,具体我们没法验证对不对,因为首先我们不知道你的方程是什么意思,而且参数的具体取值范围我们也不知道,机械手册上应该有角度的限制范围的,还有如果你要求最优值那么就需要再做其他的了 9# wangshunihao
回复 不支持

使用道具 举报

发表于 2009-4-29 09:23:56 | 显示全部楼层 来自 甘肃兰州
我把你给的函数参数形式调整了一下,如下
function f=d1(x1,x2)
a=x1;
b=x2;
dm2=0.8342;
S2=16.5065;
a02=-0.2966;
r02=19.05;
XB2=0.3864;
r2=[(r02-S2*sin(a02))*sin(a-b)+S2*cos(a),(-r02+S2*sin(a02))*cos(a-b)+S2*sin(a),-(S2*cos(a02)+XB2)];
p2=[cos(dm2),0,sin(dm2)];
b=cross(r2,p2);
c=norm(b)
d=r2*p2'
f1=c-12.8681
f2=d+9.7638
end
输入并得到结果>> f=d1(pi/4,-pi/4)

c =

   38.9835


d =

   11.8992


f1 =

   26.1154


f2 =

   21.6630
这个结果和我用笔计算你的参数得到的结果一致了
回复 不支持

使用道具 举报

发表于 2009-4-29 09:33:14 | 显示全部楼层 来自 甘肃兰州
进一步调整如下
function f=d1(x)
f=zeros(1,2);
a=x(1);
b=x(2);
dm2=0.8342;
S2=16.5065;
a02=-0.2966;
r02=19.05;
XB2=0.3864;
r2=[(r02-S2*sin(a02))*sin(a-b)+S2*cos(a),(-r02+S2*sin(a02))*cos(a-b)+S2*sin(a),-(S2*cos(a02)+XB2)];
p2=[cos(dm2),0,sin(dm2)];
b=cross(r2,p2);
c=norm(b)
d=r2*p2'
f1=c-12.8681;
f2=d+9.7638;
f=[f1 f2];
end
输入并得到结果如下>> f=d1([pi/4,-pi/4])

c =

   38.9835


d =

   11.8992


f =

   26.1154   21.6630
完毕
回复 不支持

使用道具 举报

发表于 2009-4-29 10:01:23 | 显示全部楼层 来自 黑龙江哈尔滨
本帖最后由 gengliwei.happy 于 2009-4-29 10:04 编辑

我把LS的程序粘到MATLAB里面好像是还有问题,不知道怎么回事,初学,不太懂,呵呵,学习一下
提示如下:
??? Input argument "x" is undefined.
Error in ==> d1 at 3
a=x(1);

%%%刚才又试了一下,好使,看来是对函数不太了解,不能直接运行function,不好意思。
回复 不支持

使用道具 举报

发表于 2009-4-29 10:14:39 | 显示全部楼层 来自 河南郑州
我是想让f(1)和f(2)都接近于0,因为
f(1)=c-12.8681=0
f(2)=d+9.7638=0
是方程组,当然都为0最好,接近0就可以。
回复 不支持

使用道具 举报

发表于 2009-4-29 10:18:48 | 显示全部楼层 来自 河南郑州
程序的目的就是想找到一对合适的a和b,使其满足f1=0和f2=0,拜托了!
回复 不支持

使用道具 举报

发表于 2009-4-29 11:24:14 | 显示全部楼层 来自 浙江杭州
我们鼓励新手自学。你可以看看matlab有关函数的知识。比如函数有哪些形式,如何调用。

lz的程序的前二句为
a=x(1);
b=x(2);

可以看出,参数x是由2个元素组成的,因此x的形式应为x=[x(1) x(2)]。


我把LS的程序粘到MATLAB里面好像是还有问题,不知道怎么回事,初学,不太懂,呵呵,学习一下
提示如下:
??? Input argument "x" is undefined.
Error in ==> d1 at 3
a=x(1);

%%%刚才又试了一下,好使,看来 ...
gengliwei.happy 发表于 2009-4-29 10:01
回复 不支持

使用道具 举报

发表于 2009-4-29 14:41:09 | 显示全部楼层 来自 河南郑州
我用的是fsolve解的,我的function函数是个M文件,然后在命令窗口内输入:x0=[0 0];x=fsolve(@d1,x0)就会出现一些列结果,但最终会出现:重试一个迭代初值。我现在的问题就是找不到合适的初值来迭代,试过好多也没找到。
另外,这两个角度不是标准的,刀盘转角和一个接触点的相位角,因此没有什么范围,也没有什么标准可查。我从我的图上只能感觉到a是正的,b是负的。一般,以逆时针为正,顺时针为负,所以我推测。
补充:我用图上的角度试验了,但结果还是不对。
真的是麻烦各位!如果有什么说得不清楚的地方,可以告诉我,我再补充!谢谢!
回复 不支持

使用道具 举报

发表于 2009-4-29 14:45:29 | 显示全部楼层 来自 河南郑州
我曾经也感觉到是不是方程本身不对,所以得不到解。messenger提出我的余弦超范围,所以方程无解。真的不好意思,我不会算,所以拜托大家帮我看看调整以后的非常还对吗?谢谢!
回复 不支持

使用道具 举报

发表于 2009-4-29 16:50:46 | 显示全部楼层 来自 浙江杭州
用这两个方程大致算了一下,还是cos(a)>-1,感觉改变f(2)中d后面的值,对根的影响不大,得到的根还是在-1.5左右

我是想让f(1)和f(2)都接近于0,因为
f(1)=c-12.8681=0
f(2)=d+9.7638=0
是方程组,当然都为0最好,接近0就可以。
wangshunihao 发表于 2009-4-29 10:14
回复 不支持

使用道具 举报

发表于 2009-4-29 17:10:09 | 显示全部楼层 来自 河南郑州
谢谢!我是看了另一个资料,上面给的公式正好是d后面的值的符号相反。看来还是不行!参数是书上给的,公式也是书上给的,就程序是我写的,检查好多次了,为这个问题耗了好多天了。
   我是一个大四毕业生,用Matlab做弧齿锥齿轮的接触分析是我的题目,时间已经过了一半了,可我还是停滞不前,没有一点进展,特别着急,怕到时做不完。老师正忙他的项目,他让我们自己解决。
   在这里真的很感谢各位的帮助,不管问题解决与否,都很感谢大家!谢谢了!谢谢这个论坛!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 09:28 , Processed in 0.057597 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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