声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1288|回复: 8

[编程技巧] 求助 非线性求解程序不知错在何

[复制链接]
发表于 2006-11-17 14:59 | 显示全部楼层 |阅读模式

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

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

x
先建立myfun的文件,再用fsolve(求解5个方程5个未知数a1 a2 a3 a4 a5)
function q=myfun(p)
a1=p(1);
a2=p(2);
a3=p(3);
a4=p(4);
a5=p(5);
X=[2.4,2.4,2.4,2.4;7.2,7.2,7.2,7.2;12,12,12,12;16.8,16.8,16.8,16.8;21.6,21.6,21.6,21.6;26.4,26.4,26.4,26.4;31.2,31.2,31.2,31.2;36,36,36,36;40.8,40.8,40.8,40.8;45.6,45.6,45.6,45.6;50.4,50.4,50.4,50.4;55.2,55.2,55.2,55.2];
Z=[-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20;-20,+20,+20,-20];
Y=[-5,-5,+5,+5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5;-5,-5,5,5];
f=0.52;
da=4.8;
gama=45*pi/180;
numda=2e-6;
cb=1.5016e+005;
fy=5.142e+003;
ma=-1.637e+005;
mb=1.27e+004;
fz=2.084e+004;
mc=-8.684e+003;
for i=1:1:12
    for j=1:1:4
Sy(i,j)=a1+a2*X(i,j)+a3*Z(i,j);
Sz(i,j)=a4+a5*X(i,j)-a3*Y(i,j);
Vy(i,j)=(2*f-1)*da*sin(gama)+Sy(i,j);
Vz(i,j)=(2*f-1)*da*cos(gama)b+Sz(i,j);
S(i,j)=sqrt(Vy(i,j)^2+Vz(i,j)^2)-(2*f-1)*da+numda;
P(i,j)=cb*S(i,j)^1.5;
b(i,j)=atan(Vy(i,j)/Vz(i,j));
A1(i,j)=P(i,j)*sin(b(i,j));
A2(i,j)=P(i,j)*sin(b(i,j))*X(i,j);
A3(i,j)=P(i,j)*cos(b(i,j))*X(i,j);
A4(i,j)=P(i,j)*cos(b(i,j));
A5(i,j)=P(i,j)*cos(b(i,j))*Y(i,j)-P(i,j)*sin(b(i,j))*Z(i,j);
    end
end
q(1)=sum(A1)-fy;
q(2)=sum(A2)-ma;
q(3)=sum(A3)-mb;
q(4)=sum(A4)-fz;
q(5)=sum(A5)-mc;
回复
分享到:

使用道具 举报

 楼主| 发表于 2006-11-17 15:01 | 显示全部楼层
最后调用函数,求解a1=fsolve(@myfun,[0 0 0 0 0],optimset('Display','off'))
请各位大侠看看 错在什么地方了
学的比较浅 没什么编程技巧可言
先谢谢各位了
发表于 2006-11-17 19:39 | 显示全部楼层

回复

问题如下:
       1.Vz(i,j)=(2*f-1)*da*cos(gama)b+Sz(i,j); %%% b去掉.
       2.q(1)=sum(A1)-fy;q(2)=...... %%% 向量不能赋值给标量.
最好还是说明一下q的意义.

猜了一下你的意思,求出的结果如下,不知是否是你所希望的值:
a1 =
   0.0993 + 0.0361i  -0.0015 - 0.0006i   0.0000 - 0.0000i  -0.1185 - 0.1449i   0.0016 + 0.0029i
 楼主| 发表于 2006-11-18 15:29 | 显示全部楼层
您好.q是一个方程.我是按一个非线性方程的例子那样写的.q(1)=sum(A1)-fy=0;你提到的向量不能直接赋值,那该如何解决呢?最后求出来的值应该是接近a1=0.01;a2=a3=a5=0.001;a4=0.01;可否详细的指导一下.
发表于 2006-11-18 16:19 | 显示全部楼层
原帖由 hhyyq 于 2006-11-18 15:29 发表
您好.q是一个方程.我是按一个非线性方程的例子那样写的.q(1)=sum(A1)-fy=0;你提到的向量不能直接赋值,那该如何解决呢?最后求出来的值应该是接近a1=0.01;a2=a3=a5=0.001;a4=0.01;可否详细的指导一下.



sum(A1)值得是对A1中所有的列求和
不知道这个是否是你要的

如果是对整个矩阵求和应该是sum(A1(:))
 楼主| 发表于 2006-11-18 16:47 | 显示全部楼层
是对整个矩阵求和
 楼主| 发表于 2006-11-18 16:49 | 显示全部楼层
1.Vz(i,j)=(2*f-1)*da*cos(gama)b+Sz(i,j); %%% b去掉.
这个是错了 能否给我改一下程序 多谢
 楼主| 发表于 2006-11-18 17:04 | 显示全部楼层
我把你们指出来的错误都改了 出来的结果和上面的那位大侠一样的0.0993 + 0.0361i  -0.0015 - 0.0006i   0.0000 - 0.0000i  -0.1185 - 0.1449i   0.0016 + 0.0029i  但是和我想要的值相差太大了 我想请问一下 我这种的解题思路 有没有错 ?是否和取得初始值也有关系?
发表于 2006-11-18 19:29 | 显示全部楼层

回复

程序的问题只能到此了.
fsolve有时候对初值是很敏感的,所以有时候可以先画出图形看看.
如果要进一步修改你的程序,可能需要你再稍微详细点描述一下你的问题了.
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-15 12:26 , Processed in 0.058567 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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