I want to integrate a function

1 view (last 30 days)
reshma nesargi
reshma nesargi on 28 Dec 2021
Commented: reshma nesargi on 2 Jan 2022
i want to integrate this function used quad function but giving error
kindly resolve
  2 Comments
Walter Roberson
Walter Roberson on 28 Dec 2021
Your code is
function Ix = f(x)
global Lz cr2 n1 n2
%wq = x.*x *cr2/(2 * Lz*Lz);
wq = x;
f5 = fbjnn(x,n1,n2);
Ix = (x.^3).*f5;
end
We do not have values for those global variables, and we do not have your fbjnn function, so we are not able to test the code.
What error message is given?
Torsten
Torsten on 28 Dec 2021
Can "fbjnn" handle vector inputs for x ?

Sign in to comment.

Answers (5)

reshma nesargi
reshma nesargi on 28 Dec 2021
kindly go through the entire program and help me sought out the problem.
fbjnn is the function written to calculate the formula given in untitled file.

reshma nesargi
reshma nesargi on 28 Dec 2021
the program worked error free from 2,3 days all of a sudden since yesterday it is giving the error like this
not understanding what the problem is
Error using .^
Arrays have incompatible sizes for
this operation.
Error in fbjnn (line 11)
fz = exp(-z).* (z.^k);
Error in f (line 6)
f5 = fbjnn(x,n1,n2);
Error in quad (line 67)
y = f(x, varargin{:});
Error in Bulk (line 32)
Ix = quad('f',0,100);
  1 Comment
Torsten
Torsten on 28 Dec 2021
Edited: Torsten on 28 Dec 2021
z and k are incompatible in size.
That's why I asked whether fbjnn can deal with vector input. This shows: it can't.
Use "integral" instead of "quad" and call it with the option 'ArrayValued',true :
Ix = quad('f',0,100); -> Ix = integral(@f,0,100,'ArrayValued',true);
Iz = quad('fun',0,100); -> Iz = integral(@fun,0,100,'ArrayValued',true);

Sign in to comment.


reshma nesargi
reshma nesargi on 28 Dec 2021
Thank you but what is meant by 'ArrayValued' should we give some value there or write as it is what ever you have suggested
  1 Comment
Walter Roberson
Walter Roberson on 29 Dec 2021
'ArrayValued',true is a "name/value pair" that should be written exactly as Torsten showed.

Sign in to comment.


reshma nesargi
reshma nesargi on 28 Dec 2021
on substituting quad with integral it gave this error
Warning: Minimum step size reached
near x = 6.284. There may be a
singularity, or the tolerances may
be too tight for this problem.
> In integralCalc/checkSpacing (line 467)
In integralCalc/iterateArrayValued (line 215)
In integralCalc/vadapt (line 130)
In integralCalc (line 75)
In integral (line 87)
In Bulk (line 36)
Unable to perform assignment
because the indices on the left
side are not compatible with the
size of the right side.
Error in Bulk (line 59)
cmb(i+1) = (pref *sumn2)/(9*10^11);

Walter Roberson
Walter Roberson on 29 Dec 2021
global Lz cr2 n1 n2
Uh-oh... caution time.
Lz = 1*10^-06;
cr2 = (hc * c)/(ec * b);
Okay, the globals Lz and cr2 are defined.
for i = 0:1:20
t(i+1)=i;
bkt=kB*t(i+1);
Ix = integral(@f, 0, 100, 'arrayvalued', true)
Okay, what does f do?
function Ix = f(x)
global Lz cr2 n1 n2
%wq = x.*x *cr2/(2 * Lz*Lz);
wq = x;
f5 = fbjnn(x,n1,n2);
Ix = (x.^3).*f5;
end
... f uses the global variables n1 and n2 that are not defined.
  3 Comments
Walter Roberson
Walter Roberson on 1 Jan 2022
Show us the lines that assign values to n1 and n2 in Bulk.
reshma nesargi
reshma nesargi on 2 Jan 2022
N1 and N2 comes in the for loop of the main program Bulk. I was trying to call the quad function outside the for the so may be the value of N1 and N2 were not reaching it. Now i tried calling it with in the for loop it worked.
thankq very much for all your suggestions to get through this.
thanks much

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!