Vectorization and plotting user-defined function
14 次查看(过去 30 天)
显示 更早的评论
I am new to MATLAB and am having trouble understanding how to plot userdefined functions.
I have defined a function f via
fun=@(t,r)(t.^2-t.^4).*exp(r.*t.^2);
fun1=@(t,r)exp(r.*t.^2);
f=@(r)integral(@(t)fun(t,r),0,1)./integral(@(t)fun1(t,r),0,1);
Now if I specify say
r=linspace(-10,10);
and type
x=f(r);
I get errors such as
Matrix dimensions must agree.
Error in @(t,r)(t.^2-t.^4).*exp(r.*t.^2)
whereas
x=sin(r);
is accepted. I seem to have been careful to use .* etc. What is the difference between my f and sin, and how do I plot a parametrized graph (f(r),g(r))?
0 个评论
采纳的回答
Adam Danz
2020-9-4
编辑:Adam Danz
2020-9-4
To evaluate the integrals at each value in r,
x = arrayfun(f,r);
2 个评论
Adam Danz
2020-9-4
I don't get that error when I apply this solution to the function in you question (I doubt you get that error with those functions, either). So, something is different between T and g compared to f.
What line is producing the error? Could you provide a new minimal working example that reproduces the error?
更多回答(1 个)
Steven Lord
2020-9-4
By default integral calls the integrand function with a vector of values at which the integrand should be evaluated. There's no guarantee that this vector will have a size compatible with the size of your r vector.
If you tell integral that your function is array-valued by passing the name-value pair 'ArrayValued', true then integral will call your integrand with a scalar and expect an array as output. Try running the "Vector-Valued Function" example on the documentation page for the integral function with and without the name-value pair and compare the results.
2 个评论
Adam Danz
2020-9-5
@John, voting (thumbs up icon) is another way to show support/appreciation. Glad to hear that you found the forum useful!
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!