Can any body solve this error? Subscript indices must either be real positive integers or logicals. Error in mynumericl​alinversel​aplace (line 17) u(i)=2/t*r​eal(k1*F1(​y(i),a1/t)​)+2/t*real​(k2*F1(y(i​),a2/t))..​.

1 次查看(过去 30 天)
clear all; close all; clc;
syms q;
a1=12.83767675+1i*1.666063445; k1=-36902.08210+1i*196990.4257;
a2=12.22613209+1i*5.012718792; k2=61277.02524-1i*95408.62551;
a3=10.93430308+1i*8.409673116; k3=-28916.56288+1i*18169.18531;
a4=8.776434715+1i*11.92185389; k4=4655.361138-1i*1.901528642;
a5=5.225453361+1i*15.72952905; k5=-118.7414011-1i*141.3036911;
Pr=10; t=2;
a=0.3;
y=linspace(0,5);
for i=1:100
F1{i}=@(q) sqrt((1-a)*q+a)/sqrt(Pr*q)-(sqrt((1-a)*q+a))*1/q*exp(-y(i)*sqrt((Pr*q^a)/(1-a)*q+a));
u(i)=2/t*real(k1*F1(y(i),a1/t))+2/t*real(k2*F1(y(i),a2/t))...
+2/t*real(k3*F1(y(i),a3/t))+2/t*real(k4*F1(y(i),a4/t))+2/t*real(k5*F1(y(i),a5/t));
end
plot(y,u);
axis([0 5 -9 6]);
  2 个评论
Farooq Aamir
Farooq Aamir 2020-6-11
@ Madhan ravi still I have this error.
Error using sym/subsindex (line 766)
Invalid indexing or function definition. When defining a function, ensure that the arguments are symbolic variables and the
body of the function is a SYM expression. When indexing, the input must be numeric, logical, or ':'.
Error in mynumericlalinverselaplace (line 16)
F1(y(i),q)=@(q) sqrt((1-a)*q+a)/sqrt(Pr*q)-(sqrt((1-a)*q+a))*1/q*exp(-y{i}*sqrt((Pr*q^a)/(1-a)*q+a));

请先登录,再进行评论。

采纳的回答

John D'Errico
John D'Errico 2020-6-11
Simple enough, really.
You create a cell array of function handles in a loop. Thus we see F1.
for i=1:100
for i=1:100
F1{i}=@(q) sqrt((1-a)*q+a)/sqrt(Pr*q)-(sqrt((1-a)*q+a))*1/q*exp(-y(i)*sqrt((Pr*q^a)/(1-a)*q+a));
u(i)=2/t*real(k1*F1(y(i),a1/t))+2/t*real(k2*F1(y(i),a2/t))...
+2/t*real(k3*F1(y(i),a3/t))+2/t*real(k4*F1(y(i),a4/t))+2/t*real(k5*F1(y(i),a5/t));
end
Then, as @madhan ravi points out, you use the function handles improperly. Actuallly, you still do not create them properly in what you claim fixes it.
Finally, we see the problem you mention, that you do not use those function handles correctly at all. For example, we see this:
F1(y(i),a1/t)
But F1 is NOT a function handle. F1 is a cell array, that just happens to contain function handles. There is a huge difference.
Why do you need to create that array of function handles anyway? You use it once, then not again. Perhaps you will use it later.
So, first, create each function handle CORRECTLY, to take TWO arguments. As you did it, this has ONLY ONE argument: q.
@(q) sqrt((1-a)*q+a)/sqrt(Pr*q)-(sqrt((1-a)*q+a))*1/q*exp(-y(i)*sqrt((Pr*q^a)/(1-a)*q+a));
However, you are calling it by passing in two arguments. That must fail. And I have no idea what you really want to do.
Next is the problem of indexing the cell array of function handles. I'll give an example of how to do that properly.
F1 = {@(x) x, @(x) x+1, @(x) x+2}
F1 =
1×3 cell array
{@(x)x} {@(x)x+1} {@(x)x+2}
>> F1{1}(2)
ans =
2
>> F1{2}(2)
ans =
3
>> F1{3}(2)
ans =
4
As you can see, F1 is a cell array that contains 3 function handles. If I want to now evaluate a specific function handle, use an index. Thus F1{1} accesses the first function handle. THEN we can evaluate that function handle. So to evaluate the i'th function handle you must use it as F1{i}(stuff), where stuff is whatever you will now pass into the function handle.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by