benn_zhao 发表于 2007-6-17 11:14

求高手指点 求方程组的解

x(1)*cos(x(2))+x(3)*cos(x(4))+1=0
x(1)*sin(x(2))+x(3)*sin(x(4))-6.92820323=0
(x(1)*28+0.816179*x(1)*x(1)+0.283616)*cos(x(2))+(x(3)*76-0.816179*x(3)*x(3)-0.283616)*cos(x(4))+148=0;
(x(1)*28+0.816179*x(1)*x(1)+0.283616)*sin(x(2))+(x(3)*76-0.816179*x(3)*x(3)-0.283616)*sin(x(4))-401.8357874=0;

其中x(1),x(2),x(3),x(4)为所有求解的未知数,最好能够给出迭代过程,这个解的过程需要嵌入到自己的程序中,不过能用工具先求解出也可以,解在(3,1.047,5,2.09439)附近!多谢!

无水1324 发表于 2007-6-17 11:38

fsolve试试

咕噜噜 发表于 2007-6-17 15:13

楼主要数值解法?
无水给你的符号求解应该是可以的,试试看
符号求解我觉得更普遍,更适用

无水1324 发表于 2007-6-17 17:13

回复 #3 咕噜噜 的帖子

哈,我说的就是matlab里面的一个数值解法,你可以help fsolve

咕噜噜 发表于 2007-6-17 20:02

回复 #4 无水1324 的帖子

无水过分哈,没理解我的意思
我是说楼主要类似于二分法的数值解法,不是你的那个命令:loveliness:

benn_zhao 发表于 2007-6-18 09:58

那个fsolve我试过了,不知道怎么回事,得不出结果,并且这个东西我要在实际的项目中解,需要编程实现,不知道用什么样的解法,还要麻烦两位指点:handshake

咕噜噜 发表于 2007-6-18 12:32

你把程序发上来我看看可以不?
不行你就用二分法迭代

benn_zhao 发表于 2007-6-18 13:13

matlab的计算过程如下:
function F=myfun(x)
F=[x(1)*cos(x(2))+x(3)*cos(x(4))+1;
   x(1)*sin(x(2))+x(3)*sin(x(4))-6.92820323;
   (x(1)*28+0.816179*x(1)*x(1)+0.283616)*cos(x(2))+(x(3)*76-0.816179*x(3)*x(3)-0.283616)*cos(x(4))+148;
   (x(1)*28+0.816179*x(1)*x(1)+0.283616)*sin(x(2))+(x(3)*76-0.816179*x(3)*x(3)-0.283616)*sin(x(4))-401.8357874;
   ];

x0 = ;         % Make a starting guess at the solution
options=optimset('Display','iter','NonlEqnAlgorithm','gn');   % Option to display output
= fsolve(@myfun,x0,options);% Call optimizer

其中x0 = ;的意思是(3,60°,5,120°)

运行完给了一个这个结果                                                   Directional
IterationFunc-count    Residual   Step-size      derivative
   0         5         330.917
   1          13         4.17499      0.953         -2.71
   2          21   0.000189858            1       1.26e-005
   3          29    1.96699e-012            1      -8.99e-013
Optimization terminated: magnitude of search direction less than TolX.

没有结果出来
search direction 指得什么意思?

如果二分法,我做过方程的 没有做过方程组的 能不能说的详细点

咕噜噜 发表于 2007-6-18 14:20

:@)
我这里显示
Optimization terminated successfully:
Search direction less than tolX
这是正常的显示语句,如果不成功才麻烦,才不正确,这句话表示计算结果达到要求,和你得到的显示是一个意思
没结果那是因为你把求解那个命令后面写上了分号
= fsolve(@myfun,x0,options)
去掉分号即可

[ 本帖最后由 咕噜噜 于 2007-6-18 14:35 编辑 ]

benn_zhao 发表于 2007-6-18 14:54

回复 #9 咕噜噜 的帖子

谢谢:handshake   太感激了
但是如果我需要自己编程实现怎么办?那个二分法是怎么个迭代次序?

咕噜噜 发表于 2007-6-18 16:42

不知道你说的实际项目和你现在的情形有什么区别,能说说吗
其实这种方法完全可以的
很多matlab与数值解法的书上都有有关非线性方程组的解法讨论,而且不止一种方法

benn_zhao 发表于 2007-6-18 18:24

matlab的计算过程如下:
function F=myfun(x)
F=[x(1)*cos(x(2))+x(3)*cos(x(4))+1;
   x(1)*sin(x(2))+x(3)*sin(x(4))-6.92820323;
   (x(1)*28+0.816179*x(1)*x(1)+0.283616)*cos(x(2))+(x(3)*76-0.816179*x(3)*x(3)-0.283616)*cos(x(4))+148;
   (x(1)*28+0.816179*x(1)*x(1)+0.283616)*sin(x(2))+(x(3)*76-0.816179*x(3)*x(3)-0.283616)*sin(x(4))-401.8357874;
   ];

x0 = ;         % Make a starting guess at the solution
options=optimset('Display','iter','NonlEqnAlgorithm','gn');   % Option to display output
= fsolve(@myfun,x0,options);% Call optimizer

其中x0 = ;的意思是(3,60°,5,120°)

运行完给了一个这个结果                                                   Directional
IterationFunc-count    Residual   Step-size      derivative
   0         5         330.917
   1          13         4.17499      0.953         -2.71
   2          21   0.000189858            1       1.26e-005
   3          29    1.96699e-012            1      -8.99e-013
Optimization terminated: magnitude of search direction less than TolX.


按照这个计算我已经得出结果了,没有问题,但是如果我需要自己把这个解法嵌入到我的应用程序中怎么办啊,能够给指点一下怎么自己编程实现吗?谢谢啊!

benn_zhao 发表于 2007-6-18 18:27

我的这个情况,很可能用plc的运算实现,最理想的情况下也是pI133MHZ的dos操作系统 在工控机上实现,所以现在很是郁闷啊

benn_zhao 发表于 2007-6-18 18:28

噢 谢谢了
我在看看书吧

咕噜噜 发表于 2007-6-18 18:37

用m函数文件调用
页: [1] 2
查看完整版本: 求高手指点 求方程组的解