声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3880|回复: 13

[编程技巧] 求助:matlab超越方程的解法

[复制链接]
发表于 2007-6-1 12:27 | 显示全部楼层 |阅读模式

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

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

x
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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-6-1 12:37 | 显示全部楼层
原帖由 pidouzai 于 2007-6-1 12:27 发表
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求解!
 楼主| 发表于 2007-6-1 12:41 | 显示全部楼层
具体能指导一下吗,谢谢你哦,问了很多人都说无法解的
发表于 2007-6-1 12:49 | 显示全部楼层
利用function 定义你的方程,
然后用fsolve求解!
有问题晚上再说,突然有点事情,要走了!
加我qq:403710643
 楼主| 发表于 2007-6-1 19:26 | 显示全部楼层
我照样子编了个
function  F=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=[Dx-(((2*m*g*R*(1-sin(a)/(tan(c)*tan(b))))*(1-exp(-tan(b)*sin(c))*x/(1-tan(b)^2)^(1/2)))/((m*R^2*exp(-2*tan(b)*sin(c)*x)/(1-tan(b)^2)^(1/2))+i))^(1/2)];


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


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

[ 本帖最后由 ChaChing 于 2010-6-14 16:04 编辑 ]
发表于 2007-6-1 19:33 | 显示全部楼层
任何编程语言的变量都需要先定义才能使用,matlab 也不例外(看来真的是“ matlab 号称使用变量不需要定义”惹的祸),只不过所不同的是并非使用 int x 这种方式,建议多看看基础书,多看看本版置顶贴

[ 本帖最后由 ChaChing 于 2010-6-14 11:17 编辑 ]
 楼主| 发表于 2007-6-1 19:49 | 显示全部楼层
dy是一次导数,好像不能用这种方法解的,ode45也解不出,请高手帮忙,谢谢

[ 本帖最后由 pidouzai 于 2007-6-1 20:57 编辑 ]
发表于 2007-6-1 21:14 | 显示全部楼层
建议用word将方程贴一下---首先应讲清楚问题.
 楼主| 发表于 2007-6-1 21:23 | 显示全部楼层
附上方程,请专家帮忙,谢谢

[ 本帖最后由 ChaChing 于 2010-6-14 16:03 编辑 ]
zzz.jpg
发表于 2007-6-1 21:51 | 显示全部楼层
这个微分方程用ode45不是很容易解决吗?自己先试试看,不行的话我再给你贴代码.
(用dsolve可发现无解析解)

z.jpg

[ 本帖最后由 xjzuo 于 2007-6-1 21:53 编辑 ]
 楼主| 发表于 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 编辑 ]
发表于 2007-6-1 23:04 | 显示全部楼层
没有什么复数出现, 不知你取的初值是多少?
还有, 将 i=0.0002 改为 i1=0.0002 试试.
还不行的话,将你的主程序贴一下,应该立刻就可以看出问题.
 楼主| 发表于 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 下运行
[X,Y]=ode45('ode',[0 100],0)
plot(X,Y,'-r')

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

[ 本帖最后由 ChaChing 于 2010-6-14 15:19 编辑 ]
发表于 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 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-18 17:01 , Processed in 0.059974 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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