Clear Filters
Clear Filters

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 view (last 30 days)
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 Comments
Farooq Aamir
Farooq Aamir on 11 Jun 2020
@ 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));

Sign in to comment.

Accepted Answer

John D'Errico
John D'Errico on 11 Jun 2020
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.

More Answers (0)

Categories

Find more on Characters and Strings in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!