Finding x for y = f(x) in simulink

조회 수: 8 (최근 30일)
Phan Van Long
Phan Van Long 2022년 1월 18일
답변: Dat Trương Lê Trí 2022년 7월 6일
I have an equation which is uel = 3 + 3 * iel + 3 * log (3 * iel +1) a.k.a uel = f(iel) and I want to find iel ( uel is already known), so I have used fsolve to solve the problem in matlab and it works. Here is the code
---------------------------------------------------------------------
function iel = test(uel)
f = @(x) uel-(3 + 3 * x + 5 * log(3 * x + 1));
iel = fsolve(f,uel);
end
----------------------------------------------------------------------
But when i try to add this code into matlab function block in simulink, the model just don't run. I want my input to be uel and output to be iel. Can anyone please help me on this problem. Thank you so so much
  댓글 수: 2
Max Heimann
Max Heimann 2022년 1월 18일
Can you provide the error message?
Phan Van Long
Phan Van Long 2022년 1월 19일
This is the error message sir @Max Heimann

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

답변 (2개)

Paul
Paul 2022년 1월 19일
편집: Paul 2022년 1월 19일
According to the Symbolic Math Toolbox, the solution can be expressed as
%iel = wrightOmega(uel/3 - log(3) - 2/3) - 1/3
assuming that iel and uel are real. If they can be complex, the expression for iel is the same, but there are some other conditions that have to be satisfied.
Check
%doc wrightOmega
for more info.
Check a couple of test cases (note that I changed the 5 to a 3 in the function test() to match the equation in the question)
uel = 0.3
uel = 0.3000
iel = test(uel)
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
iel = -0.1723
iel = wrightOmega(uel/3 - log(3) - 2/3) - 1/3
iel = -0.1723
uel = 5.4
uel = 5.4000
iel = test(uel)
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
iel = 0.2465
iel = wrightOmega(uel/3 - log(3) - 2/3) - 1/3
iel = 0.2465
function iel = test(uel)
% f = @(x) uel-(3 + 3 * x + 5 * log(3 * x + 1)); % doesn't match equation in Question
f = @(x) uel-(3 + 3 * x + 3 * log(3 * x + 1));
iel = fsolve(f,uel);
end

Dat Trương Lê Trí
Dat Trương Lê Trí 2022년 7월 6일
Hi, I am facing the same problem, did you have any posible solution for this case?

카테고리

Help CenterFile Exchange에서 Spectral Measurements에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by