xiaoyixiao 发表于 2011-11-11 22:42:37

求助:求解一个带参量的三角函数方程

本帖最后由 xiaoyixiao 于 2011-12-25 13:21 编辑

遇到这样一个问题:
我在一个循环语句中求解三角函数方程
tan(x-a)=b*cos(c-x),a,b,c为参数,在求解之前a,b,c均计算出,其中每循环一次将计算出一个a,b,c,我用solve求解出问题
syms A B C
for i=1:1:10
    y=i;
    a(i)=y;
    b(i)=y^2;
    c(i)=y^3;
    d=solve('tan(x-A)=B*cos(C-x)','x');
    e(i)=subs(d,{A,B,C},{a(i),b(i),c(i)});
end
运行后程序就不动了,而且运行很慢,请高手帮忙看看,怎么才能每次循环都能求出e(i)值,谢谢各位了

xiaoyixiao 发表于 2011-11-12 01:54:07

自己顶下,希望高手解决下

messenger 发表于 2011-11-12 12:04:35

没太明白你的目的,不过    d=solve('tan(x-A)=B*cos(C-x)','x');这一句,明显与循环变量无关,最好放在循环外面,不然的话每一个循环都要解这个方程,程序运行当然慢了。

lengyunfeng 发表于 2011-11-12 22:40:14

matlab解符号函数速度是比较差的,你的循环表达式里有两个符号表达式,可能是在这里比较费时间。你可以试一下用下面的语句:
>> a=2;
>> b=2^2;
>> c=2^3;
>> e=fzero(@(x) tan(x-a)-b*cos(c-x),0)
能在一定程度上避开符号表达式计算。我试了一下,有解,不过解的精度太差了,这是三角函数自己的特征导致的,可以考虑一下其它求解函数,不一定非要用fzero,再调调搜索步长和tolerance,可能会好点。不过想得到精确解可能有点麻烦,它和初始估值关系太密切了。

xiaoyixiao 发表于 2011-11-13 22:54:19

messenger 发表于 2011-11-12 12:04 static/image/common/back.gif
没太明白你的目的,不过    d=solve('tan(x-A)=B*cos(C-x)','x');这一句,明显与循环变量无关,最好放在循 ...

其实是要解这样一个方程tan(x-a)=b*cos(c-x),每循环一次得到一个a,b,c值,再把a,b,c值代入以上方程求解

messenger 发表于 2011-11-14 18:18:36

建议你像4#给的方法那样,改为数值求解。如果一定要用符号求解,参考一下下面的贴子可能对你有帮助,http://forum.simwe.com/thread-750041-1-1.html。

liuyalong008 发表于 2011-11-14 22:15:27

i=1:10;
s=arrayfun(@(a,b,c)fzero(@(x) tan(x-a)-b*cos(c-x),0),i,i.^2,i.^3)ans =

   -0.5708
    0.4292
    0.3570
   -0.7124
    0.2243
    0.8623
   -1.0895
    0.1460
   -1.4402
   -0.6228

I hope it works! good luck

liuyalong008 发表于 2011-11-14 22:23:39

本帖最后由 liuyalong008 于 2011-11-14 22:26 编辑

PS: Due to the period of function, you may obtain different solutions with different initial values
So, you can start from a series data, such as 0 pi 2pi,etc.

liuyalong008 发表于 2011-11-14 22:32:04

fsolve is also availablei=1:10;
s=arrayfun(@(a,b,c)fsolve(@(x) tan(x-a)-b*cos(c-x),0),i,i.^2,i.^3)1.6662
   -0.1036
    0.3570
   -0.4595
    0.9576
    0.8623
   -1.0895
   -1.6469
   -1.4402
   -0.6228

xiaoyixiao 发表于 2011-11-15 17:44:50

谢谢LS各位的解答,明天去试试,希望能解决我的问题

xiaoyixiao 发表于 2011-12-25 09:01:21

好久没上来,按liuyalong008 方法,问题解决,谢谢各位了

ChaChing 发表于 2011-12-25 11:37:22

试用9F的方式, 会有warning
Optimization terminated: first-order optimality is less than options.TolFun.
Optimizer appears to be converging to a minimum that is not a root:
Sum of squares of the function values exceeds the square root of
options.TolFun. Try again with a new starting point.
好奇参考7F的答案试下两初值, 也都没出现7F的答案i=1; ss2=arrayfun(@(a,b,c)fsolve(@(x) tan(x-a)-b*cos(c-x),-0.57),i,i.^2,i.^3)
i=1; ss2=arrayfun(@(a,b,c)fsolve(@(x) tan(x-a)-b*cos(c-x),-0.58),i,i.^2,i.^3)该如何处理!?

xiaoyixiao 发表于 2011-12-25 13:37:18

ChaChing 发表于 2011-12-25 11:37 static/image/common/back.gif
试用9F的方式, 会有warning

好奇参考7F的答案试下两初值, 也都没出现7F的答案该如何处理!? ...

呵呵,刚发现了
用ezplot('y=tan(x-1)-1*cos(1-x)')发现,在-0.5附近没有解 -0.5708。而
i=1; ss2=arrayfun(@(a,b,c)fzero(@(x)tan(x-a)-b*cos(c-x),0),i,i.^2,i.^3)却求出 x=-0.5708
把初值设置在1时,
i=1; ss2=arrayfun(@(a,b,c)fzero(@(x) tan(x-a)-b*cos(c-x),1),i,i.^2,i.^3)
求得ss2 =1.6662
此时与
i=1; ss2=arrayfun(@(a,b,c)fsolve(@(x) tan(x-a)-b*cos(c-x),-0.57),i,i.^2,i.^3)
相同
请问大侠这是怎么回事,fzero并没有求出0附近方程的解
页: [1]
查看完整版本: 求助:求解一个带参量的三角函数方程