作者aa7gg55 (司)
看板MATLAB
标题[问题]向量代入非线性方程以fsolve求解
时间Fri Jun 1 01:39:02 2012
版上的高手好!!
新手我只认真专研matlab不到三个月,底下发问有太离谱的问题请见谅,
还有有些程式多於我也写进去是想说,不清楚到底需不需要它= =...哈
这是一个四连杆参数设计的一个例子,
直接以程式介绍好了
function F=myfun1(x) % 一开始宣告我的非线性方程
f=zeros(1,25); %就想说因为底下要跑25种data所以F开25零
for i=1:25 %跑25次
xlsFile = 'ex3befoeradjust.xls'; %这个是我把一些已知常数向量以记录在excel档
tt2 = xlsread(xlsFile,1,'A1:Z1'); %从excel叫出底下t2(角度2)的data
ww4 = xlsread(xlsFile,1,'A4:Z4'); %从excel叫出底下w4(角速度4)的data
rr4= xlsread(xlsFile,1,'A7:Z7'); %从excel叫出底下r4(杆长4长度)的data
t2=tt2(1,i); %t2(角度2)
w4=ww4(1,i); w4(角速度4)
r4=rr4(1,i); r4(杆长4长度)
F=f(i);
F=[x(1)*10*sind(t2)+10*(x(2))*sind(x(3))-r4*(w4)*sind(x(4));
x(1)*10*cosd(t2)+10*(x(2))*cosd(x(3))-r4*(w4)*cosd(x(4));
x(1)*cosd(t2)+10*cosd(x(3))-r4*cosd(x(4))-10;
x(1)*sind(t2)+10*sind(x(3))-r4*sind(x(4)) ];
end %然後我就以for回圈1~25跑每一次代不同的常数进去
%接着求解的程式看底下
clear all
options=optimset('MaxFunEvals',5000,'MaxIter',5000,'TolFun',1e-10,'Display','iter');
for i=1:25 %求解这里一样给他for环圈求解25次
[x,fval]=fsolve(@myfun1,x0,options);
[x,fval];
r2(i)=x(1); % 让每一次解出第i个x(1)解等於
w3(i)x(2); 第i种常数代进去所求出来第i个r2的解
theta3(i)=x(3); % x(2);w3 一样意思
theta4(i)=x(4); % x(3);theta3一样意思
end % x(4);theta4一样意思
我的问题是,
我想要写这个程式的目标是;
从excel档读取,三个常数系数向量代进去非线性方程是求解出
每一组不同的的系数条件下
所求解出的r2,w3,theta3,theta4(一样把25种不同的解写成向量)
而我程式写这样的意思,跟我的目的是一样意思吗?
因为他一直跑好久快四个小时了跑不完现在还在跑= =
想说是不是写错
拜托高手帮我看一下`;
如果错了可以导正我应该怎麽吗?
感谢感谢
发问的不清楚可以再询问
谢谢谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.117.58.140
1F:→ ejialan:读excel的动作不应该放在myfun1里 而是在外面读完後当做 06/01 02:49
2F:→ ejialan:myfun1的输入 myfun1基本上只需要最下面四行 然後读取的 06/01 02:51
3F:→ ejialan:动作也不应该放在回圈里 而是读一次之後每次抓一组参数 06/01 02:53
4F:→ ejialan:你程式的意思变成解25次F 每当需要计算F时就读取25次 但最 06/01 02:57
5F:→ ejialan:後每一组参数都算了F却只用第25组 06/01 02:59
6F:→ ejialan:还有A-Z应该有26组参数 06/01 03:03
7F:→ aa7gg55:喔对吼应该是B1~Z1 06/02 13:49
8F:→ aa7gg55:谢谢你帮我找到问题 06/02 13:50
9F:→ aa7gg55:还是写不出来,虽然看起来好像不难 = = 06/02 13:51
10F:→ aa7gg55:继续想怎麽ˊ写!!XD 06/02 13:51
11F:→ aa7gg55:还是有谁要给我一点指点建议 06/02 13:51