Solving a System of Nonlinear Equations n Times With Different Values

3 ビュー (過去 30 日間)
Rocky
Rocky 2024 年 5 月 5 日
コメント済み: Rocky 2024 年 5 月 5 日
Hi, I am trying to solve a system of nonlinear equations n times, and recording the output values for each time. For simplicity I wrote less complex, random nonlinear equations here rather than what I was working with, but it is the same idea. I have tried a number of things, and this skeleton of code has been the closest, but I cannot get it to return different values for each iteration. I found that I cannot embed a function into a large for loop because of MATLAB syntax, and placing the for loop within the function returns nothing. I believe that fsolve only solves the system of equations for z1(10) and z2(10) and not the first 9 values in the vectors. I can't find any information on how to change this. Any help would be greatly appreciated.
x0 = [1,1];
m = 10; % same length as z1 below, because I want to output 10 values
c = 0; % counting value
for q=1:m
x = fsolve(@g,x0)
c = c+1;
p(:,c) = x; % records each output value
end
function F = g(x)
z1 = [5 6 7 8 9 10 11 12 13 14];
z2 = [1 2 3 4 5 6 7 8 9 10];
n = length(z1)
for i=1:n
F(1) = x(1).*x(2) - z1(i)
F(2) = x(1) + x(2)./x(1) - z2(i)
end
end

採用された回答

Sam Chak
Sam Chak 2024 年 5 月 5 日
編集済み: Sam Chak 2024 年 5 月 5 日
When fsolve calls the system function g(x), it consistently executes the same number of loops until n reaches 10, and then returns the final solution for the system of double nonlinear equations. You can fix the code as follows:
x0 = [1, 1]; % static initial guess
c = 0; % initialize counting parameter
z1 = [5 6 7 8 9 10 11 12 13 14];
z2 = [1 2 3 4 5 6 7 8 9 10];
opt = optimoptions('fsolve','Display', 'none'); % can also choose 'iter'
%% call fsolve
for q = 1:numel(z1)
x = fsolve(@(x) g(x, z1(q), z2(q)), x0, opt);
c = c + 1;
p(:,c) = x; % records each output value
end
%% display results
disp(p)
2.0817 2.2543 2.3982 3.2361 4.5688 5.6913 6.7592 7.8029 8.8334 9.8559 2.1666 2.5410 2.8756 2.4721 1.9699 1.7571 1.6274 1.5379 1.4717 1.4205
%% system of double nonlinear equations
function F = g(x, z1, z2)
F(1) = x(1).*x(2) - z1;
F(2) = x(1) + x(2)./x(1) - z2;
end

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSystems of Nonlinear Equations についてさらに検索

製品


リリース

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by