Unable to convert expression into double array.
显示 更早的评论
I'm running a code which gives me the error at certain combanation of parameter: "Unable to convert expression into double array."
I defined the function "answer" as follows:
function F=answer(t,k,x,N,d,v1)
syms x;
F(1)=-t(3)+((t(2)^2-t(1)^2)*k/(2*d))^(1/N);
F(2)=int(1/sqrt(t(1)^2+(2*d*(t(3)^N)/k*N)+2*d*(N-1)*x^N/k*N),x,t(3),1)-3*k*t(1)/2*v1+t(3)/t(1);
F(3)=int(1/sqrt(t(1)^2+(2*d*(t(3)^N)/k*N)+2*d*(N-1)*x^N/k*N),x,t(3),1)+k*(t(1)-t(2))/d*t(3)^(N-1);
end
And then I want to solve the eqaution system regarding some parameter combanation:
clc;
clear all;
syms x;
m=25;m1=20;N=1:20/m1:20;
t0=[5:50/m1:55;35:50/m1:85;1:0.5/m1:1.5]';
v1=10:50/m1:60;
d=18:100/m1:118;
k=0:1/m:1;
t1=zeros(m1,m);
t2=zeros(m1,m);
t3=zeros(m1,m);
F0=[0;0;0];
options=optimoptions( 'fsolve' , 'Display' , 'iter-detailed' , 'TolFun' , 1e-2, ...,
'MaxFunEvals' , 1e10 , 'MaxIter' , 500 ) ;
% the solution regarding K%
for j=1:m1
for i=1:m
F0=fsolve(@(t)answer(t,k(i),x,N(11),v1(j),d(j)),t0(j,:),options);
t1(j,i)=F0(1);
t2(j,i)=F0(2);
t3(j,i)=F0(3);
end
end
It is ok when running with j=1,2, but when the iteration goes to j=3 and i=17, something goes wrong with the following warning:
从 sym 转换为 double 时出现以下错误:
Unable to convert expression into double array.
error: answer (line 4)
F(2)=int(1/sqrt(t(1)^2+(2*d*(t(3)^N)/k*N)+2*d*(N-1)*x^N/k*N),x,t(3),1)-3*k*t(1)/2*v1+t(3)/t(1);
error: @(t)answer(t,k(i),x,N(11),v1(j),d(j))
error: trustnleqn (line 211)
F = feval(funfcn{3},reshape(xTrial,sizes.xShape),varargin{:});
error: fsolve (line 408)
trustnleqn(funfcn,x,verbosity,gradflag,options,defaultopt,f,JAC,...
Hope someone can help me!
回答(1 个)
Walter Roberson
2019-7-8
0 个投票
int() can fail to converge. When that happens, it returns an int() expression that then cannot be converted to numeric using implicit double() .
You could switch to numeric integration, but that would probably fail.
You could put in a try/catch but you would have the question of what value you should substitute when there is no convergence.
类别
在 帮助中心 和 File Exchange 中查找有关 Conversion Between Symbolic and Numeric 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
