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

关于超越方程求解的问题(完整题目已经跟帖,希望能得到帮助)

[复制链接]
发表于 2009-10-22 22:23:41 | 显示全部楼层 |阅读模式 来自 重庆沙坪坝区
本帖最后由 laihai718 于 2009-10-24 15:08 编辑

已知:r=pi/2-0.6685

t=[0.6352,1.4295]

f=-2932650*cos(1/2*t-fai-r)*pi^2+2932650*cos(-fai-r+3/2*t)*pi^2+1857345*cos(-fai-r+t)*pi^2-1857345*cos(2*t-fai-r)*pi^2-3870720*fai*sin(-fai-r+t)+3677184*fai*sin(-fai-r+3/2*t)

我想做的是给定一个t值,求出对应的fai值,但是只能一个一个来求,我想着做一个让它自动赋值自动求解的,最好能出图。这个问题对经常接触matlab的应该不是问题,希望能帮忙解答下,感谢。
 楼主| 发表于 2009-10-22 22:52:07 | 显示全部楼层 来自 重庆沙坪坝区
Simdroid开发平台
斑竹您好,我刚采取您的建议搜了一下,关于超越方程的解的问题很多,但我现在的问题不是解超越方程,这个方程我已经解出来了,我只是想自动的给t赋值(比如给t一个步长0.01)从而得到对应的fai值,就相当于循环了吧,最后要得到的结果是t的一组值和fai的一组值,谢谢。
回复 不支持

使用道具 举报

发表于 2009-10-22 23:35:19 | 显示全部楼层 来自 浙江杭州
你也说了,问题不是解超越方程,而是给循环赋值。所以,你用什么命令解超越方程,就搜索什么命令。另外,FAQ中也有一些如何给循环赋值的内容。
回复 不支持

使用道具 举报

发表于 2009-10-23 10:45:28 | 显示全部楼层 来自 北京朝阳
楼主需要的只是多了解一下匿名函数的用法。你就知道怎么自动赋值、自动求解的,还能出图。
方法告诉你了,剩下的就是本版搜索匿名函数或者看帮助文档了。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 11:04:27 | 显示全部楼层 来自 重庆沙坪坝区
本帖最后由 laihai718 于 2009-10-24 11:06 编辑

感谢各位版主热心积极的帮忙解答,我按照您们所说的搜了下匿名函数包括内联函数,我实在是无从下手,力不从心。
我的问题如下:
首先t的范围是已知的,在0.6352到1.4259之间(t的步长为0.001),然后,根据f的表达式求出对应的fai值,此处f是个超越方程,在求fai值时,需给定一个初值g=t+0.1,再求出t、fai值后,再带入到x、y、z、R的值。最后我想得到和t分别对应的fai、x、y、z、R的值,然后画出x、y、z的图形。
已知:r=pi/2-0.6685
f=1/16*(-2932650*cos(1/2*t-fai-r)*pi^2+2932650*cos(-fai-r+3/2*t)*pi^2+1857345*cos(-fai-r+t)*pi^2-1857345*cos(2*t-fai-r)*pi^2-3870720*fai*sin(-fai-r+t)+3677184*fai*sin(-fai-r+3/2*t))/pi^2
x= 105*cos(t-fai-r)-133/2*cos(3/2*t -fai-r);
y= 105*sin(t-fai-r)-133/2*sin(3/2*t -fai-r);
z=96*fai/(2*pi);
R=((105*sin(-fai-r+t)-133/2*sin(-fai-r+3/2*t))^2+2304*fai^2/pi^2)^(1/2)
我在求超越方程f时,用的下面的算法:
fun=inline('f','fai')
fai=fsolve(fun,g)

希望能得到您们帮助,谢谢。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 15:30:17 | 显示全部楼层 来自 重庆沙坪坝区
function y=fsolvefun(t)
y=fsolve(@(fai)(f(t,fai)), t+0.1);
function y=f(ti,fai)                    
y=-2932650*cos(1/2*ti-fai-(pi/2-0.6685))*pi^2+2932650*cos(-fai-(pi/2-0.6685)+3/2*ti)*pi^2+1857345*cos(-fai-(pi/2-0.6685)+ti)*pi^2-1857345*cos(2*ti-fai-(pi/2-0.6685))*pi^2-3870720*fai*sin(-fai-(pi/2-0.6685)+ti)+3677184*fai*sin(-fai-(pi/2-0.6685)+3/2*ti);

该程序我想实现调用函数y=fsolvefun(t),给定一个t值,让他计算fai值(然后再编一个函数,用来自动调用y=fsolvefun(t),从而达到求解t  fai值的目的)。但上面提示说 t 没定义,不知道是什么原因。
回复 不支持

使用道具 举报

发表于 2009-10-24 16:05:59 | 显示全部楼层 来自 浙江杭州
y=fsolve(@(fai)(f(t,fai)), t+0.1); 这句中f(t,fai)的t, fai应该调换一下,改为y=fsolve(@(fai)(f(fai,t)), t+0.1); ,匿名函数中第一是变量,其他是参数。

另外,让你看的FAQ你看了吗?别总是上来问,自己先研究一下。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 19:09:11 | 显示全部楼层 来自 重庆沙坪坝区
那个您说的FAQ我看了,貌似就一个subs的命令和我这个相关,可我总觉得,这个命令解决不了我的问题哦,
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 19:10:55 | 显示全部楼层 来自 重庆沙坪坝区
我装的还是6.5版本的,不支持匿名函数:L
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 19:49:48 | 显示全部楼层 来自 重庆沙坪坝区
y=fsolve(@(fai)(f(t,fai)), t+0.1); 这句中f(t,fai)的t, fai应该调换一下,改为y=fsolve(@(fai)(f(fai,t)), t+0.1); ,匿名函数中第一是变量,其他是参数。

另外,让你看的FAQ你看了吗?别总是上来问,自己先研究 ...
messenger 发表于 2009-10-24 16:05


不得行哦,t 和fai调换了也不得行哦,我用的是7.0的运行的。
回复 不支持

使用道具 举报

发表于 2009-10-24 19:58:41 | 显示全部楼层 来自 黑龙江哈尔滨
不得行哦,t 和fai调换了也不得行哦,我用的是7.0的运行的。
laihai718 发表于 2009-10-24 19:49


i是变量吗还是虚数单位?t要取那些值? 能不能把你的问题清楚点,

我用mmtc做下,提供个参考。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 20:17:59 | 显示全部楼层 来自 重庆沙坪坝区
您好,我是仿照着这个程序做的

nVals = 1:10;
yyVals = zeros( length(nVals) );
n = 1; % a dummy value to put n into workspace
y = @(x,y)sin(n*x)*cos(n*y);
for i = 1,length(nVals)
    n = i;
    yyVals = dblquad(y, 0, 1, 0, 1);
end
plot( nVals, yyVals);

具体为什么我也是不懂的
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 20:19:52 | 显示全部楼层 来自 重庆沙坪坝区
t是在0.6352到1.4259取值的,从0.6352开始,步长是0.001,每次增加一个步长的值,然后赋值给f,求fai用的
回复 不支持

使用道具 举报

发表于 2009-10-24 20:37:38 | 显示全部楼层 来自 黑龙江哈尔滨
您好,我是仿照着这个程序做的

nVals = 1:10;
yyVals = zeros( length(nVals) );
n = 1; % a dummy value to put n into workspace
y = @(x,y)sin(n*x)*cos(n*y);
for i = 1,length(nVals)
    n = i;
     ...
laihai718 发表于 2009-10-24 20:17


不懂matlab程序,给数学描述。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 20:50:31 | 显示全部楼层 来自 重庆沙坪坝区
您还是看我的问题的数学描述吧:

首先 t 的范围是已知的,在0.6352到1.4259之间(t 的步长为0.001),然后,根据f的表达式求出对应的fai值,此处f是个超越方程,在求fai值时,需给定一个初值g=t+0.1,再求出t、fai值后,再带入到x、y、z、R的值。最后我想得到和 t 分别对应的fai、x、y、z、R的值,然后画出x、y、z的图形。
已知:r=pi/2-0.6685
f=1/16*(-2932650*cos(1/2*t-fai-r)*pi^2+2932650*cos(-fai-r+3/2*t)*pi^2+1857345*cos(-fai-r+t)*pi^2-1857345*cos(2*t-fai-r)*pi^2-3870720*fai*sin(-fai-r+t)+3677184*fai*sin(-fai-r+3/2*t))/pi^2
x= 105*cos(t-fai-r)-133/2*cos(3/2*t -fai-r);
y= 105*sin(t-fai-r)-133/2*sin(3/2*t -fai-r);
z=96*fai/(2*pi);
R=((105*sin(-fai-r+t)-133/2*sin(-fai-r+3/2*t))^2+2304*fai^2/pi^2)^(1/2)
我在求超越方程f时,用的下面的算法:
fun=inline('f','fai')
fai=fsolve(fun,g)

希望能得到您的帮助,谢谢。
回复 不支持

使用道具 举报

发表于 2009-10-24 21:00:51 | 显示全部楼层 来自 浙江杭州
其实,Matlab6.5更容易,你help fsolve就知道怎么办了。

反正,该说的我都说了,6.5&7.0以上的解决办法都告诉你了,连例题都有,剩下的只能靠你自己努力了。
回复 不支持

使用道具 举报

发表于 2009-10-24 21:08:12 | 显示全部楼层 来自 黑龙江哈尔滨
您还是看我的问题的数学描述吧:

首先 t 的范围是已知的,在0.6352到1.4259之间(t 的步长为0.001),然后,根据f的表达式求出对应的fai值,此处f是个超越方程,在求fai值时,需给定一个初值g=t+0.1,再求出t、fa ...
laihai718 发表于 2009-10-24 20:50


f是个超越方程?

f不是个表达式吗?你是指f=0是个超越方程?
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 21:46:35 | 显示全部楼层 来自 重庆沙坪坝区
其实,Matlab6.5更容易,你help fsolve就知道怎么办了。

反正,该说的我都说了,6.5&7.0以上的解决办法都告诉你了,连例题都有,剩下的只能靠你自己努力了。
messenger 发表于 2009-10-24 21:00


您好,我知道fslove的,我不是解不出方程,我是想让系统自动给定一个 t 来求fai值,就是想循环来求fai值的。这个循环赋值,我是真的搞不定
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 21:47:00 | 显示全部楼层 来自 重庆沙坪坝区
f是个超越方程?

f不是个表达式吗?你是指f=0是个超越方程?
TBE_Legend 发表于 2009-10-24 21:08

恩,f=0是个超越方程
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-24 21:49:05 | 显示全部楼层 来自 重庆沙坪坝区
其实,Matlab6.5更容易,你help fsolve就知道怎么办了。

反正,该说的我都说了,6.5&7.0以上的解决办法都告诉你了,连例题都有,剩下的只能靠你自己努力了。
messenger 发表于 2009-10-24 21:00


您说您告诉我方法,我也看拉您说的那个FAQ,实在是找不到自己需要的东西,还有,有跟我这个问题解法一样的例题吗?您能否发个连接呢,我怎么没找到
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-9-28 07:26 , Processed in 0.079400 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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