求高手指点 求方程组的解
x(1)*cos(x(2))+x(3)*cos(x(4))+1=0x(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)附近!多谢! fsolve试试 楼主要数值解法?
无水给你的符号求解应该是可以的,试试看
符号求解我觉得更普遍,更适用
回复 #3 咕噜噜 的帖子
哈,我说的就是matlab里面的一个数值解法,你可以help fsolve回复 #4 无水1324 的帖子
无水过分哈,没理解我的意思我是说楼主要类似于二分法的数值解法,不是你的那个命令:loveliness: 那个fsolve我试过了,不知道怎么回事,得不出结果,并且这个东西我要在实际的项目中解,需要编程实现,不知道用什么样的解法,还要麻烦两位指点:handshake 你把程序发上来我看看可以不?
不行你就用二分法迭代 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 指得什么意思?
如果二分法,我做过方程的 没有做过方程组的 能不能说的详细点 :@)
我这里显示
Optimization terminated successfully:
Search direction less than tolX
这是正常的显示语句,如果不成功才麻烦,才不正确,这句话表示计算结果达到要求,和你得到的显示是一个意思
没结果那是因为你把求解那个命令后面写上了分号
= fsolve(@myfun,x0,options)
去掉分号即可
[ 本帖最后由 咕噜噜 于 2007-6-18 14:35 编辑 ]
回复 #9 咕噜噜 的帖子
谢谢:handshake 太感激了但是如果我需要自己编程实现怎么办?那个二分法是怎么个迭代次序? 不知道你说的实际项目和你现在的情形有什么区别,能说说吗
其实这种方法完全可以的
很多matlab与数值解法的书上都有有关非线性方程组的解法讨论,而且不止一种方法 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.
按照这个计算我已经得出结果了,没有问题,但是如果我需要自己把这个解法嵌入到我的应用程序中怎么办啊,能够给指点一下怎么自己编程实现吗?谢谢啊! 我的这个情况,很可能用plc的运算实现,最理想的情况下也是pI133MHZ的dos操作系统 在工控机上实现,所以现在很是郁闷啊 噢 谢谢了
我在看看书吧 用m函数文件调用
页:
[1]
2