Find a variable from an integration equation

Hi,
I want to calculate motor_power variable from know total_time variable.
All other parameters are known expect motor_power.
I have tried fsolve and fzero functions but throwing errors related to integration
Kindly request you to support for my problem
The code is as below:
ct=@(speed)base_speed1./(motor_power-(a+b.*speed.^2).*base_speed); %Function 1%
cp=@(speed)speed./(motor_power-(a+b.*speed.^2).*speed); %Function 2%
total_time=m_veh*integral(ct,0,base_speed)+m_veh*integral(cp,base_speed,max_speed); %Integration equation%

3 件のコメント

Matt J
Matt J 2023 年 9 月 1 日
Your posted code does not contain fsolve or fzero or the error messages they threw.
Dyuman Joshi
Dyuman Joshi 2023 年 9 月 2 日
"I have tried fsolve and fzero functions but throwing errors related to integration"
You have to show what you tried with those functions and what errors did you get. Copy and paste the rest of the code and the error messages you get i.e. all of the red text.
Harsh
Harsh 2023 年 9 月 2 日
Error using tt>@(speed)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed)
Too many input arguments.
Error in tt>@(speed)ct(speed,motor_power) (line 39)
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));
Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);
Error in tt>@(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m)) (line 39)
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));
Error in fsolve (line 264)
fuser = feval(funfcn{3},x,varargin{:});
Error in tt (line 41)
motor_power = fsolve(fun,motor_power0);
Caused by:
Failure in initial objective function evaluation. FSOLVE cannot continue.
>>

サインインしてコメントする。

 採用された回答

Torsten
Torsten 2023 年 9 月 1 日

1 投票

ct=@(speed,motor_power)base_speed1./(motor_power-(a+b.*speed.^2).*base_speed); %Function 1%
cp=@(speed,motor_power)speed./(motor_power-(a+b.*speed.^2).*speed); %Function 2%
fun = @(motor_power)total_time-(m_veh*integral(@(speed)ct(speed,motor_power),0,base_speed)+m_veh*integral(@(speed)cp(speed,motorpower),base_speed,max_speed));
motor_power0 = 10; % initial guess
motor_power = fsolve(fun,motor_power0)

9 件のコメント

Harsh
Harsh 2023 年 9 月 2 日
編集済み: Walter Roberson 2023 年 9 月 2 日
Hi I have updated my code as per your suggtion still it is throwing the errors
My full code is as below:
clear all
clc
motor_power=239000;
r=0.344;
s=1;
original_base_speed=20.3;
b=original_base_speed/s;
m=27.77;
m_v=1700*1.12;
g=9.81;
m_1=0.006;
m_2=0.0001;
r=1.204;
c_d=0.23;
height=1.59;
width=1.627;
area= 2.22;
total_time=5.68;
if b<=m
b_speed=b;
else
b_speed=m;
end
ct=@(speed)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed);
if m>b
cp=@(speed)speed./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*speed);
else
cp=0;
end
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));
motor_power0 = 10; % initial guess
motor_power = fsolve(fun,motor_power0);
Error using solution>@(speed)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed)
Too many input arguments.

Error in solution>@(speed)ct(speed,motor_power) (line 31)
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));

Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);

Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);

Error in solution>@(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m)) (line 31)
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));

Error in fsolve (line 267)
fuser = feval(funfcn{3},x,varargin{:});

Caused by:
Failure in initial objective function evaluation. FSOLVE cannot continue.
Harsh
Harsh 2023 年 9 月 2 日
Errors :
Error using tt>@(speed)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed)
Too many input arguments.
Error in tt>@(speed)ct(speed,motor_power) (line 39)
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));
Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);
Error in tt>@(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m)) (line 39)
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));
Error in fsolve (line 264)
fuser = feval(funfcn{3},x,varargin{:});
Error in tt (line 41)
motor_power = fsolve(fun,motor_power0);
Caused by:
Failure in initial objective function evaluation. FSOLVE cannot continue.
>>
Paul
Paul 2023 年 9 月 2 日
clear all
clc
I thoguht motor_power is unknown and the problem is to find its value?
% motor_power=239000; to be solved?
r=0.344;
s=1;
original_base_speed=20.3;
b=original_base_speed/s;
m=27.77;
m_v=1700*1.12;
g=9.81;
m_1=0.006;
m_2=0.0001;
r=1.204;
c_d=0.23;
height=1.59;
width=1.627;
area= 2.22;
total_time=5.68;
if b<=m
b_speed=b;
else
b_speed=m;
end
ct=@(speed)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed);
if m>b
cp=@(speed)speed./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*speed);
else
cp=0;
end
ct
ct = function_handle with value:
@(speed)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed)
cp
cp = function_handle with value:
@(speed)speed./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*speed)
ct and cp are both functions of one variable, speed. However, in the defintion of fun they are both called with two input arguments, speed and motor_power.
Perhaps ct and cp should be defined with motor_power as a second argument?
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m))
fun = function_handle with value:
@(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m))
Torsten
Torsten 2023 年 9 月 2 日
編集済み: Torsten 2023 年 9 月 2 日
r=0.344;
s=1;
original_base_speed=20.3;
b=original_base_speed/s;
m=27.77;
m_v=1700*1.12;
g=9.81;
m_1=0.006;
m_2=0.0001;
r=1.204;
c_d=0.23;
height=1.59;
width=1.627;
area= 2.22;
total_time=5.68;
if b<=m
b_speed=b;
else
b_speed=m;
end
ct=@(speed,motor_power)b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed);
if m>b
cp=@(speed,motor_power)speed./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*speed);
else
cp=@(speed,motor_power)zeros(size(speed));
end
fun = @(motor_power)total_time-(m_v*integral(@(speed)ct(speed,motor_power),0,b_speed)+m_v*integral(@(speed)cp(speed,motor_power),b_speed,m));
motor_power0 = 2e5; % initial guess
motor_power = fsolve(fun,motor_power0,optimset('MaxFunEvals',10000,'MaxIter',10000))
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.
motor_power = 2.0254e+05
% Plot control
motor_power = 100000:100:400000;
plot(motor_power,arrayfun(@(motor_power)fun(motor_power),motor_power))
Harsh
Harsh 2023 年 9 月 2 日
編集済み: Harsh 2023 年 9 月 2 日
Yes, I want to find its value
If I take motor_power=239000 then it is giving same time.
Is there any other way to solve it?
Harsh
Harsh 2023 年 9 月 2 日
the equation behind it is as below where p is the motor power and R is the resistance which depends on the velocity V
Torsten
Torsten 2023 年 9 月 2 日
It's solved. Didn't you see the output from "fsolve" : 202 540 ?
Harsh
Harsh 2023 年 9 月 2 日
Now its working.
Thank you very much for the quick support!
Walter Roberson
Walter Roberson 2023 年 9 月 2 日
Q = @(v) sym(v);
r = Q(344)/Q(1000);
s = Q(1);
original_base_speed = Q(203)/Q(10);
b = original_base_speed/s;
m = Q(2777)/Q(100);
m_v = Q(1700)*Q(112)/Q(100);
g = Q(981)/Q(100);
m_1 = Q(0.006);
m_2 = Q(0.0001);
r = Q(1204)/Q(1000);
c_d = Q(23)/Q(100);
height = Q(159)/Q(100);
width = Q(1627)/Q(1000);
area = Q(222)/Q(100);
total_time = Q(568)/Q(100);
if b<=m
b_speed=b;
else
b_speed=m;
end
syms speed motor_power
ct(speed,motor_power) = b./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*b_speed);
if m>b
cp(speed,motor_power) = speed./(motor_power-(m_v*g.*(m_1+m_2.*speed)+0.5*r*c_d*area.*speed.^2).*speed);
else
cp(speed,motor_power) = zeros(size(speed));
end
fun(motor_power) = total_time-(m_v*int(ct(speed,motor_power),speed,0,b_speed)+m_v*int(cp(speed,motor_power),speed,b_speed,m))
fun(motor_power) = 
limit(fun(motor_power), motor_power, -inf)
ans = 
df = diff(fun(motor_power));
limit(df, motor_power, -inf)
ans = 
0
The lower limit is positive, and the derivative is positive out to negative infinity... so the function has no zero.
Possible exception would be in the range that is covered by the piecewise, but the function is everywhere positive in that range too.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeSymbolic Math Toolbox についてさらに検索

製品

リリース

R2022a

質問済み:

2023 年 9 月 1 日

コメント済み:

2023 年 9 月 2 日

Community Treasure Hunt

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

Start Hunting!

Translated by