Function won't accept vector

조회 수: 4 (최근 30일)
Rachel Dawn
Rachel Dawn 2018년 2월 23일
댓글: Rachel Dawn 2018년 2월 23일
function result = g(x)
result= (2*x*exp(cos(6*x))*exp(-x)) + 15
" Error using * Inner matrix dimensions must agree."
I tried inputting g([0 1 2]), but I get this error. Can someone help me understand why? I would like the function to accept scalars and vectors.
I know there's such a thing as ".*", but when I created this function: (13/400)*(x.^3 - 30.876*x.^2 + 32.454*x + 99.89), it accepted [0 1 2] just fine.

답변 (2개)

KSSV
KSSV 2018년 2월 23일
편집: KSSV 2018년 2월 23일
g = @(x) (2*x.*exp(cos(6*x)).*exp(-x)) + 15 ;
result = g([0 1 2])
When you input a vector, you need to do element by element multiplication. This is done by using .*. Please read about matlab element by element operations. https://in.mathworks.com/help/fixedpoint/ref/times.html
  댓글 수: 3
James Tursa
James Tursa 2018년 2월 23일
@Rachel: scalar*array gives the same result as scalar.*array, so in this particular case the * and the .* do the same thing. So in your 2nd function:
(13/400)*(x.^3 - 30.876*x.^2 + 32.454*x + 99.89)
The only multiply operations that you have involve a scalar (the (13/400) and the 30.876 and the 32.454 are all scalars). Hence there was no need in this particular case to use the .* operator.
In your 1st function, x and exp(cos(6*x)) and exp(-x) are all vectors that you are multiplying by each other so you must use the .* operator to get the element-wise multiplication that you want.
Rachel Dawn
Rachel Dawn 2018년 2월 23일
Thank you, James!

댓글을 달려면 로그인하십시오.


Shrirang
Shrirang 2018년 2월 23일
I just tried it..Your function behaves perfectly fine with ".*" operator Here is an example.
function result = Test(x)
result= (2 .* x .* exp(cos(6 .* x)) .* exp(- x)) + 15;
and answer was ==> 15.0000 16.9219 16.2588
May be there was typo mistake in your trial In your second example you have properly handled the dot operator before ^ so there was no error.
Let me know if it works for you.
  댓글 수: 1
Rachel Dawn
Rachel Dawn 2018년 2월 23일
Hello. Thank you for your response. I would like to know why is it that in my 2nd function, I use ".^" and in the first function I use ".*" ? Why does my 2nd function accept vectors without the use of ".*"?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by