why do I get a negative numbers???

im in the process of programming for a project and i keep getting funtionally impossible answers for the variables everytime i run the code it says it stops prematurely so is that the main problem? it is currently only going through "2.300000e+03" itterations is there a way to increase that?

4 commentaires

Jacob Mathew
Jacob Mathew le 29 Nov 2024
Hi Jonah,
Could you share related code to help debug ?
Walter Roberson
Walter Roberson le 29 Nov 2024
Are you using:
  • fminunc
  • fmincon
  • fsolve
  • fzero
  • ga
  • vpasolve
  • something else?
If you are using fmincon() are you using any constraints?
If you are using fzero() are you using a single scalar as the starting point, or are you using a vector of two values?
Jonah
Jonah le 29 Nov 2024
I'm using fsolve, and I'd prefer not to share the code for now at least because it's an assignment that's still open I'm sorry for the trouble. I've been working on it off and on for the past 3-4 days but nothing I do works. I've only just started learning matlab since august and there's still a lot I don't understand.
Jonah
Jonah le 29 Nov 2024
As far as what I'm doing to get answers I'm doing
Guess = zeros(1,23) Answers = fsolve(function name, Guess)

Connectez-vous pour commenter.

Réponses (1)

Walter Roberson
Walter Roberson le 29 Nov 2024
opts = optimoptions('fsolve', 'MaxFunctionEvaluations', 1e6, 'MaxIterations', 1e6);
Guess = linspace(0,.001, 23);
Answers = fsolve(function_name, Guess, opts)
Notice that the guess is set to something non-zero: it is often a bad choice to start the function off at the all-zero vector.

4 commentaires

Jonah
Jonah le 29 Nov 2024
Thank you so much I'll try it first thing in the morning
Jonah
Jonah le 29 Nov 2024
tried your suggestion and it did increase the iteratons but im still getting negative answers when that doesnt make sense for the problem is there a way to force fsolve to only give posotive answers?
There is no way to force fsolve to give only positive answers.
Generally speaking, the way around that is to instead use fmincon:
fun2 = @(X) function_name(X).^2;
A = []; b = [];
Aeq = []; beq = [];
lb = zeros(1,length(Guess));
ub = inf(1,length(Guess));
nonlcon = [];
opts = optimoptions('fmincon', 'MaxFunctionEvaluations', 1e6, 'MaxIterations', 1e6);
Answers = fmincon(fun2, Guess, A, b, Aeq, beq, nonlcon, opts);
The trick here is that solving for zero is closely approximated by minimizing the square of the function.
Torsten
Torsten le 29 Nov 2024
There is no way to force fsolve to give only positive answers.
Generally speaking, the way around that is to instead use fmincon
... or to use the variables squared instead of the variables themselves in the equations you are trying to solve.

Connectez-vous pour commenter.

Produits

Version

R2024b

Tags

Question posée :

le 29 Nov 2024

Commenté :

le 29 Nov 2024

Community Treasure Hunt

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

Start Hunting!

Translated by