Error using quad "Error using quad (line 75) The integrand function must return an output vector of the same length as the input vector."

I have edited the code according to answers.
Can anyone explain the reason behind the errors and help me correcting the following code:
U = 1;
e = @(q) 2*(1-cos(2*pi*q));
hq = @(q,n0) ((e(q)).^2+2*U*n0*(e(q))).^0.5;
y = @(q,n0) (((e(q))+(U*n0))/hq(q,n0))-1;
a = -0.5;
b = 0.5;
v = @(n0) quad(@(q) y(q,n0),a,b);
cv =@(n0) n0+(0.5*v(n0))-1;
while U < 20
n0 = 0.1;
options = optimset('Display', 'iter');
n = fsolve(cv(n0),n0,0.1,options);
plot(U,n)
hold on
U = U + 1;
end
Errors:
Error using quad (line 75)
The integrand function must return an output vector of the same length as the input vector.
Error in @(n0)quad(@(q)y(q,n0),a,b)
Error in @(n0)n0+(0.5*v(n0))-1
Error in simulv1 (line 12)
n = fsolve(cv(n0),n0,0.1,options);

 採用された回答

You forgot to fully vectorise those equations. Change them to:
hq = @(q,n0) ((eq(q)).^2+2*U*n0*(eq(q))).^0.5;
y = @(q,n0) (((eq(q))+(U*n0))./hq(q,n0))-1;
and see if that helps.

5 件のコメント

jayash
jayash 2015 年 2 月 25 日
oops! my bad . I have edited my question. Can you please look into it now?
I can’t run your code, so I can only guess at the problem.
If you fix ‘n0’ at some value, what is the size of ‘y(q,n0)’ for whatever ‘q’ is?
jayash
jayash 2015 年 2 月 25 日
I am not fixing n0 (I mean, I don't want to, as I need to find its value by using fsolve). I think there's some problem with the way I use fsolve syntax.
A Jenkins
A Jenkins 2015 年 2 月 25 日
I would guess that your y is the wrong size because you have missed Star Strider's second suggestion: that you also need ./ instead of / in the line that calculates y.
@jayash — Evaluate ‘y(q,n0)’ (and your other functions as well) for representative values of both arguments to see what it does. Always evaluate the functions you give to solver routines first to be certain that they work and give you the results you expect.
@A Jenkins — Thank you. That very well could be the problem.

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

その他の回答 (2 件)

dpb
dpb 2015 年 2 月 25 日
_"I am using .^ but..."
But you aren't, everywhere. The line given by the error message is--
hq = @(q,n0) ((eq(q))^2+2*U*n0*(eq(q))).^0.5;
The term (eq(q))^2 doesn't have a 'dot' operator just as the error says.
BTW, do NOT use eq as a variable or function name; that aliases the builtin logical "equal" function == or eq()
>> which eq
built-in (C:\ML_R2012b\toolbox\matlab\ops\@double\eq) % double method
>>

1 件のコメント

jayash
jayash 2015 年 2 月 25 日
thanks for your suggestion on "eq", I corrected accordingly.

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

A Jenkins
A Jenkins 2015 年 2 月 25 日
There are two powers in that line and you have only replaced one.
@(q,n0)((eq(q)) ^ 2+2*U*n0*(eq(q))) .^ 0.5

カテゴリ

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

製品

質問済み:

2015 年 2 月 25 日

コメント済み:

2015 年 2 月 25 日

Community Treasure Hunt

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

Start Hunting!

Translated by