fsolve function not solving nonlinear equations, I had observed "Invalid datatype. Options argument must be created with OPTIMOPTIONS"; could you assist me, pse
7 次查看(过去 30 天)
显示 更早的评论
DESCRIPTIO OF TASK
function [FN, Q, y] = mag2(Q0, y0)
ee=0.04; vs=0.00000131; D=[0.220, 0.097, 0.110, 0.220, 0.247, 0.0247, 0.353]; L=[900,400,400,800,500,900,400];
FUN = @(Q,y)[Q(1)-Q(2)-0.03; Q(2)+Q(6)-Q(3)-0.04; Q(3)+Q(4)-0.035; Q(5)-Q(4)-0.01; Q(7)-Q(6)-Q(5)-0.015; ...
1/(y(1)).^0.5+4*log(ee./(3.7*D(1,1))+2.54*3.14*D(1,1)*vs./(4*Q(1)*(y(1)).^0.5)); 1/(y(2)).^0.5+4*log(ee./(3.7*D(1,2))+2.54*3.14*D(1,2)*vs./(4*Q(2)*(y(2)).^0.5));...
1/(y(3)).^0.5+4*log(ee./(3.7*D(1,3))+2.54*3.14*D(1,3)*vs./(4*Q(3)*(y(3)).^0.5)); 1/(y(4)).^0.5+4*log(ee./(3.7*D(1,4))+2.54*3.14*D(1,4)*vs./(4*Q(4)*(y(4)).^0.5));...
1/(y(5)).^0.5+4*log(ee./(3.7*D(1,5))+2.54*3.14*D(1,5)*vs./(4*Q(5)*(y(5)).^0.5)); 1/(y(6)).^0.5+4*log(ee./(3.7*D(1,6))+2.54*3.14*D(1,6)*vs./(4*Q(6)*(y(6)).^0.5));...
1/(y(7)).^0.5+4*log(ee./(3.7*D(1,7))+2.54*3.14*D(1,7)*vs./(4*Q(7)*(y(7)).^0.5));...
Q(1)*abs(y(1)*8*L(1,1)*Q(1)./(9.81*3.14.^2*D(1,1).^5))+Q(2)*abs(y(2)*8*L(1,2)*Q(2)./(9.81*3.14.^2*D(1,2).^5)) ...
-Q(6)*abs(y(6)*8*L(1,6)*Q(6)./(9.81*3.14.^2*D(1,6).^5))+Q(7)*abs(y(7)*8*L(1,7)*Q(7)./(9.81*3.14.^2*D(1,7).^5)); ...
Q(3)*abs(y(3)*8*L(1,3)*Q(3)./(9.81*3.14.^2*D(1,3).^5))-Q(4)*abs(y(4)*8*L(1,4)*Q(4)./(9.81*3.14.^2*D(1,4).^5))...
+Q(6)*abs(y(6)*8*L(1,6)*Q(6)./(9.81*3.14.^2*D(1,6).^5))-Q(5)*abs(y(5)*8*L(1,5)*Q(5)./(9.81*3.14.^2*D(1,5).^5))];
options = optimoptions('fsolve','Display','iter');
[Q,y]=fsolve(FUN,Q0,y0,options);
end
Q0=[-0.15, 0.15]; y0=[0.00001, 0.1]; mag2(Q0, y0)
THE OUTPUT, I GOT
Error using fsolve
Invalid datatype. Options argument must be created with OPTIMOPTIONS.
Error in mag2 (line 15)
[Q,y]=fsolve(FUN,Q0,y0,options);
采纳的回答
Star Strider
2024-4-15
编辑:Torsten
2024-4-15
One problem is that fsolve wants the initial parameter estimates as a single vector, and the third argument is the ‘options’ structure. I initially combined ‘Q0’ and‘y0’ into a single vector to successfully solve the ‘options’ problem. However, then the indexing of ‘Q’ became an issue. Note that ‘Q0’ and‘y0’ only have two elements, however your code addresses at least six elements in each.
You probably need to do sometning like this:
Q0 = rand(1,6)
y0 = rand(1,6);
Qy = [Q0; y0];
[Q,y]=fsolve(FUN,Qy,options);
so that ‘Q1’ becomes ‘Qy(1,1)’ , ‘Q(2)’ becomes ‘Qy(1,2)’ , ‘y(1)’ becomes ‘Qy(2,1)’ and so for the rest. I leave that to you. If there are no other problems in your code, that should work.
Q0=[-0.15, 0.15]; y0=[0.00001, 0.1]; mag2(Q0, y0)
function [FN, Q, y] = mag2(Q0, y0)
ee=0.04; vs=0.00000131; D=[0.220, 0.097, 0.110, 0.220, 0.247, 0.0247, 0.353]; L=[900,400,400,800,500,900,400];
FUN = @(Qy)[Q(1)-Q(2)-0.03;...
Q(2)+Q(6)-Q(3)-0.04;...
Q(3)+Q(4)-0.035;...
Q(5)-Q(4)-0.01; Q(7)-Q(6)-Q(5)-0.015; ...
1/(y(1)).^0.5+4*log(ee./(3.7*D(1,1))+2.54*3.14*D(1,1)*vs./...
(4*Q(1)*(y(1)).^0.5));...
1/(y(2)).^0.5+4*log(ee./(3.7*D(1,2))+2.54*3.14*D(1,2)*vs./...
(4*Q(2)*(y(2)).^0.5));...
1/(y(3)).^0.5+4*log(ee./(3.7*D(1,3))+2.54*3.14*D(1,3)*vs....
/(4*Q(3)*(y(3)).^0.5));...
1/(y(4)).^0.5+4*log(ee./(3.7*D(1,4))+2.54*3.14*D(1,4)*vs./ ...
(4*Q(4)*(y(4)).^0.5));...
1/(y(5)).^0.5+4*log(ee./(3.7*D(1,5))+2.54*3.14*D(1,5)*vs./...
(4*Q(5)*(y(5)).^0.5));...
1/(y(6)).^0.5+4*log(ee./(3.7*D(1,6))+2.54*3.14*D(1,6)*vs./ ...
(4*Q(6)*(y(6)).^0.5));...
1/(y(7)).^0.5+4*log(ee./(3.7*D(1,7))+2.54*3.14*D(1,7)*vs./...
(4*Q(7)*(y(7)).^0.5));...
Q(1)*abs(y(1)*8*L(1,1)*Q(1)./(9.81*3.14.^2*D(1,1).^5))+...
Q(2)*abs(y(2)*8*L(1,2)*Q(2)./(9.81*3.14.^2*D(1,2).^5))-...
Q(6)*abs(y(6)*8*L(1,6)*Q(6)./(9.81*3.14.^2*D(1,6).^5))+...
Q(7)*abs(y(7)*8*L(1,7)*Q(7)./(9.81*3.14.^2*D(1,7).^5)); ...
Q(3)*abs(y(3)*8*L(1,3)*Q(3)./(9.81*3.14.^2*D(1,3).^5))-...
Q(4)*abs(y(4)*8*L(1,4)*Q(4)./(9.81*3.14.^2*D(1,4).^5))+...
Q(6)*abs(y(6)*8*L(1,6)*Q(6)./(9.81*3.14.^2*D(1,6).^5))-...
Q(5)*abs(y(5)*8*L(1,5)*Q(5)./(9.81*3.14.^2*D(1,5).^5))];
options = optimoptions('fsolve','Display','iter');
% [Q,y]=fsolve(FUN,Q0,y0,options);
Q0 = rand(1,6)
y0 = rand(1,6);
Qy = [Q0; y0];
[Q,y]=fsolve(FUN,Qy,options);
end
.
7 个评论
Alex Sha
2024-4-17
refer to the results below:
q1: 0.0469485401123028
q2: 0.0169485400700552
q6: 0.000149927973562496
q3: -0.0229015319578391
q4: 0.0579015318964189
q5: 0.0679015321342485
q7: 0.0830514600277715
y1: 0.00689798266403546
y2: 0.012995928970676
y3: 0.0116007205080187
y4: 0.00689539239643874
y5: 0.00639537063426373
y6: 0.0922685733214674
y7: 0.00515822449799586
Star Strider
2024-4-17
@Eng. — As always, my pleasure!
I am happy that it works for you!
For our interest, would it be possible fo you to post the working code?
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!