声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1601|回复: 6

[编程技巧] fsolve 解方程的问题

[复制链接]
发表于 2009-3-27 14:01 | 显示全部楼层 |阅读模式

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

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

x
求教:fsolve可以解有两个或两个以上的未知向量的非线性方程组吗?如果有,那么是怎么样编写的?没有的话那这样的问题该怎么解呢?
   例如
MK(1)=xr(1)-1/2*L(1)*cos(m(1)); MK(2)=yr(1)-1/2*L(1)*sin(m(1))
for i=2:n-1
    MK(2*i-1)=xr(i)-1/2*L(i)*cos(m(i))-xr(i-1)-1/2*L(i-1)*cos(m(i-1))
    MK(2*i)=yr(i)-1/2*L(i)*sin(m(i))-yr(i-1)-1/2*L(i-1)*sin(m(i-1))        %约束方程%
end
MK(2*n-1)=x(n+1)-xr(n)-1/2*L(n)*cos(m(n))
MK(2*n)=y(n+1)-yr(n)-1/2*L(n)*sin(m(n))
其中m 和xr ,yr都是要求解的向量。当然前面也有关于xr(i),yr(i)与m(i)相关的方程。

[ 本帖最后由 ChaChing 于 2009-5-2 10:43 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-4-2 17:21 | 显示全部楼层

跪求助!!fsolve 解不出的问题

求解方程不收敛怎么办?求教:  我用fsove求解了一非线性方程组,但迭代不出正确的结果出来,说是不收敛,该怎样处理一下呀?

我用fslove 接这个方程的时候为什么解不出正确的结果来呀?是fsolve不能解这样的方程还是我的代码有问题呀?求求那位高手帮帮忙吧,我都快被这个东西搞颠哒!
function F=myf01(q)
L=[10 40 30]; n=length(L); MK(1)=q(1)-1/2*L(1)*cos(1/4*pi); MK(2)=q(n+1)-1/2*L(1)*sin(1/4*pi);         
for i=2:n-1
    MK(2*i-1)=q(i)-1/2*L(i)*cos(q(2*n+i))-q(i-1)-1/2*L(i-1)*cos(q(2*n+i-1));      
    MK(2*i)=q(n+i)-1/2*L(i)*sin(q(2*n+i))-q(n+i-1)-1/2*L(i-1)*sin(q(2*n+i-1));        
end
MK(2*n-1)=40-q(n)-1/2*L(n)*cos(q(3*n-1)); MK(2*n)=10-q(2*n)-1/2*L(n)*sin(q(3*n-1));     
F=[MK'];

function myf02
L=[10 40 30]; n=length(L); xr0=rand(1,n); yr0=rand(1,n);
m0=rand(1,n-1); q0=[xr0';yr0';m0']; options=optimset('Display','iter');
q=fsolve(@myf01,q0,options)

[ 本帖最后由 ChaChing 于 2009-5-2 10:50 编辑 ]
 楼主| 发表于 2009-4-2 22:28 | 显示全部楼层
:@) 呵呵  上面的是方程编写错了。
发表于 2009-4-3 15:19 | 显示全部楼层
LZ这个好像已经不是编程问题了!
好像是八个变数, 六个方程, 这样对吗?
个人这方面不熟, 建议LZ应该交代清楚, 别人较易帮忙
 楼主| 发表于 2009-4-3 21:51 | 显示全部楼层

求助:循环求解的问题

function F=myf001(q)
L=load('ganchang.txt'); n=length(L);
syms t
T=load('shijian.txt'); N=length(T);
load yizhijiao.mat; o=length(U);  %U为独立坐标变量%
for i=1:N   %N是时间离散次数%
t=T(i); u=subs(U,t); Q=q(7)-u;   %附加驱动约束%
MK(1)=q(1)-1/2*L(1)*cos(q(7)); MK(2)=q(n+1)-1/2*L(1)*sin(q(7));         
for i=2:n
    MK(2*i-1)=q(i)-1/2*L(i)*cos(q(2*n+i))-q(i-1)-1/2*L(i-1)*cos(q(2*n+i-1));      
    MK(2*i)=q(n+i)-1/2*L(i)*sin(q(2*n+i))-q(n+i-1)-1/2*L(i-1)*sin(q(2*n+i-1));        
end
MK(2*n+1)=40-q(n)-1/2*L(n)*cos(q(3*n)); MK(2*n+2)=10-q(2*n)-1/2*L(n)*sin(q(3*n));
F=[MK';Q];
end

我的L=[10 40 30];T=[0 0.2 0.4 0.6 0.8 1.0]

function myf02
L=load('ganchang.txt'); n=length(L);
xr0=[1 1 1]; yr0=[1 1 1]; m0=[0.5 0.5 0.5]; q0=[xr0';yr0';m0'];
options=optimset('Display','iter'); q=fsolve(@myf001,q0,options)
我要对上面的方程myf001在t取不同的值时分别求解q的值可以怎么做呀?
我用for i=1:N   %N是时间离散次数%
    q=fsolve(@myf001,q0,options)
end只能连续输出6次时间t(6)=1.0时q的值。请教一下,这类的循环计算可以怎么实现呀?

[ 本帖最后由 ChaChing 于 2009-5-2 11:00 编辑 ]
发表于 2009-4-3 22:26 | 显示全部楼层
楼主是不是应该列出原始要解的方程/问题, 别人较容易理解
 楼主| 发表于 2009-4-4 09:27 | 显示全部楼层
要求解的方程就是下面的这个。只是由于对不同的t值Q=q(7)-u;有不同的解,所以导致后面的方程的解都会有变化。我的预期目的也就是把所有t的取值时的方程组的各种不同的解都解出来。只是我求解的结果却是只输出了最后的一组值,前面的其他t值所对应的解在窗口都不能输出呀。(方程是没有编写错的。输出的最后一组结果也是对的,问题是要多组一起输出。)
Q=q(7)-u;   %附加驱动约束%
MK(1)=q(1)-1/2*L(1)*cos(q(7)); MK(2)=q(n+1)-1/2*L(1)*sin(q(7));         
for i=2:n
    MK(2*i-1)=q(i)-1/2*L(i)*cos(q(2*n+i))-q(i-1)-1/2*L(i-1)*cos(q(2*n+i-1));      
    MK(2*i)=q(n+i)-1/2*L(i)*sin(q(2*n+i))-q(n+i-1)-1/2*L(i-1)*sin(q(2*n+i-1));        
end
MK(2*n+1)=40-q(n)-1/2*L(n)*cos(q(3*n)); MK(2*n+2)=10-q(2*n)-1/2*L(n)*sin(q(3*n));
F=[MK';Q];

求助!!(循环求解)
上面这个问题急待解决呀,那位大侠帮帮忙指点一二或提供一点思路吧!!

[ 本帖最后由 ChaChing 于 2009-5-2 10:54 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-17 08:58 , Processed in 0.075501 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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