Function won't accept vector

6 ビュー (過去 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 Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by