作者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