pidouzai 发表于 2007-6-1 12:27

求助:matlab超越方程的解法

function dy=ode(x,y)
m=0.13; g=9.8; R=0.05; i=0.0002;
a=10/180*pi; b=30/180*pi; c=15/180*pi
dy=[(((2*m*g*R*(1-sin(a)/(tan(c)*tan(b))))*(1-exp(-tan(b)*sin(c))*y/(1-tan(b)^2)^(1/2)))/((m*R^2*exp(-2*tan(b)*sin(c)*y)/(1-tan(b)^2)^(1/2))+i))^(1/2)];

我用ode解出来的y都是虚数解,而y不能是虚数的,
这种超越方程应该怎么解啊,谢谢帮忙!

[ 本帖最后由 ChaChing 于 2010-6-14 15:20 编辑 ]

无水1324 发表于 2007-6-1 12:37

原帖由 pidouzai 于 2007-6-1 12:27 发表 http://www.chinavib.com/forum/images/common/back.gif
function dy=ode(x,y)
m=0.13
g=9.8
R=0.05
a=10/180*pi
b=30/180*pi
c=15/180*pi
i=0.0002
dy=[(((2*m*g*R*(1-sin(a)/(tan(c)*tan(b))))*(1-exp(-tan(b)*sin(c))*y/(1-tan(b)^2)^(1/2)))/((m*R^2*exp( ...


你这是个代数方程吧?只能用fsolve求解!

pidouzai 发表于 2007-6-1 12:41

具体能指导一下吗,谢谢你哦,问了很多人都说无法解的

无水1324 发表于 2007-6-1 12:49

利用function 定义你的方程,
然后用fsolve求解!
有问题晚上再说,突然有点事情,要走了!
加我qq:403710643

pidouzai 发表于 2007-6-1 19:26

我照样子编了个
functionF=myfun(x)
m=0.13; g=9.8; R=0.05; i=0.0002;
a=10/180*pi; b=30/180*pi; c=15/180*pi;
F=;

x0=; options=optimset('Display','iter');
x=fsolve(@myfun,x0,options)

我是菜鸟啊,高手帮个忙,谢谢了~~~

[ 本帖最后由 ChaChing 于 2010-6-14 16:04 编辑 ]

eight 发表于 2007-6-1 19:33

任何编程语言的变量都需要先定义才能使用,matlab 也不例外(看来真的是“ matlab 号称使用变量不需要定义”惹的祸),只不过所不同的是并非使用 int x 这种方式,建议多看看基础书,多看看本版置顶贴

[ 本帖最后由 ChaChing 于 2010-6-14 11:17 编辑 ]

pidouzai 发表于 2007-6-1 19:49

dy是一次导数,好像不能用这种方法解的,ode45也解不出,请高手帮忙,谢谢

[ 本帖最后由 pidouzai 于 2007-6-1 20:57 编辑 ]

xjzuo 发表于 2007-6-1 21:14

建议用word将方程贴一下---首先应讲清楚问题.

pidouzai 发表于 2007-6-1 21:23

附上方程,请专家帮忙,谢谢

[ 本帖最后由 ChaChing 于 2010-6-14 16:03 编辑 ]

xjzuo 发表于 2007-6-1 21:51

这个微分方程用ode45不是很容易解决吗?自己先试试看,不行的话我再给你贴代码.
(用dsolve可发现无解析解)



[ 本帖最后由 xjzuo 于 2007-6-1 21:53 编辑 ]

pidouzai 发表于 2007-6-1 22:33

我是解出来了,但y是复数,图像画出来的应该是y的模吧,这样应该算是没解出来吧

这是我ode算出来的结果:
Y =
1.0e+005 *
      0         
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0001i
   0.0001 + 0.0001i
   0.0001 + 0.0001i
   0.0001 + 0.0001i
   0.0002 + 0.0001i
   0.0002 + 0.0002i
   0.0003 + 0.0002i
   0.0004 + 0.0002i
   0.0005 + 0.0002i
   0.0007 + 0.0003i
   0.0009 + 0.0003i
   0.0012 + 0.0003i
   0.0015 + 0.0004i
   0.0018 + 0.0004i
   0.0025 + 0.0005i
   0.0032 + 0.0006i
   0.0040 + 0.0006i
   0.0049 + 0.0007i
   0.0066 + 0.0008i
   0.0086 + 0.0009i
   0.0108 + 0.0010i
   0.0133 + 0.0012i
   0.0178 + 0.0013i
   0.0231 + 0.0015i
   0.0290 + 0.0017i
   0.0356 + 0.0019i
   0.0479 + 0.0022i
   0.0619 + 0.0025i
   0.0778 + 0.0028i
   0.0954 + 0.0031i
   0.1189 + 0.0035i
   0.1449 + 0.0038i
   0.1735 + 0.0042i
   0.2047 + 0.0045i
   0.2384 + 0.0049i
   0.2747 + 0.0052i
   0.3136 + 0.0056i
   0.3550 + 0.0060i
   0.3990 + 0.0063i
   0.4456 + 0.0067i
   0.4948 + 0.0070i
   0.5465 + 0.0074i
   0.6008 + 0.0078i
   0.6577 + 0.0081i
   0.7171 + 0.0085i
   0.7791 + 0.0088i
   0.8437 + 0.0092i
   0.9109 + 0.0096i
   0.9806 + 0.0099i
   1.0529 + 0.0103i
   1.1278 + 0.0106i
   1.2053 + 0.0110i
   1.2853 + 0.0113i
   1.3679 + 0.0117i
   1.4530 + 0.0121i
   1.5408 + 0.0124i
   1.6311 + 0.0128i
   1.7239 + 0.0131i
   1.8024 + 0.0134i
   1.8825 + 0.0137i
   1.9644 + 0.0140i
   2.0481 + 0.0143i
请问楼上的也是一样吗?我总觉得我哪里出错了,因为要进一步算y的相关方程,无法进行,希望有人能帮忙回答这个问题,谢谢哦

[ 本帖最后由 ChaChing 于 2010-6-14 15:16 编辑 ]

xjzuo 发表于 2007-6-1 23:04

没有什么复数出现, 不知你取的初值是多少?
还有, 将 i=0.0002 改为 i1=0.0002 试试.
还不行的话,将你的主程序贴一下,应该立刻就可以看出问题.

pidouzai 发表于 2007-6-2 09:47

我编的程序如下:
function dy=ode(x,y)
m=0.13; g=9.8; R=0.05; i=0.0002;
a=10/180*pi; b=30/180*pi; c=15/180*pi;
dy=[(((2*m*g*R*(1-sin(a)/(tan(c)*tan(b))))*(1-exp(-tan(b)*sin(c))*y/(1-tan(b)^2)^(1/2)))/((m*R^2*exp(-2*tan(b)*sin(c)*y)/(1-tan(b)^2)^(1/2))+i))^(1/2)];

command windows 下运行
=ode45('ode',,0)
plot(X,Y,'-r')

请楼上指导哪里出了问题?

[ 本帖最后由 ChaChing 于 2010-6-14 15:19 编辑 ]

ChaChing 发表于 2010-6-14 16:22

整理/学习老帖, 这个不得不说说, 虽然ode部分个人不很熟!
楼主所用的式子似乎已经不是楼主所要的(9F)! 那都是太多"("及")", 造成容易出错误
建议简易化, 不易出错又易读
dy=[(((2*m*g*R*(1-sin(a)/(tan(c)*tan(b))))*(1-exp(-tan(b)*sin(c))*y/(1-tan(b)^2)^(1/2)))/((m*R^2*exp(-2*tan(b)*sin(c)*y)/(1-tan(b)^2)^(1/2))+i))^(1/2)];
改为
tanb=tan(b); c1=sin(a)/tanb/tan(c); c2=sin(c)*tanb/sqrt(1-tanb^2);
dy=sqrt( 2*m*g*R*(1-c1)*(1-exp(c2*y))/(m*R^2*exp(-2*c2*y+i)) );

[ 本帖最后由 ChaChing 于 2010-6-14 16:25 编辑 ]
页: [1]
查看完整版本: 求助:matlab超越方程的解法