Hello people, I would know how to obtain a vector of solution. I have 2 nonlinear function, and I need to obtain for each temperature two variable of solution; So in sum up , I need obtain a matrix with temperatures and 2 solution variables. Thanks!!!

 채택된 답변

Star Strider
Star Strider 2018년 4월 20일

2 개 추천

I have no idea what your function is. You can do something like this:

T = linspace(270, 300, 10);                             % Create Temperature Vector
p0 = [1; 1];                                            % Initial Parameter Estimates (Column Vector)
fcn = @(p,T) (p(1)*T.^2 - p(2)*T - 10);                % Create Function With Two Parameters
for k1 = 1:numel(T)
    P(:,k1) = fsolve(@(p)fcn(p,T(k1)), p0);             % Solve & Store Results For Each Value Of ‘T’
end
figure
plot(T, P)
grid

댓글 수: 4

Angel Federico Miranda
Angel Federico Miranda 2018년 4월 20일
편집: Walter Roberson 2018년 4월 20일
I have tried the syntaxis that you gave me, for fsolve but It didn´t work.
my two nonlinear equation are (both equations equal 0)
1__ (((P^2)*(X(1)-X(2))*(3*X(1)+X(2))^3)/((FCH40-X(1))*(3*FCH40-X(1)-X(2))*(4.01*FCH40+2*X(1))^2))-10.^((-11650./T(:,1))+13.076);
2__ (((0.01*FCH40+X(2))*(3*X(1)+X(2)))/((X(1)-X(2))*(3*FCH40-X(1)-X(2))))-10.^((1910./T(:,1))-1.784)
My variables are are "X(1)" and "X(2)" ; and the scalars are "P=35" and "FCH4=100".
but "T" is a vector array , and the range is from 923 to 1123, where the increment is 10.
After each iteration the matrix that stores my result seams to increased in size.
If you could help me, I would thank you a lot.

I am not certain what you want to do.

This uses ‘T’ as a single vector entirely (rather than for each element):

P     =  35;
FCH40 = 100;
T     = [923 : 10 : 1123]';
X0    = [1; 10];
fcn = @(X) [(((P^2)*(X(1)-X(2)).*(3*X(1)+X(2)).^3)./((FCH40-X(1))*(3*FCH40-X(1)-X(2))*(4.01*FCH40+2*X(1))^2))-10.^((-11650./T(:,1))+13.076); 
            (((0.01*FCH40+X(2))*(3*X(1)+X(2)))./((X(1)-X(2))*(3*FCH40-X(1)-X(2))))-10.^((1910./T(:,1))-1.784)];
XS = fsolve(fcn, X0);

This considers each element of ‘T’ in a loop:

P     =  35;
FCH40 = 100;
T     = [923 : 10 : 1123]';
X0    = [1; 10];
fcni = @(X,Ti) [(((P^2)*(X(1)-X(2)).*(3*X(1)+X(2)).^3)./((FCH40-X(1))*(3*FCH40-X(1)-X(2))*(4.01*FCH40+2*X(1))^2))-10.^((-11650./Ti)+13.076); 
            (((0.01*FCH40+X(2))*(3*X(1)+X(2)))./((X(1)-X(2))*(3*FCH40-X(1)-X(2))))-10.^((1910./Ti)-1.784)];
for k1 = 1 : numel(T)
    XS(:,k1) = fsolve(@(X) fcni(X,T(k1)), X0);
end
figure(1)
plot(T, XS)
grid

The plot makes it easier to see the solutions.

Experiment to get the result you want.

Angel Federico Miranda
Angel Federico Miranda 2018년 4월 20일
편집: Walter Roberson 2018년 4월 20일
It worked, that was exactly what I needed. Thank you for your time, I really appreciate it!!!
Star Strider
Star Strider 2018년 4월 20일
As always, my pleasure!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Torsten
Torsten 2018년 4월 20일

1 개 추천

Call fsolve in a loop for the different termperatures. Save the solutions of each run in a (2xn) matrix (n = number of temperatures).
Best wishes
Torsten.

카테고리

도움말 센터File Exchange에서 Mathematics에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by